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 <cstdint>
00015 #include <cstddef>
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)
00028 : p(i.p) { }
00029 reference operator*() const { return *p; }
00030 pointer operator->() const { return p; }
00031 DataBlockIterator& operator++() {
00032 DataBlock* pN = new DataBlock(p->dataEnd());
00033 delete p;
00034 p = pN;
00035 return *this;
00036 }
00037 DataBlockIterator& operator++(int) {
00038 DataBlockIterator tmp(*this);
00039 ++*this;
00040 return tmp;
00041 }
00042
00043 private:
00044 pointer p;
00045 };
00046
00047 }
00048
00049 #endif