diff options
Diffstat (limited to 'extensions/openpower-pels/generic.hpp')
-rw-r--r-- | extensions/openpower-pels/generic.hpp | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/extensions/openpower-pels/generic.hpp b/extensions/openpower-pels/generic.hpp new file mode 100644 index 0000000..ff85b03 --- /dev/null +++ b/extensions/openpower-pels/generic.hpp @@ -0,0 +1,87 @@ +#pragma once + +#include "section.hpp" +#include "stream.hpp" + +namespace openpower +{ +namespace pels +{ + +/** + * @class Generic + * + * This class is used for a PEL section when there is no other class to use. + * It just contains a vector of the raw data. Its purpose is so that a PEL + * can be completely unflattened even if the code doesn't have a class for + * every section type. + */ +class Generic : public Section +{ + public: + Generic() = delete; + ~Generic() = default; + Generic(const Generic&) = default; + Generic& operator=(const Generic&) = default; + Generic(Generic&&) = default; + Generic& operator=(Generic&&) = default; + + /** + * @brief Constructor + * + * Fills in this class's data fields from the stream. + * + * @param[in] pel - the PEL data stream + */ + explicit Generic(Stream& pel); + + /** + * @brief Flatten the section into the stream + * + * @param[in] stream - The stream to write to + */ + void flatten(Stream& stream) const override; + + /** + * @brief Returns the size of this section when flattened into a PEL + * + * @return size_t - the size of the section + */ + size_t flattenedSize() + { + return Section::flattenedSize() + _data.size(); + } + + /** + * @brief Returns the raw section data + * + * @return std::vector<uint8_t>& + */ + const std::vector<uint8_t>& data() const + { + return _data; + } + + private: + /** + * @brief Fills in the object from the stream data + * + * @param[in] stream - The stream to read from + */ + void unflatten(Stream& stream); + + /** + * @brief Validates the section contents + * + * Updates _valid (in Section) with the results. + */ + void validate() override; + + /** + * @brief The section data + */ + std::vector<uint8_t> _data; +}; + +} // namespace pels +} // namespace openpower |