/* * Copyright (c) 2022, RPTU Kaiserslautern-Landau * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. Neither the name of the copyright holder nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Authors: * Iron Prando da Silva */ #include "configurationfactory.h" std::shared_ptr ConfigurationFactory::make(const TraceDB& tdb) { const QString deviceName = ConfigurationBase::getDeviceName(tdb); if (deviceName == "DDR3") { return std::make_shared(tdb); } else if (deviceName == "DDR4") { return std::make_shared(tdb); } else if (deviceName == "HBM2") { return std::make_shared(tdb); } else if (deviceName == "LPDDR4") { return std::make_shared(tdb); } else if (deviceName == "DDR5") { return std::make_shared(tdb); } else if (deviceName == "LPDDR5") { return std::make_shared(tdb); } else { // TODO maybe throw? throw std::invalid_argument("Could not find the device type '" + deviceName.toStdString() + '\''); } } const std::vector ConfigurationFactory::possiblePhases(const TraceDB& tdb) { const QString deviceName = ConfigurationBase::getDeviceName(tdb); if (deviceName == "DDR3") { // return DDR3TimeDependencies::getPossiblePhases(); return TimeDependenciesInfoDDR3::getPossiblePhases(); } else if (deviceName == "DDR4") { return TimeDependenciesInfoDDR4::getPossiblePhases(); } else if (deviceName == "HBM2") { return TimeDependenciesInfoHBM2::getPossiblePhases(); } else if (deviceName == "LPDDR4") { return TimeDependenciesInfoLPDDR4::getPossiblePhases(); } else if (deviceName == "DDR5") { return TimeDependenciesInfoDDR5::getPossiblePhases(); } else if (deviceName == "LPDDR5") { return TimeDependenciesInfoLPDDR5::getPossiblePhases(); } else { // TODO maybe throw? // throw std::invalid_argument("Could not find the device type '" + deviceName.toStdString() // + '\''); return {""}; } } bool ConfigurationFactory::deviceSupported(const TraceDB& tdb) { const QString deviceName = ConfigurationBase::getDeviceName(tdb); if (deviceName == "DDR3") { return true; } else if (deviceName == "DDR4") { return true; } else if (deviceName == "HBM2") { return true; } else if (deviceName == "LPDDR4") { return true; } else if (deviceName == "DDR5") { return true; } else if (deviceName == "LPDDR5") { return true; } else { return false; } }