00001 #ifndef SymbolSetIterator_H 00002 #define SymbolSetIterator_H 00003 00004 #include <iterator> 00005 00006 #include "Const.h" 00007 using namespace std; 00008 //using namespace momdp; 00009 namespace momdp 00010 { 00011 template <typename T> class SymbolSet; 00012 00013 template <typename T> 00014 class SymbolSetIterator: public iterator<input_iterator_tag, T> 00015 { 00016 SymbolSet<T> *parentSet; 00017 int symbolID; 00018 00019 00020 public: 00021 SymbolSetIterator(SymbolSet<T> *_parentSet, int _symbolID) 00022 { 00023 parentSet = _parentSet; 00024 symbolID = _symbolID; 00025 } 00026 00027 SymbolSetIterator(const SymbolSetIterator& mit) 00028 { 00029 this->parentSet = mit.parentSet; 00030 this->symbolID = mit.symbolID; 00031 } 00032 00033 SymbolSetIterator<T>& operator++() 00034 { 00035 ++symbolID; 00036 return *this; 00037 } 00038 00039 void operator++(int) 00040 { 00041 symbolID++; 00042 } 00043 00044 bool operator==(const SymbolSetIterator& rhs) 00045 { 00046 if(parentSet == rhs.parentSet && symbolID == rhs.symbolID) 00047 { 00048 return true; 00049 } 00050 return false; 00051 } 00052 00053 bool operator!=(const SymbolSetIterator& rhs) 00054 { 00055 if(parentSet != rhs.parentSet || symbolID != rhs.symbolID) 00056 { 00057 return true; 00058 } 00059 return false; 00060 } 00061 00062 int operator*() 00063 { 00064 return symbolID; 00065 } 00066 00067 T& value() 00068 { 00069 return parentSet->getSymbol(symbolID); 00070 } 00071 int index() 00072 { 00073 return symbolID; 00074 } 00075 00076 }; 00077 00078 } 00079 00080 00081 #endif 00082 00083 00084