#include <ROSFragment.h>
Inheritance diagram for eformat::ROSFragment< TPointer >:
Public Member Functions | |
Header & | assign (const TPointer &it, uint32_t match) |
ROSFragment & | assign (const TPointer &it) |
ROSFragment & | assign (const TPointer &it) |
uint32_t | bc_id () const |
uint32_t | bc_id () const |
virtual bool | check () const |
virtual bool | check () const |
bool | check_tree () const |
bool | check_tree () const |
virtual void | child (TPointer &p, size_t n) const |
virtual void | child (TPointer &p, size_t n) const |
virtual void | child_check (TPointer &p, size_t n) const |
virtual void | child_check (TPointer &p, size_t n) const |
virtual uint32_t | children (TPointer *p, size_t max) const |
virtual uint32_t | children (TPointer *p, size_t max) const |
void | end (TPointer &it) const |
void | end (TPointer &it) const |
uint32_t | fragment_size_word () const |
uint32_t | fragment_size_word () const |
uint32_t | header_size_word () const |
uint32_t | header_size_word () const |
uint32_t | lvl1_id () const |
uint32_t | lvl1_id () const |
uint32_t | marker () const |
uint32_t | marker () const |
virtual uint32_t | nchildren () const |
virtual uint32_t | nchildren () const |
uint32_t | nspecific () const |
uint32_t | nspecific () const |
uint32_t | nstatus () const |
uint32_t | nstatus () const |
ROSFragment & | operator= (const ROSFragment &other) |
ROSFragment & | operator= (const ROSFragment &other) |
void | payload (TPointer &it) const |
void | payload (TPointer &it) const |
uint32_t | payload_size_word (void) const |
uint32_t | payload_size_word (void) const |
ROSFragment (const ROSFragment &other) | |
ROSFragment () | |
ROSFragment (const TPointer &it) | |
ROSFragment (const ROSFragment &other) | |
ROSFragment () | |
ROSFragment (const TPointer &it) | |
uint32_t | run_no () const |
uint32_t | run_no () const |
uint32_t | source_id () const |
uint32_t | source_id () const |
void | specific_header (TPointer &it) const |
void | specific_header (TPointer &it) const |
void | start (TPointer &it) const |
void | start (TPointer &it) const |
void | status (TPointer &it) const |
void | status (TPointer &it) const |
uint32_t | version () const |
uint32_t | version () const |
virtual | ~ROSFragment () |
virtual | ~ROSFragment () |
Private Attributes | |
TPointer | m_start |
my start word | |
Static Private Attributes | |
const uint32_t | NSPECIFIC = 3 |
|
To build a fragment given the containing buffer. I need to know where the fragment starts in order to do that.
00115 : eformat::Header<TPointer>(it, eformat::ROS), 00116 m_start() 00117 { 00118 specific_header(m_start); 00119 }
|
|
Builds an empty, otherwise useless ROSFragment 00043 : Header<TPointer>(), m_start() {}
|
|
Copy constructor
|
|
Destructor virtualisation 00056 {}
|
|
To build a fragment given the containing buffer. I need to know where the fragment starts in order to do that.
|
|
Builds an empty, otherwise useless ROSFragment 00043 : Header<TPointer>(), m_start() {}
|
|
Copy constructor
|
|
Destructor virtualisation 00056 {}
|
|
Reassign this header
00237 { 00238 ERS_DEBUG_3("Rebuilding header 0x%x from iterator", match); 00239 m_start = it; 00240 if (marker() != match) { 00241 throw EFORMAT_WRONG_MARKER(marker(), match); 00242 } 00243 ERS_DEBUG_1("Re-initialized header with source identifier = %s", 00244 eformat::helper::SourceIdentifier(match).human().c_str()); 00245 return *this; 00246 }
|
|
Manual re-assignment
|
|
Manual re-assignment
00123 { 00124 ERS_DEBUG_3("Re-building ROSFragment from pointer"); 00125 eformat::Header<TPointer>::assign(it, eformat::ROS); 00126 specific_header(m_start); 00127 ERS_DEBUG_1("Initialized header with source identifier = %s", 00128 eformat::helper::SourceIdentifier(source_id()).human().c_str()); 00129 return *this; 00130 }
|
|
Returns the bunch crossing identifier 00096 { return m_start[2]; }
|
|
Returns the bunch crossing identifier 00096 { return m_start[2]; }
|
|
Says if the the fragment is valid. This may throw exceptions. Reimplemented from eformat::Header< TPointer >. |
|
Says if the the fragment is valid. This may throw exceptions. Reimplemented from eformat::Header< TPointer >. 00134 { 00135 ERS_DEBUG_2("Checking for consistency of ROSFragment"); 00136 eformat::Header<TPointer>::check(); //< first do a generic check 00137 if (eformat::Header<TPointer>::nspecific() != NSPECIFIC) 00138 throw EFORMAT_SIZE_CHECK(NSPECIFIC, nspecific()); 00139 return true; 00140 }
|
|
Says if the the fragment is valid. This may throw exceptions. |
|
Says if the the fragment is valid. This may throw exceptions. 00144 { 00145 ERS_DEBUG_2("Checking recursively for consistency of ROSFragment"); 00146 check(); // check myself 00147 uint32_t total = nchildren(); 00148 for (size_t i=0; i<total; ++i) { 00149 TPointer fp; 00150 child(fp, i); 00151 eformat::ROBFragment<TPointer> f(fp); 00152 f.check_tree(); 00153 } 00154 return true; 00155 }
|
|
Returns the nth child fragment. If the nth fragment doesn't exist, the behaviour is undefined.
|
|
Returns the nth child fragment. If the nth fragment doesn't exist, the behaviour is undefined.
00273 { 00274 ERS_DEBUG_2("User asked for child %ud of fragment type %s [%s]", n, 00275 eformat::marker2string(marker()).c_str(), 00276 eformat::helper::SourceIdentifier(source_id()).human().c_str()); 00277 TPointer next; 00278 payload(next); 00279 for (size_t i=0; i<n; ++i) next += next[1]; 00280 ERS_DEBUG_3("Set user object"); 00281 p = next; 00282 }
|
|
Returns the nth child fragment. If the nth fragment doesn't exist, an exception is thrown.
|
|
Returns the nth child fragment. If the nth fragment doesn't exist, an exception is thrown.
00286 { 00287 uint32_t total = nchildren(); 00288 if (n >= total) throw EFORMAT_NO_SUCH_CHILD(n, total); 00289 child(p, n); 00290 }
|
|
Returns all the children of this fragment. The input to this method is a valid set of iterators to existing, pre-allocated pointers
|
|
Returns all the children of this fragment. The input to this method is a valid set of iterators to existing, pre-allocated pointers
00294 { 00295 ERS_DEBUG_2("Retrieving all children..."); 00296 TPointer payload_start; 00297 payload(payload_start); 00298 try { 00299 return find_fragments(child_marker(static_cast<HeaderMarker>(marker())), 00300 payload_start, payload_size_word(), p, max); 00301 } 00302 catch (WrongMarkerIssue& ex) { 00303 //This normally means the fragment size is wrong... 00304 throw EFORMAT_WRONG_SIZE(fragment_size_word()); 00305 } 00306 return 0; 00307 }
|
|
Sets the pointer to one-past my end position
00144 { it = m_start; it += fragment_size_word(); }
|
|
Sets the pointer to one-past my end position
00144 { it = m_start; it += fragment_size_word(); }
|
|
Returns the size, in words, of the current fragment. 00100 { return m_start[1]; }
|
|
Returns the size, in words, of the current fragment. 00100 { return m_start[1]; }
|
|
Returns the size, in words, of the current header. That does include the specific part of the header. 00106 { return m_start[2]; }
|
|
Returns the size, in words, of the current header. That does include the specific part of the header. 00106 { return m_start[2]; }
|
|
Returns the lvl1 identifier 00091 { return m_start[1]; }
|
|
Returns the lvl1 identifier 00091 { return m_start[1]; }
|
|
Returns the fragment type. 00095 { return m_start[0]; }
|
|
Returns the fragment type. 00095 { return m_start[0]; }
|
|
Returns the number of children available. |
|
Returns the number of children available. 00264 { 00265 ERS_DEBUG_2("User asked for number of children of fragment type %s [%s]", 00266 eformat::marker2string(marker()).c_str(), 00267 eformat::helper::SourceIdentifier(source_id()).human().c_str()); 00268 return children(0,0); 00269 }
|
|
Returns the number of specific words available in the specific header part
|
|
Returns the number of specific words available in the specific header part
|
|
Returns the number of status words available 00121 { return m_start[5]; }
|
|
Returns the number of status words available 00121 { return m_start[5]; }
|
|
Copy operator
00064 { Header<TPointer>::operator=(other); m_start=other.m_start; return *this; }
|
|
Copy operator
00064 { Header<TPointer>::operator=(other); m_start=other.m_start; return *this; }
|
|
Sets the pointer to where the payload starts
00136 { it = m_start; it+= header_size_word(); }
|
|
Sets the pointer to where the payload starts
00136 { it = m_start; it+= header_size_word(); }
|
|
Returns the payload size 00150 { return fragment_size_word() - header_size_word(); }
|
|
Returns the payload size 00150 { return fragment_size_word() - header_size_word(); }
|
|
Returns the run number 00086 { return m_start[0]; }
|
|
Returns the run number 00086 { return m_start[0]; }
|
|
Returns the full source identifier. 00116 { return m_start[4]; }
|
|
Returns the full source identifier. 00116 { return m_start[4]; }
|
|
Returns an iterator to the start of the specific header part (this does not include the number of specific header fragments)
00173 { it = m_start; it += 7 + nstatus(); }
|
|
Returns an iterator to the start of the specific header part (this does not include the number of specific header fragments)
00173 { it = m_start; it += 7 + nstatus(); }
|
|
Sets the pointer to my start
00128 { it = m_start; }
|
|
Sets the pointer to my start
00128 { it = m_start; }
|
|
Returns the status words, as an iterator to the status words available.
00157 { it = m_start; it += 6; }
|
|
Returns the status words, as an iterator to the status words available.
00157 { it = m_start; it += 6; }
|
|
Returns the formatting version. 00111 { return m_start[3]; }
|
|
Returns the formatting version. 00111 { return m_start[3]; }
|
|
my start word
Reimplemented from eformat::Header< TPointer >. |
|
|