mu2e_artdaq_core  v1_02_14
 All Classes Functions
DataBlockIterator.hh
1 #ifndef mu2e_artdaq_core_Overlays_DataBlockIterator_hh
2 #define mu2e_artdaq_core_Overlays_DataBlockIterator_hh
3 
5 // DataBlockIterator
6 //
7 // Helper class which should allow STL algorithms to work over DataBlocks
8 //
10 
11 #include "mu2e-artdaq-core/Overlays/DTCFragment.hh"
12 #include "mu2e-artdaq-core/Overlays/DataBlock.hh"
13 
14 #include <cstddef>
15 #include <cstdint>
16 #include <iterator>
17 
18 namespace mu2e {
20 {
21  typedef std::ptrdiff_t difference_type;
22  typedef DataBlock value_type;
23  typedef typename DataBlock* pointer;
24  typedef typename DataBlock& reference;
25  typedef std::forward_iterator_tag iterator_category;
26 
27  DataBlockIterator(pointer x = nullptr)
28  : p(x) {}
30  : p(i.p) {}
31  reference operator*() const { return *p; }
32  pointer operator->() const { return p; }
33  DataBlockIterator& operator++()
34  {
35  DataBlock* pN = new DataBlock(p->dataEnd());
36  delete p;
37  p = pN;
38  return *this;
39  }
40  DataBlockIterator& operator++(int)
41  {
42  DataBlockIterator tmp(*this);
43  ++*this;
44  return tmp;
45  }
46 
47 private:
48  pointer p;
49 };
50 
51 } // namespace mu2e
52 
53 #endif