NSCL DDAS  1.0
Support for XIA DDAS at the NSCL
 All Classes Namespaces Files Functions Variables Macros Pages
FragmentIndex.h
1 // FragmentIndex.h
2 //
3 // Author : Jeromy Tompkins
4 // Date : 3/2014
5 //
6 
7 #ifndef FRAGMENTINDEX_H
8 #define FRAGMENTINDEX_H
9 
10 #include <vector>
11 #include <stdint.h>
12 #include <cstdlib>
13 
19 struct FragmentInfo // A structure containting basic info from the Fragment header --JP
20 {
21  uint64_t s_timestamp;
22  uint32_t s_sourceId;
23  uint32_t s_size;
24  uint32_t s_barrier;
25  uint16_t* s_itemhdr;
26  uint16_t* s_itembody;
27 
28  FragmentInfo() :
29  s_timestamp(0), s_sourceId(0), s_size(0), s_barrier(0),
30  s_itemhdr(0), s_itembody(0) {}
31 };
32 
33 
40 {
41  private:
42  typedef std::vector<FragmentInfo> Container;
43 
44  public:
45  typedef Container::iterator iterator;
46  typedef Container::const_iterator const_iterator;
47 
48  private:
49  Container m_frags;
50 
51  public:
52 
56  FragmentIndex();
57 
62  FragmentIndex(uint16_t* data);
63 
73  {
74  if (i<m_frags.size() && i>=0) {
75  return m_frags.at(i); //pointer to ith fragment in the m_frags list --JP
76  } else {
77  FragmentInfo null;
78  null.s_itembody = static_cast<uint16_t*>(0);
79  return null;
80  }
81  }
82 
83  size_t getNumberFragments() const { return m_frags.size(); }
84 
96  void indexFragments(uint16_t* begin, uint16_t* end);
97 
102  void indexFragments(uint16_t* data, size_t max_bytes) {
103  indexFragments(data, data+max_bytes/sizeof(uint16_t) );
104  }
105 
106  private:
107  size_t computeWordsToNextFragment(uint16_t* data);
108 
109 
110  public:
111  // Implement an iterator interface
112  iterator begin() { return m_frags.begin(); }
113  const_iterator begin() const { return m_frags.begin(); }
114 
115  iterator end() { return m_frags.end(); }
116  const_iterator end() const { return m_frags.end(); }
117 };
118 
119 #endif
void indexFragments(uint16_t *data, size_t max_bytes)
Definition: FragmentIndex.h:102
FragmentIndex()
Definition: FragmentIndex.cpp:12
void indexFragments(uint16_t *begin, uint16_t *end)
Definition: FragmentIndex.cpp:39
Definition: FragmentIndex.h:19
FragmentInfo getFragment(size_t i)
Definition: FragmentIndex.h:72
Definition: FragmentIndex.h:39