1 /* ----------------------------------------------------------------------------- 2 * std_map.i 3 * 4 * SWIG typemaps for std::map 5 * ----------------------------------------------------------------------------- */ 6 7 %include <std_common.i> 8 9 // ------------------------------------------------------------------------ 10 // std::map 11 // ------------------------------------------------------------------------ 12 13 %{ 14 #include <map> 15 #include <algorithm> 16 #include <stdexcept> 17 %} 18 19 // exported class 20 21 namespace std { 22 template<class K, class T> 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 map(); 30 map(const map<K,T> &); 31 32 unsigned int size() const; 33 bool empty() const; 34 void clear(); 35 %extend { 36 const T& get(const K& key) throw (std::out_of_range) { 37 std::map<K,T >::iterator i = self->find(key); 38 if (i != self->end()) 39 return i->second; 40 else 41 throw std::out_of_range("key not found"); 42 } 43 void set(const K& key, const T& x) { 44 (*self)[key] = x; 45 } 46 void del(const K& key) throw (std::out_of_range) { 47 std::map<K,T >::iterator i = self->find(key); 48 if (i != self->end()) 49 self->erase(i); 50 else 51 throw std::out_of_range("key not found"); 52 } 53 bool has_key(const K& key) { 54 std::map<K,T >::iterator i = self->find(key); 55 return i != self->end(); 56 } 57 } 58 }; 59 } 60