mu2e_artdaq_core  v1_02_10
 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 <cstdint>
15 #include <cstddef>
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) { }
28  : p(i.p) { }
29  reference operator*() const { return *p; }
30  pointer operator->() const { return p; }
31  DataBlockIterator& operator++() {
32  DataBlock* pN = new DataBlock(p->dataEnd());
33  delete p;
34  p = pN;
35  return *this;
36  }
37  DataBlockIterator& operator++(int) {
38  DataBlockIterator tmp(*this);
39  ++*this;
40  return tmp;
41  }
42 
43 private:
44  pointer p;
45 };
46 
47 } // namespace mu2e
48 
49 #endif