1e12b181bSSunnySrivastava1984 #include "parser_factory.hpp" 2e12b181bSSunnySrivastava1984 3e12b181bSSunnySrivastava1984 #include "ipz_parser.hpp" 4e12b181bSSunnySrivastava1984 #include "keyword_vpd_parser.hpp" 5e12b181bSSunnySrivastava1984 #include "memory_vpd_parser.hpp" 6e12b181bSSunnySrivastava1984 #include "utils.hpp" 7*dd453be9SSantosh Puranik #include "vpd_exceptions.hpp" 8e12b181bSSunnySrivastava1984 9e12b181bSSunnySrivastava1984 using namespace vpd::keyword::parser; 10e12b181bSSunnySrivastava1984 using namespace openpower::vpd::memory::parser; 11e12b181bSSunnySrivastava1984 using namespace openpower::vpd::parser::interface; 12e12b181bSSunnySrivastava1984 using namespace openpower::vpd::ipz::parser; 13*dd453be9SSantosh Puranik using namespace openpower::vpd::exceptions; 14e12b181bSSunnySrivastava1984 15e12b181bSSunnySrivastava1984 namespace openpower 16e12b181bSSunnySrivastava1984 { 17e12b181bSSunnySrivastava1984 namespace vpd 18e12b181bSSunnySrivastava1984 { 19e12b181bSSunnySrivastava1984 namespace parser 20e12b181bSSunnySrivastava1984 { 21e12b181bSSunnySrivastava1984 namespace factory 22e12b181bSSunnySrivastava1984 { 23e12b181bSSunnySrivastava1984 interface::ParserInterface* ParserFactory::getParser(Binary&& vpdVector) 24e12b181bSSunnySrivastava1984 { 25e12b181bSSunnySrivastava1984 vpdType type = vpdTypeCheck(vpdVector); 26e12b181bSSunnySrivastava1984 27e12b181bSSunnySrivastava1984 switch (type) 28e12b181bSSunnySrivastava1984 { 29e12b181bSSunnySrivastava1984 case IPZ_VPD: 30e12b181bSSunnySrivastava1984 { 31e12b181bSSunnySrivastava1984 return new IpzVpdParser(std::move(vpdVector)); 32e12b181bSSunnySrivastava1984 } 33e12b181bSSunnySrivastava1984 34e12b181bSSunnySrivastava1984 case KEYWORD_VPD: 35e12b181bSSunnySrivastava1984 { 36e12b181bSSunnySrivastava1984 return new KeywordVpdParser(std::move(vpdVector)); 37e12b181bSSunnySrivastava1984 } 38e12b181bSSunnySrivastava1984 39e12b181bSSunnySrivastava1984 case MEMORY_VPD: 40e12b181bSSunnySrivastava1984 { 41e12b181bSSunnySrivastava1984 return new memoryVpdParser(std::move(vpdVector)); 42e12b181bSSunnySrivastava1984 } 43e12b181bSSunnySrivastava1984 44e12b181bSSunnySrivastava1984 default: 45*dd453be9SSantosh Puranik throw VpdDataException("Unable to determine VPD format"); 46e12b181bSSunnySrivastava1984 } 47e12b181bSSunnySrivastava1984 } 48e12b181bSSunnySrivastava1984 49e12b181bSSunnySrivastava1984 void ParserFactory::freeParser(interface::ParserInterface* parser) 50e12b181bSSunnySrivastava1984 { 51e12b181bSSunnySrivastava1984 if (parser) 52e12b181bSSunnySrivastava1984 { 53e12b181bSSunnySrivastava1984 delete parser; 54e12b181bSSunnySrivastava1984 parser = nullptr; 55e12b181bSSunnySrivastava1984 } 56e12b181bSSunnySrivastava1984 } 57e12b181bSSunnySrivastava1984 58e12b181bSSunnySrivastava1984 } // namespace factory 59e12b181bSSunnySrivastava1984 } // namespace parser 60e12b181bSSunnySrivastava1984 } // namespace vpd 61e12b181bSSunnySrivastava1984 } // namespace openpower 62