| #pragma once | 
 |  | 
 | #include "stream.hpp" | 
 |  | 
 | #include <cstdint> | 
 |  | 
 | namespace openpower | 
 | { | 
 | namespace pels | 
 | { | 
 |  | 
 | /** | 
 |  * @class SectionHeader | 
 |  * | 
 |  * This header is at the start of every PEL section.  It has a size | 
 |  * of 8 bytes. | 
 |  */ | 
 | struct SectionHeader | 
 | { | 
 |   public: | 
 |     /** | 
 |      * @brief Constructor | 
 |      */ | 
 |     SectionHeader() : id(0), size(0), version(0), subType(0), componentID(0) {} | 
 |  | 
 |     /** | 
 |      * @brief Constructor | 
 |      * | 
 |      * @param[in] id - the ID field | 
 |      * @param[in] size - the size field | 
 |      * @param[in] version - the version field | 
 |      * @param[in] subType - the sub-type field | 
 |      * @param[in] componentID - the component ID field | 
 |      */ | 
 |     SectionHeader(uint16_t id, uint16_t size, uint8_t version, uint8_t subType, | 
 |                   uint16_t componentID) : | 
 |         id(id), size(size), version(version), subType(subType), | 
 |         componentID(componentID) | 
 |     {} | 
 |  | 
 |     /** | 
 |      * @brief A two character ASCII field which identifies the section type. | 
 |      */ | 
 |     uint16_t id; | 
 |  | 
 |     /** | 
 |      * @brief The size of the section in bytes, including this section header. | 
 |      */ | 
 |     uint16_t size; | 
 |  | 
 |     /** | 
 |      * @brief The section format version. | 
 |      */ | 
 |     uint8_t version; | 
 |  | 
 |     /** | 
 |      * @brief The section sub-type. | 
 |      */ | 
 |     uint8_t subType; | 
 |  | 
 |     /** | 
 |      * @brief The component ID, which has various meanings depending on the | 
 |      * section. | 
 |      */ | 
 |     uint16_t componentID; | 
 |  | 
 |     /** | 
 |      * @brief Returns the size of header when flattened into a PEL. | 
 |      * | 
 |      * @return size_t - the size of the header | 
 |      */ | 
 |     static constexpr size_t flattenedSize() | 
 |     { | 
 |         return sizeof(id) + sizeof(size) + sizeof(version) + sizeof(subType) + | 
 |                sizeof(componentID); | 
 |     } | 
 | }; | 
 |  | 
 | /** | 
 |  * @brief Stream extraction operator for the SectionHeader | 
 |  * | 
 |  * @param[in] s - the stream | 
 |  * @param[out] header - the SectionHeader object | 
 |  */ | 
 | inline Stream& operator>>(Stream& s, SectionHeader& header) | 
 | { | 
 |     s >> header.id >> header.size >> header.version >> header.subType >> | 
 |         header.componentID; | 
 |     return s; | 
 | } | 
 |  | 
 | /** | 
 |  * @brief Stream insertion operator for the section header | 
 |  * | 
 |  * @param[out] s - the stream | 
 |  * @param[in] header - the SectionHeader object | 
 |  */ | 
 | inline Stream& operator<<(Stream& s, const SectionHeader& header) | 
 | { | 
 |     s << header.id << header.size << header.version << header.subType | 
 |       << header.componentID; | 
 |     return s; | 
 | } | 
 |  | 
 | } // namespace pels | 
 | } // namespace openpower |