Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / v9 / share / swig / 1.3.26 / tcl / std_map.i
CommitLineData
920dae64
AT
1//
2// SWIG typemaps for std::map
3// Luigi Ballabio
4// Jan. 2003
5//
6// Common implementation
7
8%include <std_common.i>
9
10// ------------------------------------------------------------------------
11// std::map
12// ------------------------------------------------------------------------
13
14%{
15#include <map>
16#include <algorithm>
17#include <stdexcept>
18%}
19
20// exported class
21
22namespace std {
23
24 template<class K, class T> class map {
25 // add typemaps here
26 public:
27 map();
28 map(const map<K,T> &);
29
30 unsigned int size() const;
31 bool empty() const;
32 void clear();
33 %extend {
34 T& get(const K& key) throw (std::out_of_range) {
35 std::map<K,T >::iterator i = self->find(key);
36 if (i != self->end())
37 return i->second;
38 else
39 throw std::out_of_range("key not found");
40 }
41 void set(const K& key, const T& x) {
42 (*self)[key] = x;
43 }
44 void del(const K& key) throw (std::out_of_range) {
45 std::map<K,T >::iterator i = self->find(key);
46 if (i != self->end())
47 self->erase(i);
48 else
49 throw std::out_of_range("key not found");
50 }
51 bool has_key(const K& key) {
52 std::map<K,T >::iterator i = self->find(key);
53 return i != self->end();
54 }
55 }
56 };
57
58
59 // specializations for built-ins
60
61 %define specialize_std_map_on_key(K,CHECK,CONVERT_FROM,CONVERT_TO)
62
63 template<class T> class map<K,T> {
64 // add typemaps here
65 public:
66 map();
67 map(const map<K,T> &);
68
69 unsigned int size() const;
70 bool empty() const;
71 void clear();
72 %extend {
73 T& get(K key) throw (std::out_of_range) {
74 std::map<K,T >::iterator i = self->find(key);
75 if (i != self->end())
76 return i->second;
77 else
78 throw std::out_of_range("key not found");
79 }
80 void set(K key, const T& x) {
81 (*self)[key] = x;
82 }
83 void del(K key) throw (std::out_of_range) {
84 std::map<K,T >::iterator i = self->find(key);
85 if (i != self->end())
86 self->erase(i);
87 else
88 throw std::out_of_range("key not found");
89 }
90 bool has_key(K key) {
91 std::map<K,T >::iterator i = self->find(key);
92 return i != self->end();
93 }
94 }
95 };
96 %enddef
97
98 %define specialize_std_map_on_value(T,CHECK,CONVERT_FROM,CONVERT_TO)
99 template<class K> class map<K,T> {
100 // add typemaps here
101 public:
102 map();
103 map(const map<K,T> &);
104
105 unsigned int size() const;
106 bool empty() const;
107 void clear();
108 %extend {
109 T get(const K& key) throw (std::out_of_range) {
110 std::map<K,T >::iterator i = self->find(key);
111 if (i != self->end())
112 return i->second;
113 else
114 throw std::out_of_range("key not found");
115 }
116 void set(const K& key, T x) {
117 (*self)[key] = x;
118 }
119 void del(const K& key) throw (std::out_of_range) {
120 std::map<K,T >::iterator i = self->find(key);
121 if (i != self->end())
122 self->erase(i);
123 else
124 throw std::out_of_range("key not found");
125 }
126 bool has_key(const K& key) {
127 std::map<K,T >::iterator i = self->find(key);
128 return i != self->end();
129 }
130 }
131 };
132 %enddef
133
134 %define specialize_std_map_on_both(K,CHECK_K,CONVERT_K_FROM,CONVERT_K_TO,
135 T,CHECK_T,CONVERT_T_FROM,CONVERT_T_TO)
136 template<> class map<K,T> {
137 // add typemaps here
138 public:
139 map();
140 map(const map<K,T> &);
141
142 unsigned int size() const;
143 bool empty() const;
144 void clear();
145 %extend {
146 T get(K key) throw (std::out_of_range) {
147 std::map<K,T >::iterator i = self->find(key);
148 if (i != self->end())
149 return i->second;
150 else
151 throw std::out_of_range("key not found");
152 }
153 void set(K key, T x) {
154 (*self)[key] = x;
155 }
156 void del(K key) throw (std::out_of_range) {
157 std::map<K,T >::iterator i = self->find(key);
158 if (i != self->end())
159 self->erase(i);
160 else
161 throw std::out_of_range("key not found");
162 }
163 bool has_key(K key) {
164 std::map<K,T >::iterator i = self->find(key);
165 return i != self->end();
166 }
167 }
168 };
169 %enddef
170
171 // add specializations here
172
173}