parser: define implementation class
This change introduces a class that serves as the OpenPOWER VPD parser.
The class provides an API to construct itself with binary OpenPOWER VPD,
and an API to run the parser.
Change-Id: Ifcb360a8b67ac4d2a5116e2515cf689c552819b4
Signed-off-by: Deepak Kodihalli <dkodihal@in.ibm.com>
diff --git a/impl.hpp b/impl.hpp
new file mode 100644
index 0000000..28fcbcc
--- /dev/null
+++ b/impl.hpp
@@ -0,0 +1,66 @@
+#pragma once
+
+#include "store.hpp"
+
+namespace openpower
+{
+namespace vpd
+{
+namespace parser
+{
+
+/** @class Impl
+ * @brief Implements parser for OpenPOWER VPD
+ *
+ * An Impl object must be constructed by passing in OpenPOWER VPD in
+ * binary format. To parse the VPD, call the run() method. The run()
+ * method returns an openpower::vpd::Store object, which contains
+ * parsed VPD, and provides access methods for the VPD.
+ *
+ * Following is the algorithm used to parse OpenPOWER VPD:
+ * 1) Validate that the first record is VHDR, the header record.
+ * 2) From the VHDR record, get the offset of the VTOC record,
+ * which is the table of contents record.
+ * 3) Process the VTOC record - note offsets of supported records.
+ * 4) For each supported record :
+ * 4.1) Jump to record via offset. Add record name to parser output.
+ * 4.2) Process record - for each contained and supported keyword:
+ * 4.2.1) Note keyword name and value, associate this information to
+ * to the record noted in step 4.1).
+ */
+class Impl
+{
+ public:
+ Impl() = delete;
+ Impl(const Impl&) = delete;
+ Impl& operator=(const Impl&) = delete;
+ Impl(Impl&&) = delete;
+ Impl& operator=(Impl&&) = delete;
+ ~Impl() = default;
+
+ /** @brief Construct an Impl
+ *
+ * @param[in] vpdBuffer - Binary OpenPOWER VPD
+ */
+ explicit Impl(Binary&& vpdBuffer)
+ : vpd(std::move(vpdBuffer)),
+ out{}
+ {}
+
+ /** @brief Run the parser on binary OpenPOWER VPD
+ *
+ * @returns openpower::vpd::Store object
+ */
+ Store run();
+
+ private:
+ /** @brief OpenPOWER VPD in binary format */
+ Binary vpd;
+
+ /** @brief parser output */
+ Parsed out;
+};
+
+} // namespace parser
+} // namespace vpd
+} // namespace openpower