00001 //Dear emacs, this is -*- c++ -*- 00002 00015 #ifndef EFORMAT_OLD_HEADER_H 00016 #define EFORMAT_OLD_HEADER_H 00017 00018 #include <stdint.h> 00019 #include <cstdlib> 00020 00021 namespace eformat { 00022 00028 namespace old { 00029 00040 class Header { 00041 00042 public: 00043 00051 Header (const uint32_t* it, uint32_t match); 00052 00056 virtual ~Header() {} 00057 00062 virtual bool check () const; 00063 00067 inline uint32_t marker() const { return m_start[0]; } 00068 00072 inline uint32_t fragment_size_word() const { return m_start[1]; } 00073 00078 inline uint32_t header_size_word() const { return m_start[2]; } 00079 00083 inline uint32_t version() const { return m_start[3]; } 00084 00088 inline uint32_t source_id() const { return m_start[4]; } 00089 00093 inline uint32_t run_no() const { return m_start[5]; } 00094 00098 inline uint32_t nstatus () const { return m_start[6]; } 00099 00104 inline const uint32_t* status () const { return &m_start[7]; } 00105 00110 inline uint32_t noffset () const { return m_start[7 + nstatus()]; } 00111 00116 inline const uint32_t* offset (void) const 00117 { return &m_start[8 + nstatus()]; } 00118 00123 inline uint32_t nspecific () const 00124 { return m_start[8 + nstatus() + noffset()]; } 00125 00130 inline const uint32_t* specific_header (void) const 00131 { return &m_start[9 + nstatus() + noffset()]; } 00132 00140 const uint32_t* child (size_t n) const; 00141 00142 private: 00143 00144 const uint32_t* m_start; 00145 00146 }; 00147 00148 } 00149 00150 } 00151 00152 #endif //EFORMAT_OLD_HEADER_H