15#ifndef EFORMAT_HEADER_H
16#define EFORMAT_HEADER_H
18#include "eformat/BadVersionIssue.h"
19#include "eformat/NoSuchChildIssue.h"
20#include "eformat/SizeCheckIssue.h"
21#include "eformat/SourceIdentifier.h"
22#include "eformat/Version.h"
23#include "eformat/WrongMarkerIssue.h"
24#include "eformat/WrongSizeIssue.h"
25#include "eformat/util.h"
40 template <
class TPo
inter>
class Header {
50 Header(
const TPointer& it, uint32_t match );
75 m_start = other.m_start;
91 virtual bool check()
const;
96 inline uint32_t
marker()
const {
return m_start[0]; }
112 inline uint32_t
version()
const {
return m_start[3]; }
117 inline uint32_t
source_id()
const {
return m_start[4]; }
122 inline uint32_t
nstatus()
const {
return m_start[5]; }
129 inline void start( TPointer& it )
const { it = m_start; }
146 inline void end( TPointer& it )
const {
163 inline void status( TPointer& it )
const {
198 virtual void child( TPointer& p,
size_t n )
const;
211 virtual void child_check( TPointer& p,
size_t n )
const;
223 virtual uint32_t
children( TPointer* p,
size_t max )
const;
231template <
class TPo
inter>
233 ERS_DEBUG_3(
"Building header 0x%x from iterator", match );
235 ERS_DEBUG_1(
"Initialized header with source identifier = %s",
239template <
class TPo
inter>
242 ERS_DEBUG_3(
"Rebuilding header 0x%x from iterator", match );
245 ERS_DEBUG_1(
"Re-initialized header with source identifier = %s",
251 ERS_DEBUG_2(
"Checking for consistency of fragment of type %s [%s]",
262 ERS_DEBUG_2(
"User asked for number of children of fragment type %s [%s]",
268template <
class TPo
inter>
270 ERS_DEBUG_2(
"User asked for child %ud of fragment type %s [%s]",
n,
275 for (
size_t i = 0; i <
n; ++i ) next += next[1];
280template <
class TPo
inter>
287template <
class TPo
inter>
290 TPointer payload_start;