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