00001 #ifndef mu2e_artdaq_core_Overlays_DataBlockIterator_hh
00002 #define mu2e_artdaq_core_Overlays_DataBlockIterator_hh
00003
00005
00006
00007
00008
00010
00011 #include "mu2e-artdaq-core/Overlays/DTCFragment.hh"
00012 #include "mu2e-artdaq-core/Overlays/DataBlock.hh"
00013
00014 #include <cstddef>
00015 #include <cstdint>
00016 #include <iterator>
00017
00018 namespace mu2e {
00019 class DataBlockIterator
00020 {
00021 typedef std::ptrdiff_t difference_type;
00022 typedef DataBlock value_type;
00023 typedef typename DataBlock* pointer;
00024 typedef typename DataBlock& reference;
00025 typedef std::forward_iterator_tag iterator_category;
00026
00027 DataBlockIterator(pointer x = nullptr)
00028 : p(x) {}
00029 DataBlockIterator(const DataBlockIterator& i)
00030 : p(i.p) {}
00031 reference operator*() const { return *p; }
00032 pointer operator->() const { return p; }
00033 DataBlockIterator& operator++()
00034 {
00035 DataBlock* pN = new DataBlock(p->dataEnd());
00036 delete p;
00037 p = pN;
00038 return *this;
00039 }
00040 DataBlockIterator& operator++(int)
00041 {
00042 DataBlockIterator tmp(*this);
00043 ++*this;
00044 return tmp;
00045 }
00046
00047 private:
00048 pointer p;
00049 };
00050
00051 }
00052
00053 #endif