Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

VirtualIterator.h

Go to the documentation of this file.
00001 #ifndef _ITER_H_
00002 #define _ITER_H_
00003 
00009 template < class T > class _Iter {
00010       protected:
00011         int _type;
00012 
00013       public:
00014         virtual ~ _Iter() {
00015         };
00016         virtual _Iter *clone() = 0;
00017         virtual T *get() = 0;
00018         virtual void next() = 0;
00019         virtual bool equals(_Iter * i2) = 0;
00020 };
00021 
00027 template < class T > class Iter {
00028       private:
00029         _Iter < T > *iter;
00030 
00031       Iter():iter(NULL) {
00032         }
00033       public:
00034       Iter(_Iter < T > *iiter):iter(iiter) {
00035         }
00036         ~Iter() {
00037                 delete iter;
00038         }
00039 
00040         Iter(const Iter & i2) {
00041                 iter = i2.iter->clone();
00042         }
00043 
00044         Iter & operator=(const Iter & i2) {
00045                 delete iter;
00046                 iter = i2.iter->clone();
00047         }
00048 
00049         T operator*() {
00050                 return *iter->get();
00051         }
00052 
00053         T *operator->() {
00054                 return iter->get();
00055         }
00056 
00057         Iter & operator++() {   //prefix
00058                 iter->next();
00059                 return *this;
00060         }
00061 
00062         Iter operator++(int) {  //postfix
00063                 Iter curr(*this);
00064                 iter->next();
00065                 return curr;
00066         }
00067 
00068         bool operator==(const Iter & i2) {
00069                 return iter->equals(i2.iter);
00070         }
00071 
00072         bool operator!=(const Iter & i2) {
00073                 return !iter->equals(i2.iter);
00074         }
00075 };
00076 
00077 #endif

Generated on Fri Aug 20 10:58:08 2004 for NewsCache by doxygen 1.3.6-20040222