Rudiments
/home/dmuse/src/rudiments/include/rudiments/dictionary.h
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