xref: /openbmc/openpower-vpd-parser/vpd-parser/parser_factory.cpp (revision dd453be997178ba042cc99b04fc32e23582eab9c)
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