#ifndef SBFACCITER_HEADER #define SBFACCITER_HEADER 1 /////////////////////////////////////////////////// //! userlevel=Normal //! rcsid="$Id: SBfAccIter.hh,v 1.9 2000/12/11 18:58:52 ees1cg Exp $" //! file="amma/Contain/Array/Buffer/SBfAccIter.hh" //! lib=Mbuff //! author="Charles Galambos" //! date="10/09/98" //! docentry="Containers.Arrays.Buffer" #include "amma/SBfAcc.hh" template class SizeBufferAccessIterC { public: inline SizeBufferAccessIterC(); //: Default constructor. inline SizeBufferAccessIterC(const SizeBufferAccessC &buff); //: Constructor. inline SizeBufferAccessIterC &operator=(const SizeBufferAccessC &buff); //: Assignment to a buffer. inline void First(const SizeBufferAccessC &buff); //: Goto fist element. inline BooleanT IsElm() const { return at != endOfRow; } //: At valid element ? inline operator BooleanT() const { return at != endOfRow; } //: At valid element ? inline BooleanT operator!() const { return at == endOfRow; } //: At valid element ? inline void Next() { assert(at != endOfRow); at++; } //: Goto next element. // Call ONLY if IsElm() is valid. inline void operator++(int) { assert(at != endOfRow); at++; } //: Goto next element. // Call ONLY if IsElm() is valid. inline DataC &Data() { return *at; } //: Access data. inline const DataC &Data() const { return *at; } //: Access data. DataC &operator*() { return *at; } //: Access data. const DataC &operator*() const { return *at; } //: Access data. inline void Invalidate(); //: Make IsElm() return false. private: DataC *at; const DataC *endOfRow; }; ////////////////////////////////////////////////////// template inline SizeBufferAccessIterC::SizeBufferAccessIterC() : at(0), endOfRow(0) {} template inline void SizeBufferAccessIterC::First(const SizeBufferAccessC &buff) { if(buff.Size() <= 0) { at = 0; endOfRow = 0; return; } at = buff.ReferenceElm(); endOfRow = &(at[buff.N()]); } template inline SizeBufferAccessIterC::SizeBufferAccessIterC(const SizeBufferAccessC &buff) { First(buff); } template inline SizeBufferAccessIterC & SizeBufferAccessIterC::operator=(const SizeBufferAccessC &buff) { First(buff); return *this; } template inline void SizeBufferAccessIterC::Invalidate() { at = 0; endOfRow = 0; } #endif