1 #pragma once
2 #include "parser_interface.hpp"
3 #include "types.hpp"
4 
5 namespace openpower
6 {
7 namespace vpd
8 {
9 namespace parser
10 {
11 namespace factory
12 {
13 /** @class ParserFactory
14  *  @brief Factory class to instantiate concrete parser class.
15  *
16  *  This class should be used to instantiate an instance of parser class based
17  *  on the typeof vpd file.
18  */
19 
20 class ParserFactory
21 {
22   public:
23     ParserFactory() = delete;
24     ~ParserFactory() = delete;
25     ParserFactory(const ParserFactory&) = delete;
26     ParserFactory& operator=(const ParserFactory&) = delete;
27     ParserFactory(ParserFactory&&) = delete;
28     ParserFactory& operator=(ParserFactory&&) = delete;
29 
30     /**
31      * @brief A method to get object of concrete parser class.
32      * @param[in] - vpd file to check for the type.
33      * @param[in] - InventoryPath to call out FRU in case PEL is logged.
34      * @param[in] - vpdFilePath for VPD HW path.
35      * @param[in] - vpdStartOffset for starting offset of VPD.
36      * @return - Pointer to concrete parser class object.
37      */
38     static interface::ParserInterface*
39         getParser(const Binary& vpdVector, const std::string& inventoryPath,
40                   const std::string& vpdFilePath, uint32_t vpdStartOffset);
41 
42     /**
43      * @brief A method to delete the parser object.
44      * @param[in] - Pointer to the parser object.
45      */
46     static void freeParser(interface::ParserInterface* parser);
47 }; // ParserFactory
48 
49 } // namespace factory
50 } // namespace parser
51 } // namespace vpd
52 } // namespace openpower
53