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 typedef std::ptrdiff_t difference_type;
00021 typedef DataBlock value_type;
00022 typedef typename DataBlock* pointer;
00023 typedef typename DataBlock& reference;
00024 typedef std::forward_iterator_tag iterator_category;
00025
00026 DataBlockIterator(pointer x = nullptr) : p(x) {}
00027 DataBlockIterator(const DataBlockIterator& i) : p(i.p) {}
00028 reference operator*() const { return *p; }
00029 pointer operator->() const { return p; }
00030 DataBlockIterator& operator++() {
00031 DataBlock* pN = new DataBlock(p->dataEnd());
00032 delete p;
00033 p = pN;
00034 return *this;
00035 }
00036 DataBlockIterator& operator++(int) {
00037 DataBlockIterator tmp(*this);
00038 ++*this;
00039 return tmp;
00040 }
00041
00042 private:
00043 pointer p;
00044 };
00045
00046 }
00047
00048 #endif