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 22 namespace std { 23 24 template<class K, class T> class map { 25 // add typemaps here 26 public: 27 typedef size_t size_type; 28 typedef ptrdiff_t difference_type; 29 typedef K key_type; 30 typedef T mapped_type; 31 map(); 32 map(const map<K,T> &); 33 34 unsigned int size() const; 35 bool empty() const; 36 void clear(); 37 %extend { 38 const T& get(const K& key) throw (std::out_of_range) { 39 std::map<K,T >::iterator i = self->find(key); 40 if (i != self->end()) 41 return i->second; 42 else 43 throw std::out_of_range("key not found"); 44 } 45 void set(const K& key, const T& x) { 46 (*self)[key] = x; 47 } 48 void del(const K& key) throw (std::out_of_range) { 49 std::map<K,T >::iterator i = self->find(key); 50 if (i != self->end()) 51 self->erase(i); 52 else 53 throw std::out_of_range("key not found"); 54 } 55 bool has_key(const K& key) { 56 std::map<K,T >::iterator i = self->find(key); 57 return i != self->end(); 58 } 59 } 60 }; 61 62 // Legacy macros (deprecated) 63 %define specialize_std_map_on_key(K,CHECK,CONVERT_FROM,CONVERT_TO) 64 #warning "specialize_std_map_on_key ignored - macro is deprecated and no longer necessary" 65 %enddef 66 67 %define specialize_std_map_on_value(T,CHECK,CONVERT_FROM,CONVERT_TO) 68 #warning "specialize_std_map_on_value ignored - macro is deprecated and no longer necessary" 69 %enddef 70 71 %define specialize_std_map_on_both(K,CHECK_K,CONVERT_K_FROM,CONVERT_K_TO, T,CHECK_T,CONVERT_T_FROM,CONVERT_T_TO) 72 #warning "specialize_std_map_on_both ignored - macro is deprecated and no longer necessary" 73 %enddef 74 75 } 76