#ifndef SBFACCITER2_HEADER #define SBFACCITER2_HEADER 1 /////////////////////////////////////////////////// //! userlevel=Normal //! rcsid="$Id: SBfAccIter2.hh,v 1.8 2000/12/11 18:58:52 ees1cg Exp $" //! file="amma/Contain/Array/Buffer/SBfAccIter2.hh" //! lib=Mbuff //! author="Charles Galambos" //! docentry="Containers.Arrays.Buffer" //! date="10/09/98" #include "amma/SBfAcc.hh" #include template class SizeBufferAccessIter2C { public: inline SizeBufferAccessIter2C(); //: Default constructor. inline SizeBufferAccessIter2C(const SizeBufferAccessC &buff,const SizeBufferAccessC &buff2); //: Constructor. inline void First(const SizeBufferAccessC &buff,const SizeBufferAccessC &buff2); //: Goto first elements. inline BooleanT IsElm() const; //: At valid element ? inline void Next(); //: Goto next element. // Call ONLY if IsElm() is valid. inline Data1T &Data1(); //: Access data. inline const Data1T &Data1() const; //: Access data. inline Data2T &Data2(); //: Access data. inline const Data2T &Data2() const; //: Access data. inline void Invalidate(); //: Make IsElm() return false. private: Data1T *at1; Data2T *at2; const Data1T *endOfRow; }; ////////////////////////////////////////////////////// template inline SizeBufferAccessIter2C::SizeBufferAccessIter2C() : at1(0), endOfRow(0) {} template inline void SizeBufferAccessIter2C::First(const SizeBufferAccessC &buff,const SizeBufferAccessC &buff2) { if(buff.Size() <= 0) { at1 = 0; endOfRow = 0; return ; } assert(buff.N() <= buff2.N()); at1 = const_cast(buff.ReferenceElm()); at2 = const_cast(buff2.ReferenceElm()); endOfRow = &(at1[buff.N()]); } template inline SizeBufferAccessIter2C::SizeBufferAccessIter2C(const SizeBufferAccessC &buff, const SizeBufferAccessC &buff2) { First(buff,buff2); } template inline BooleanT SizeBufferAccessIter2C::IsElm() const { return at1 != endOfRow; } template inline void SizeBufferAccessIter2C::Next() { assert(at1 != endOfRow); at1++; at2++; } template inline Data1T & SizeBufferAccessIter2C::Data1() { return *at1; } template inline const Data1T & SizeBufferAccessIter2C::Data1() const { return *at1; } template inline Data2T & SizeBufferAccessIter2C::Data2() { return *at2; } template inline const Data2T & SizeBufferAccessIter2C::Data2() const { return *at2; } template inline void SizeBufferAccessIter2C::Invalidate() { at1 = 0; endOfRow = 0; } #endif