Rudiments
|
00001 // Copyright (c) 2003 David Muse 00002 // See the COPYING file for more information. 00003 00004 #ifndef RUDIMENTS_DICTIONARY_H 00005 #define RUDIMENTS_DICTIONARY_H 00006 00007 #include <rudiments/private/dictionaryincludes.h> 00008 00009 #ifdef RUDIMENTS_NAMESPACE 00010 namespace rudiments { 00011 #endif 00012 00015 template <class keytype, class datatype> 00016 class dictionarynode { 00017 public: 00019 dictionarynode(); 00020 00024 virtual ~dictionarynode(); 00025 00027 void setKey(keytype key); 00028 00030 void setData(datatype data); 00031 00033 keytype getKey() const; 00034 00036 datatype getData() const; 00037 00041 int32_t compare(keytype testkey) const; 00042 00045 void print() const; 00046 00047 #include <rudiments/private/dictionarynode.h> 00048 }; 00049 00050 template <class keytype, class datatype> 00051 class dictionarylistnode : 00052 public linkedlistnode< dictionarynode<keytype,datatype> * > {}; 00053 00054 template <class keytype, class datatype> 00055 class dictionarylist : 00056 public linkedlist< dictionarynode<keytype,datatype> *, 00057 dictionarylistnode<keytype,datatype> > {}; 00058 00068 template <class keytype, class datatype, 00069 class dictionarynodetype=dictionarynode<keytype,datatype>, 00070 class dictionarylistnodetype=dictionarylistnode<keytype,datatype>, 00071 class dictionarylisttype=dictionarylist<keytype,datatype> > 00072 class dictionary { 00073 public: 00075 dictionary(); 00076 00081 virtual ~dictionary(); 00082 00086 void setData(keytype key, datatype data); 00087 00091 bool getData(keytype key, datatype *data); 00092 00096 bool removeData(keytype key); 00097 00099 dictionarylisttype *getList(); 00100 00102 void clear(); 00103 00105 void print(); 00106 00107 #include <rudiments/private/dictionary.h> 00108 }; 00109 00110 template <class datatype> 00111 class stringdictionarynode : 00112 public dictionarynode< char *,datatype > { 00113 public: 00114 virtual ~stringdictionarynode(); 00115 }; 00116 00117 template <class datatype> 00118 class stringdictionarylistnode : 00119 public dictionarylistnode< char *, datatype > { 00120 public: 00121 virtual ~stringdictionarylistnode(); 00122 }; 00123 00124 template <class datatype> 00125 class stringdictionarylist : public dictionarylist< char *, datatype > { 00126 public: 00127 virtual ~stringdictionarylist(); 00128 }; 00129 00130 template <class datatype> 00131 class stringdictionary : public dictionary< char *, datatype, 00132 stringdictionarynode<datatype>, 00133 stringdictionarylistnode<datatype>, 00134 stringdictionarylist<datatype> > { 00135 public: 00136 virtual ~stringdictionary(); 00137 }; 00138 00139 template <class datatype> 00140 class conststringdictionarynode : 00141 public dictionarynode< const char *,datatype > { 00142 public: 00143 virtual ~conststringdictionarynode(); 00144 }; 00145 00146 template <class datatype> 00147 class conststringdictionarylistnode : 00148 public dictionarylistnode< const char *, datatype > { 00149 public: 00150 virtual ~conststringdictionarylistnode(); 00151 }; 00152 00153 template <class datatype> 00154 class conststringdictionarylist : 00155 public dictionarylist< const char *, datatype > { 00156 public: 00157 virtual ~conststringdictionarylist(); 00158 }; 00159 00160 template <class datatype> 00161 class conststringdictionary : public dictionary< const char *, datatype, 00162 conststringdictionarynode<datatype>, 00163 conststringdictionarylistnode<datatype>, 00164 conststringdictionarylist<datatype> > { 00165 public: 00166 virtual ~conststringdictionary(); 00167 }; 00168 00169 template <class datatype> 00170 class numericdictionarynode : 00171 public dictionarynode< int32_t, datatype > { 00172 public: 00173 virtual ~numericdictionarynode(); 00174 }; 00175 00176 template <class datatype> 00177 class numericdictionarylistnode : 00178 public dictionarylistnode< int32_t, datatype > { 00179 public: 00180 virtual ~numericdictionarylistnode(); 00181 }; 00182 00183 template <class datatype> 00184 class numericdictionarylist : public dictionarylist< int32_t, datatype > { 00185 public: 00186 virtual ~numericdictionarylist(); 00187 }; 00188 00189 template <class datatype> 00190 class numericdictionary : public dictionary< int32_t, datatype, 00191 numericdictionarynode<datatype>, 00192 numericdictionarylistnode<datatype>, 00193 numericdictionarylist<datatype> > { 00194 public: 00195 virtual ~numericdictionary(); 00196 }; 00197 00198 typedef stringdictionarynode< char * > namevaluepairsnode; 00199 typedef stringdictionarylistnode< char * > namevaluepairslistnode; 00200 typedef stringdictionarylist< char * > namevaluepairslist; 00201 typedef stringdictionary< char * > namevaluepairs; 00202 00203 typedef conststringdictionarynode< const char * > 00204 constnamevaluepairsnode; 00205 typedef conststringdictionarylistnode< const char * > 00206 constnamevaluepairslistnode; 00207 typedef conststringdictionarylist< const char * > 00208 constnamevaluepairslist; 00209 typedef conststringdictionary< const char * > 00210 constnamevaluepairs; 00211 00212 #ifdef RUDIMENTS_NAMESPACE 00213 } 00214 #endif 00215 00216 #include <rudiments/private/dictionarynodeinlines.h> 00217 #include <rudiments/private/dictionaryinlines.h> 00218 00219 #endif