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