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
1.3.6-20040222