1 #pragma once 2 3 #include "section.hpp" 4 #include "stream.hpp" 5 6 namespace openpower 7 { 8 namespace pels 9 { 10 11 /** 12 * @class Generic 13 * 14 * This class is used for a PEL section when there is no other class to use. 15 * It just contains a vector of the raw data. Its purpose is so that a PEL 16 * can be completely unflattened even if the code doesn't have a class for 17 * every section type. 18 */ 19 class Generic : public Section 20 { 21 public: 22 Generic() = delete; 23 ~Generic() = default; 24 Generic(const Generic&) = default; 25 Generic& operator=(const Generic&) = default; 26 Generic(Generic&&) = default; 27 Generic& operator=(Generic&&) = default; 28 29 /** 30 * @brief Constructor 31 * 32 * Fills in this class's data fields from the stream. 33 * 34 * @param[in] pel - the PEL data stream 35 */ 36 explicit Generic(Stream& pel); 37 38 /** 39 * @brief Flatten the section into the stream 40 * 41 * @param[in] stream - The stream to write to 42 */ 43 void flatten(Stream& stream) override; 44 45 /** 46 * @brief Returns the size of this section when flattened into a PEL 47 * 48 * @return size_t - the size of the section 49 */ 50 size_t flattenedSize() 51 { 52 return Section::flattenedSize() + _data.size(); 53 } 54 55 /** 56 * @brief Returns the raw section data 57 * 58 * @return std::vector<uint8_t>& 59 */ 60 const std::vector<uint8_t>& data() const 61 { 62 return _data; 63 } 64 65 private: 66 /** 67 * @brief Fills in the object from the stream data 68 * 69 * @param[in] stream - The stream to read from 70 */ 71 void unflatten(Stream& stream); 72 73 /** 74 * @brief Validates the section contents 75 * 76 * Updates _valid (in Section) with the results. 77 */ 78 void validate() override; 79 80 /** 81 * @brief The section data 82 */ 83 std::vector<uint8_t> _data; 84 }; 85 86 } // namespace pels 87 } // namespace openpower 88