mu2e_artdaq_core  v1_02_11
 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  typedef std::ptrdiff_t difference_type;
21  typedef DataBlock value_type;
22  typedef typename DataBlock* pointer;
23  typedef typename DataBlock& reference;
24  typedef std::forward_iterator_tag iterator_category;
25 
26  DataBlockIterator(pointer x = nullptr) : p(x) {}
27  DataBlockIterator(const DataBlockIterator& i) : p(i.p) {}
28  reference operator*() const { return *p; }
29  pointer operator->() const { return p; }
30  DataBlockIterator& operator++() {
31  DataBlock* pN = new DataBlock(p->dataEnd());
32  delete p;
33  p = pN;
34  return *this;
35  }
36  DataBlockIterator& operator++(int) {
37  DataBlockIterator tmp(*this);
38  ++*this;
39  return tmp;
40  }
41 
42  private:
43  pointer p;
44 };
45 
46 } // namespace mu2e
47 
48 #endif