--- trunk/OOPSE/libmdtools/ConstraintIterator.hpp 2004/06/03 21:51:55 1232 +++ trunk/OOPSE/libmdtools/ConstraintIterator.hpp 2004/06/04 21:00:20 1250 @@ -1,18 +1,18 @@ -#ifndef _CONSTRAINT_ITERATOR_H_ +#ifndef _CONSTRAINT_ITERATOR_H_ #define _CONSTRAINT_ITERATOR_H_ #include #include -using namespace std; -//abstract iterator class +using namespace std; +//abstract iterator class template class IteratorBase{ public: virtual ~IteratorBase(){} virtual void first() = 0; virtual void next() = 0; - virtual bool isEnd() = 0; + virtual bool isEnd() = 0; - virtual Item* currentItem() =0; + virtual Item* currentItem() =0; protected: IteratorBase() {}; @@ -22,43 +22,42 @@ template class ConstraintIterator{ public: ConstraintIterator(list >& aContainer) : container(aContainer){} - virtual void first(){ - listIter = container.begin(); - //the construction of the container will guarantee every vector in list will contain at least one element - //so we don't need to worry about the empty vector problem - //while (listIter->empty()) - // ++listIter; - - vectorIter = listIter->begin(); - } - - virtual void next(){ - ++vectorIter; - if (vectorIter == listIter->end()){ - - //do{ - //++listIter; - //}while(listIter->empty()) - ++listIter; - if (listIter != container.end()) - vectorIter = listIter->begin(); - } - } - - virtual bool isEnd(){ - return listIter == container.end(); - } + virtual void first(){ + listIter = container.begin(); + //the construction of the container will guarantee every vector in list will contain at least one element + //so we don't need to worry about the empty vector problem + //while (listIter->empty()) + // ++listIter; - Item* currentItem(){ - return listIter ==container.end() ? NULL : *vectorIter; - } + vectorIter = listIter->begin(); + } + + virtual void next(){ + ++vectorIter; + if (vectorIter == listIter->end()){ + //do{ + //++listIter; + //}while(listIter->empty()) + ++listIter; + if (listIter != container.end()) + vectorIter = listIter->begin(); + } + } + + virtual bool isEnd(){ + return listIter == container.end(); + } + + Item* currentItem(){ + return listIter ==container.end() ? NULL : *vectorIter; + } + private: - list >& container; - - list >::iterator listIter; - vector::iterator vectorIter; + list >& container; + list >::iterator listIter; + vector::iterator vectorIter; }; typedef ConstraintIterator ConstraintPairIterator;