Go to the documentation of this file.00001 #ifndef SymbolSet_H
00002 #define SymbolSet_H
00003
00004
00005
00006
00007
00008 #include <vector>
00009 #include <stdexcept>
00010 #include "SymbolSetIterator.h"
00011 using namespace std;
00012 using namespace momdp;
00013 namespace momdp
00014 {
00015
00016 template <typename T>
00017 class SymbolSet
00018 {
00019
00020 private:
00021 int totalSize;
00022 vector<T> symbolTable;
00023
00024 void symbolInputIDSanityCheck(int& id)
00025 {
00026 if(id < 0 )
00027 {
00028 throw runtime_error("Bug, negative id");
00029 }
00030 if(id >= totalSize)
00031 {
00032 throw runtime_error("Bug, symbol id exceeds symbol count");
00033 }
00034 }
00035
00036 public:
00037 typedef SymbolSetIterator<T> iterator;
00038
00039 SymbolSet()
00040 {
00041 totalSize = 0;
00042 symbolTable.clear();
00043 }
00044
00045 iterator begin()
00046 {
00047 return (iterator(this, 0));
00048 }
00049
00050 iterator end()
00051 {
00052 return (iterator(this, totalSize));
00053 }
00054
00055 virtual int size()
00056 {
00057 return symbolTable.size();
00058 }
00059
00060 virtual void resize( int newSize)
00061 {
00062 totalSize = newSize;
00063 symbolTable.resize(newSize);
00064 }
00065
00066 virtual int add( T& symbol)
00067 {
00068 totalSize ++;
00069 symbolTable.push_back(symbol);
00070 return symbolTable.size() -1;
00071 }
00072
00073 virtual void set(int id, T& symbol)
00074 {
00075 symbolInputIDSanityCheck(id);
00076 symbolTable[id] = symbol;
00077 }
00078 virtual T& get(int id)
00079 {
00080 symbolInputIDSanityCheck(id);
00081 return symbolTable[id];
00082 }
00083 virtual ~SymbolSet(void)
00084 {
00085 symbolTable.clear();
00086 }
00087 };
00088
00089 }
00090
00091 #endif
00092