00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef MAPCLASS_H
00019 #define MAPCLASS_H
00020
00021 #include <vector>
00022 #include <map>
00023 #include <list>
00024 using namespace std;
00025
00027
00032 template <class Word,
00033 class Definition,
00034 class WordList = vector<Word>,
00035 class DefList = vector<Definition>
00036 >
00037 class Map : virtual public map<Word, Definition>
00038 {
00039 public:
00041 typedef map<Word, Definition>::value_type Pair;
00042
00044
00045
00046 virtual Definition Get(const Word& word) const;
00047
00049 virtual WordList GetWords() const;
00050
00052 virtual DefList GetDefs() const;
00054
00056
00057
00058 virtual void Add(const Word& word, const Definition& definition);
00059
00060
00061
00062
00064 virtual void Add(const Pair& newPair);
00065
00067 virtual void Set(const Word& word, const Definition& definition);
00068
00069
00070
00071
00073
00075 bool Find(const Word& word) const;
00076
00078 virtual ~Map() {};
00079 };
00080
00081 template <class Word, class Definition, class WordList, class DefList>
00082 inline Definition
00083
00084 Map<Word, Definition, WordList, DefList>::Get(const Word& word) const
00085 {
00086 const_iterator p;
00087 return ((p = find(word)) != end()) ? p->second : Definition();
00088 }
00089
00090 template <class Word, class Definition, class WordList, class DefList>
00091 inline void
00092
00093 Map<Word, Definition, WordList, DefList>::Add(const Word& word, const Definition& definition)
00094 {
00095 Find(word) ? Set(word, definition) : insert(end(), Pair(word, definition));
00096 }
00097
00098 template <class Word, class Definition, class WordList, class DefList>
00099 inline void
00100
00101 Map<Word, Definition, WordList, DefList>::Add(const Pair& newPair)
00102 {
00103 Add(newPair.first, newPair.second);
00104 }
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124 template <class Word, class Definition, class WordList, class DefList>
00125 inline void
00126
00127 Map<Word, Definition, WordList, DefList>::Set(const Word& word, const Definition& definition)
00128 {
00129 (*this)[word] = definition;
00130 }
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142 template <class Word, class Definition,class WordList,class DefList>
00143 inline bool
00144
00145 Map<Word, Definition, WordList, DefList>::Find(const Word& word) const
00146 {
00147 return (find(word) != end());
00148 }
00149
00150 template <class Word, class Definition,class WordList,class DefList>
00151 inline WordList
00152
00153 Map<Word, Definition, WordList, DefList>::GetWords() const
00154 {
00155 WordList wl;
00156 for (const_iterator p = begin(); p != end(); ++p)
00157 wl.push_back(p->first);
00158 return wl;
00159 }
00160
00161 template <class Word, class Definition,class WordList,class DefList>
00162 inline DefList
00163
00164 Map<Word, Definition, WordList, DefList>::GetDefs() const
00165 {
00166 DefList dl;
00167 for (const_iterator p = begin(); p != end(); ++p)
00168 dl.push_back(p->second);
00169 return dl;
00170 }
00171
00172 #endif