Home | History | Annotate | Download | only in php
      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 
     23     template<class K, class T> class map {
     24         // add typemaps here
     25       public:
     26         typedef size_t size_type;
     27         typedef ptrdiff_t difference_type;
     28         typedef K key_type;
     29         typedef T mapped_type;
     30         map();
     31         map(const map<K,T> &);
     32 
     33         unsigned int size() 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             bool is_empty() const {
     58                 return self->empty();
     59             }
     60         }
     61     };
     62 
     63 // Legacy macros (deprecated)
     64 %define specialize_std_map_on_key(K,CHECK,CONVERT_FROM,CONVERT_TO)
     65 #warning "specialize_std_map_on_key ignored - macro is deprecated and no longer necessary"
     66 %enddef
     67 
     68 %define specialize_std_map_on_value(T,CHECK,CONVERT_FROM,CONVERT_TO)
     69 #warning "specialize_std_map_on_value ignored - macro is deprecated and no longer necessary"
     70 %enddef
     71 
     72 %define specialize_std_map_on_both(K,CHECK_K,CONVERT_K_FROM,CONVERT_K_TO, T,CHECK_T,CONVERT_T_FROM,CONVERT_T_TO)
     73 #warning "specialize_std_map_on_both ignored - macro is deprecated and no longer necessary"
     74 %enddef
     75 
     76 }
     77