00001 //Dear emacs, this is -*- c++ -*- 00002 00014 #ifndef EFORMAT_OLD_RODFRAGMENT_H 00015 #define EFORMAT_OLD_RODFRAGMENT_H 00016 00017 #include <stdint.h> 00018 #include <cstdlib> 00019 00020 namespace eformat { 00021 00022 namespace old { 00023 00032 class RODFragment { 00033 00034 public: //interface 00035 00043 RODFragment (const uint32_t* it, size_t size_word); 00044 00048 virtual ~RODFragment() {} 00049 00053 virtual bool check () const; 00054 00058 inline uint32_t marker() const { return m_start[0]; } 00059 00063 uint32_t fragment_size_word() const; 00064 00069 inline uint32_t header_size_word() const { return m_start[1]; } 00070 00074 inline uint32_t trailer_size_word() const { return 3; } 00075 00079 inline uint32_t version() const { return m_start[2]; } 00080 00084 inline uint32_t source_id() const { return m_start[3]; } 00085 00089 inline uint32_t run_no() const { return m_start[4]; } 00090 00094 inline uint32_t lvl1_id() const { return m_start[5]; } 00095 00099 inline uint32_t bc_id() const { return m_start[6]; } 00100 00104 inline uint32_t lvl1_trigger_type() const { return m_start[7]; } 00105 00109 inline uint32_t detev_type() const { return m_start[8]; } 00110 00114 inline uint32_t nstatus () const { return m_start[m_size-3]; } 00115 00120 const uint32_t* status (void) const; 00121 00125 inline uint32_t ndata () const { return m_start[m_size-2]; } 00126 00130 const uint32_t* data (void) const; 00131 00137 inline uint32_t status_position () const { return m_start[m_size-1]; } 00138 00139 private: //representation 00140 00141 const uint32_t* m_start; 00142 size_t m_size; 00143 00144 }; 00145 00146 } 00147 00148 } 00149 00150 #endif /* EFORMAT_OLD_RODFRAGMENT_H */