00001 #ifndef GLITERATORS_H_ 00002 #define GLITERATORS_H_ 00003 00004 class GLBaseOrganism; 00005 00012 template<class T> 00013 class GLIterator 00014 { 00015 public: 00019 GLIterator() {}; 00020 00024 virtual ~GLIterator() {}; 00025 00030 T& operator*() 00031 { return getElement(); } 00032 00037 const T& operator*() const 00038 { return getElement(); } 00039 00045 virtual GLIterator<T>& operator++() = 0; 00046 00051 virtual T& getElement() = 0; 00052 00057 virtual const T& getElement() const = 0; 00058 00063 virtual bool isBegin() const = 0; 00064 00071 virtual bool isEnd() const = 0; 00072 00077 virtual bool isNull() const = 0; 00078 00083 virtual GLIterator* moveNext() 00084 { return &(++(*this)); } 00085 }; 00086 00090 template<class T> 00091 class GLBidirectionalIterator: public GLIterator<T> 00092 { 00093 public: 00097 GLBidirectionalIterator(): 00098 GLIterator<T>() 00099 {} 00100 00104 virtual ~GLBidirectionalIterator() {}; 00105 00111 virtual GLBidirectionalIterator<T>& operator--() = 0; 00112 00117 virtual GLBidirectionalIterator* movePrev() 00118 { return &(--(*this)); } 00119 }; 00120 00121 typedef GLBidirectionalIterator<GLBaseOrganism*> 00122 GLBaseBidirectOrganismIterator; 00123 typedef GLBidirectionalIterator<const GLBaseOrganism* const> 00124 GLBaseBidirectOrganismIteratorConst; 00125 #endif /*GLBIDIRECTIONALITERATOR_H_*/