| #pragma once | 
 |  | 
 | #include "parser_interface.hpp" | 
 | #include "types.hpp" | 
 |  | 
 | #include <string_view> | 
 |  | 
 | namespace vpd | 
 | { | 
 | /** | 
 |  * @brief Concrete class to implement JEDEC SPD parsing. | 
 |  * | 
 |  * The class inherits ParserInterface interface class and overrides the parser | 
 |  * functionality to implement parsing logic for JEDEC SPD format. | 
 |  */ | 
 | class JedecSpdParser : public ParserInterface | 
 | { | 
 |   public: | 
 |     // Deleted API's | 
 |     JedecSpdParser() = delete; | 
 |     JedecSpdParser(const JedecSpdParser&) = delete; | 
 |     JedecSpdParser& operator=(const JedecSpdParser&) = delete; | 
 |     JedecSpdParser(JedecSpdParser&&) = delete; | 
 |     JedecSpdParser& operator=(JedecSpdParser&&) = delete; | 
 |     ~JedecSpdParser() = default; | 
 |  | 
 |     /** | 
 |      * @brief Constructor | 
 |      * | 
 |      * @param[in] i_spdVector - JEDEC SPD data. | 
 |      */ | 
 |     explicit JedecSpdParser(const types::BinaryVector& i_spdVector) : | 
 |         m_memSpd(i_spdVector) | 
 |     {} | 
 |  | 
 |     /** | 
 |      * @brief Parse the memory SPD binary data. | 
 |      * | 
 |      * Collects and emplace the keyword-value pairs in map. | 
 |      * | 
 |      * @return map of keyword:value | 
 |      */ | 
 |     types::VPDMapVariant parse(); | 
 |  | 
 |   private: | 
 |     /** | 
 |      * @brief An API to read keywords. | 
 |      * | 
 |      * @param[in] i_iterator - iterator to buffer containing SPD | 
 |      * @return- map of kwd:value | 
 |      */ | 
 |     types::JedecSpdMap readKeywords( | 
 |         types::BinaryVector::const_iterator& i_iterator); | 
 |  | 
 |     /** | 
 |      * @brief This function calculates DIMM size from DDR4 SPD | 
 |      * | 
 |      * @param[in] i_iterator - iterator to buffer containing SPD | 
 |      * @return calculated size or 0 in case of any error. | 
 |      */ | 
 |     auto getDDR4DimmCapacity(types::BinaryVector::const_iterator& i_iterator); | 
 |  | 
 |     /** | 
 |      * @brief This function calculates part number from DDR4 SPD | 
 |      * | 
 |      * @param[in] i_iterator - iterator to buffer containing SPD | 
 |      * @return calculated part number or a default value. | 
 |      */ | 
 |     std::string_view getDDR4PartNumber( | 
 |         types::BinaryVector::const_iterator& i_iterator); | 
 |  | 
 |     /** | 
 |      * @brief This function calculates serial number from DDR4 SPD | 
 |      * | 
 |      * @param[in] i_iterator - iterator to buffer containing SPD | 
 |      * @return calculated serial number or a default value. | 
 |      */ | 
 |     std::string getDDR4SerialNumber( | 
 |         types::BinaryVector::const_iterator& i_iterator); | 
 |  | 
 |     /** | 
 |      * @brief This function allocates FRU number based on part number | 
 |      * | 
 |      * Mappings for FRU number from calculated part number is used | 
 |      * for DDR4 ISDIMM. | 
 |      * | 
 |      * @param[in] i_partNumber - part number of the DIMM | 
 |      * @param[in] i_iterator - iterator to buffer containing SPD | 
 |      * @return allocated FRU number or a default value | 
 |      */ | 
 |     std::string_view getDDR4FruNumber( | 
 |         const std::string& i_partNumber, | 
 |         types::BinaryVector::const_iterator& i_iterator); | 
 |  | 
 |     /** | 
 |      * @brief This function allocates CCIN based on part number for DDR4 SPD | 
 |      * | 
 |      * @param[in] i_partNumber - part number of the DIMM | 
 |      * @return allocated CCIN or a default value. | 
 |      */ | 
 |     std::string_view getDDR4CCIN(const std::string& i_partNumber); | 
 |  | 
 |     /** | 
 |      * @brief This function returns manufacturer's ID for DDR4 DIMM. | 
 |      * | 
 |      * @return manufacturer ID. | 
 |      */ | 
 |     types::BinaryVector getDDR4ManufacturerId(); | 
 |  | 
 |     /** | 
 |      * @brief This function calculates DIMM size from DDR5 SPD | 
 |      * | 
 |      * @param[in] i_iterator - iterator to buffer containing SPD | 
 |      * @return calculated size or 0 in case of any error. | 
 |      */ | 
 |     auto getDDR5DimmCapacity(types::BinaryVector::const_iterator& i_iterator); | 
 |  | 
 |     /** | 
 |      * @brief This function calculates part number from DDR5 SPD | 
 |      * | 
 |      * @param[in] i_iterator - iterator to buffer containing SPD | 
 |      * @return calculated part number or a default value. | 
 |      */ | 
 |     auto getDDR5PartNumber(types::BinaryVector::const_iterator& i_iterator); | 
 |  | 
 |     /** | 
 |      * @brief This function calculates serial number from DDR5 SPD | 
 |      * | 
 |      * @param[in] i_iterator - iterator to buffer containing SPD | 
 |      * @return calculated serial number. | 
 |      */ | 
 |     auto getDDR5SerialNumber(types::BinaryVector::const_iterator& i_iterator); | 
 |  | 
 |     /** | 
 |      * @brief This function allocates FRU number based on part number | 
 |      * | 
 |      * Mappings for FRU number from calculated part number is used | 
 |      * for DDR5 ISDIMM. | 
 |      * | 
 |      * @param[in] i_partNumber - part number of the DIMM | 
 |      * @return allocated FRU number. | 
 |      */ | 
 |     auto getDDR5FruNumber(const std::string& i_partNumber); | 
 |  | 
 |     /** | 
 |      * @brief This function allocates CCIN based on part number for DDR5 SPD | 
 |      * | 
 |      * @param[in] i_partNumber - part number of the DIMM | 
 |      * @return allocated CCIN. | 
 |      */ | 
 |     auto getDDR5CCIN(const std::string& i_partNumber); | 
 |  | 
 |     // SPD file to be parsed | 
 |     const types::BinaryVector& m_memSpd; | 
 | }; | 
 |  | 
 | } // namespace vpd |