1 //
2 // SWIG typemaps for std::map
3 //
4 // Common implementation
5 
6 %include <std_common.i>
7 
8 // ------------------------------------------------------------------------
9 // std::map
10 // ------------------------------------------------------------------------
11 
12 %{
13 #include <map>
14 %}
15 %fragment("<algorithm>");
16 %fragment("<stdexcept>");
17 
18 // exported class
19 
20 namespace std {
21 
22     template<class K, class T, class C = std::less<K> > class map {
23         // add typemaps here
24       public:
25         typedef size_t size_type;
26         typedef ptrdiff_t difference_type;
27         typedef K key_type;
28         typedef T mapped_type;
29         typedef std::pair< const K, T > value_type;
30         typedef value_type* pointer;
31         typedef const value_type* const_pointer;
32         typedef value_type& reference;
33         typedef const value_type& const_reference;
34 
35         map();
36         map(const map& other);
37 
38         unsigned int size() const;
39         bool empty() const;
40         void clear();
41         %extend {
get(const K & key)42             const T& get(const K& key) throw (std::out_of_range) {
43                 std::map< K, T, C >::iterator i = self->find(key);
44                 if (i != self->end())
45                     return i->second;
46                 else
47                     throw std::out_of_range("key not found");
48             }
set(const K & key,const T & x)49             void set(const K& key, const T& x) {
50                 (*self)[key] = x;
51             }
del(const K & key)52             void del(const K& key) throw (std::out_of_range) {
53                 std::map< K, T, C >::iterator i = self->find(key);
54                 if (i != self->end())
55                     self->erase(i);
56                 else
57                     throw std::out_of_range("key not found");
58             }
has_key(const K & key)59             bool has_key(const K& key) {
60                 std::map< K, T, C >::iterator i = self->find(key);
61                 return i != self->end();
62             }
63         }
64     };
65 
66 // Legacy macros (deprecated)
67 %define specialize_std_map_on_key(K,CHECK,CONVERT_FROM,CONVERT_TO)
68 #warning "specialize_std_map_on_key ignored - macro is deprecated and no longer necessary"
69 %enddef
70 
71 %define specialize_std_map_on_value(T,CHECK,CONVERT_FROM,CONVERT_TO)
72 #warning "specialize_std_map_on_value ignored - macro is deprecated and no longer necessary"
73 %enddef
74 
75 %define specialize_std_map_on_both(K,CHECK_K,CONVERT_K_FROM,CONVERT_K_TO, T,CHECK_T,CONVERT_T_FROM,CONVERT_T_TO)
76 #warning "specialize_std_map_on_both ignored - macro is deprecated and no longer necessary"
77 %enddef
78 
79 }
80