1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
namespace omega {
template<class K, class V> MapElement<K,V>:: MapElement(const MapElement<K,V>& M) {
if (M.tail) tail = new MapElement<K,V>(*M.tail);
else tail = 0;
k = M.k;
v = M.v;
}
template<class K, class V> MapElement<K,V> &
MapElement<K,V>:: operator=(const MapElement<K,V>& M) {
if (this != &M) {
if (tail) delete tail;
if (M.tail) tail = new MapElement<K,V>(*M.tail);
else tail = 0;
k = M.k;
v = M.v;
}
return *this;
}
#if ! defined linux
template <class K, class V> Map <K,V>::Map(const V &default_value)
#else
template <class K, class V> Map <K,V>::Map(V default_value)
#endif
: _default_value(default_value)
{
contents = 0;
}
template <class K, class V> Map <K,V>::~Map()
{
delete contents;
}
template <class K, class V> V Map<K,V>::operator()(K k) const {
MapElement <K,V> * P = contents;
while (P) {
if (P->k == k) return P->v;
P = P->tail;
};
return _default_value;
}
template <class K, class V> V & Map<K,V>::operator[](K k) {
MapElement <K,V> * P = contents;
while (P) {
if (P->k == k) return P->v;
P = P->tail;
};
P = new MapElement <K,V>;
P->k = k;
P->v = _default_value;
P->tail = contents;
contents = P;
return P->v;
}
} // namespace
|