1d3335dfaSMatt Spinler #pragma once 2d3335dfaSMatt Spinler #include "section_header.hpp" 3d3335dfaSMatt Spinler 4d3335dfaSMatt Spinler namespace openpower 5d3335dfaSMatt Spinler { 6d3335dfaSMatt Spinler namespace pels 7d3335dfaSMatt Spinler { 8d3335dfaSMatt Spinler 9d3335dfaSMatt Spinler /** 10d3335dfaSMatt Spinler * @class Section 11d3335dfaSMatt Spinler * 12d3335dfaSMatt Spinler * The base class for a PEL section. It contains the SectionHeader 13d3335dfaSMatt Spinler * as all sections start with it. 14d3335dfaSMatt Spinler * 15d3335dfaSMatt Spinler */ 16d3335dfaSMatt Spinler class Section 17d3335dfaSMatt Spinler { 18d3335dfaSMatt Spinler public: 19d3335dfaSMatt Spinler Section() = default; 20d3335dfaSMatt Spinler virtual ~Section() = default; 21d3335dfaSMatt Spinler Section(const Section&) = default; 22d3335dfaSMatt Spinler Section& operator=(const Section&) = default; 23d3335dfaSMatt Spinler Section(Section&&) = default; 24d3335dfaSMatt Spinler Section& operator=(Section&&) = default; 25d3335dfaSMatt Spinler 26d3335dfaSMatt Spinler /** 27d3335dfaSMatt Spinler * @brief Returns a reference to the SectionHeader 28d3335dfaSMatt Spinler */ 29*0688545bSMatt Spinler const SectionHeader& header() const 30d3335dfaSMatt Spinler { 31d3335dfaSMatt Spinler return _header; 32d3335dfaSMatt Spinler } 33d3335dfaSMatt Spinler 34d3335dfaSMatt Spinler /** 35d3335dfaSMatt Spinler * @brief Says if the section is valid. 36d3335dfaSMatt Spinler */ 37d3335dfaSMatt Spinler bool valid() const 38d3335dfaSMatt Spinler { 39d3335dfaSMatt Spinler return _valid; 40d3335dfaSMatt Spinler } 41d3335dfaSMatt Spinler 42cf5a8d0fSMatt Spinler /** 43cf5a8d0fSMatt Spinler * @brief Flatten the section into the stream 44cf5a8d0fSMatt Spinler * 45cf5a8d0fSMatt Spinler * @param[in] stream - The stream to write to 46cf5a8d0fSMatt Spinler */ 47*0688545bSMatt Spinler virtual void flatten(Stream& stream) const = 0; 48cf5a8d0fSMatt Spinler 49d3335dfaSMatt Spinler protected: 50d3335dfaSMatt Spinler /** 51d3335dfaSMatt Spinler * @brief Returns the flattened size of the section header 52d3335dfaSMatt Spinler */ 53d3335dfaSMatt Spinler static constexpr size_t flattenedSize() 54d3335dfaSMatt Spinler { 55d3335dfaSMatt Spinler return SectionHeader::flattenedSize(); 56d3335dfaSMatt Spinler } 57d3335dfaSMatt Spinler 58d3335dfaSMatt Spinler /** 59d3335dfaSMatt Spinler * @brief Used to validate the section. 60d3335dfaSMatt Spinler * 61d3335dfaSMatt Spinler * Implemented by derived classes. 62d3335dfaSMatt Spinler */ 63d3335dfaSMatt Spinler virtual void validate() = 0; 64d3335dfaSMatt Spinler 65d3335dfaSMatt Spinler /** 66d3335dfaSMatt Spinler * @brief The section header structure. 67d3335dfaSMatt Spinler * 68d3335dfaSMatt Spinler * Filled in by derived classes. 69d3335dfaSMatt Spinler */ 70d3335dfaSMatt Spinler SectionHeader _header; 71d3335dfaSMatt Spinler 72d3335dfaSMatt Spinler /** 73d3335dfaSMatt Spinler * @brief The section valid flag. 74d3335dfaSMatt Spinler * 75d3335dfaSMatt Spinler * This is determined by the derived class. 76d3335dfaSMatt Spinler */ 77d3335dfaSMatt Spinler bool _valid = false; 78d3335dfaSMatt Spinler }; 79d3335dfaSMatt Spinler } // namespace pels 80d3335dfaSMatt Spinler } // namespace openpower 81