Home | History | Annotate | Download | only in std
      1 %include <std_common.i>
      2 
      3 %{
      4 #include <utility>
      5 %}
      6 
      7 
      8 namespace std {
      9   template <class T, class U > struct pair {
     10     typedef T first_type;
     11     typedef U second_type;
     12 
     13     %traits_swigtype(T);
     14     %traits_swigtype(U);
     15 
     16     %fragment(SWIG_Traits_frag(std::pair<T,U >), "header",
     17 	      fragment=SWIG_Traits_frag(T),
     18 	      fragment=SWIG_Traits_frag(U),
     19 	      fragment="StdPairTraits") {
     20       namespace swig {
     21 	template <>  struct traits<std::pair<T,U > > {
     22 	  typedef pointer_category category;
     23 	  static const char* type_name() {
     24 	    return "std::pair<" #T "," #U " >";
     25 	  }
     26 	};
     27       }
     28     }
     29 
     30 #ifndef SWIG_STD_PAIR_ASVAL
     31     %typemap_traits_ptr(SWIG_TYPECHECK_PAIR, std::pair<T,U >);
     32 #else
     33     %typemap_traits(SWIG_TYPECHECK_PAIR, std::pair<T,U >);
     34 #endif
     35 
     36     pair();
     37     pair(T first, U second);
     38     pair(const pair& p);
     39 
     40     template <class U1, class U2> pair(const pair<U1, U2> &p);
     41 
     42     T first;
     43     U second;
     44 
     45 #ifdef %swig_pair_methods
     46     // Add swig/language extra methods
     47     %swig_pair_methods(std::pair<T,U >)
     48 #endif
     49   };
     50 
     51   // ***
     52   // The following specializations should disappear or get
     53   // simplified when a 'const SWIGTYPE*&' can be defined
     54   // ***
     55   template <class T, class U > struct pair<T, U*> {
     56     typedef T first_type;
     57     typedef U* second_type;
     58 
     59     %traits_swigtype(T);
     60     %traits_swigtype(U);
     61 
     62     %fragment(SWIG_Traits_frag(std::pair<T,U* >), "header",
     63 	      fragment=SWIG_Traits_frag(T),
     64 	      fragment=SWIG_Traits_frag(U),
     65 	      fragment="StdPairTraits") {
     66       namespace swig {
     67 	template <>  struct traits<std::pair<T,U* > > {
     68 	  typedef pointer_category category;
     69 	  static const char* type_name() {
     70 	    return "std::pair<" #T "," #U " * >";
     71 	  }
     72 	};
     73       }
     74     }
     75 
     76     %typemap_traits_ptr(SWIG_TYPECHECK_PAIR, std::pair<T,U* >);
     77 
     78     pair();
     79     pair(T __a, U* __b);
     80     pair(const pair& __p);
     81 
     82     T first;
     83     U* second;
     84 
     85 #ifdef %swig_pair_methods
     86     // Add swig/language extra methods
     87     %swig_pair_methods(std::pair<T,U*>)
     88 #endif
     89   };
     90 
     91   template <class T, class U > struct pair<T*, U> {
     92     typedef T* first_type;
     93     typedef U second_type;
     94 
     95     %traits_swigtype(T);
     96     %traits_swigtype(U);
     97 
     98     %fragment(SWIG_Traits_frag(std::pair<T*,U >), "header",
     99 	      fragment=SWIG_Traits_frag(T),
    100 	      fragment=SWIG_Traits_frag(U),
    101 	      fragment="StdPairTraits") {
    102       namespace swig {
    103 	template <>  struct traits<std::pair<T*,U > > {
    104 	  typedef pointer_category category;
    105 	  static const char* type_name() {
    106 	    return "std::pair<" #T " *," #U " >";
    107 	  }
    108 	};
    109       }
    110     }
    111 
    112     %typemap_traits_ptr(SWIG_TYPECHECK_PAIR, std::pair<T*,U >);
    113 
    114     pair();
    115     pair(T* __a, U __b);
    116     pair(const pair& __p);
    117 
    118     T* first;
    119     U second;
    120 
    121 #ifdef %swig_pair_methods
    122     // Add swig/language extra methods
    123     %swig_pair_methods(std::pair<T*,U >)
    124 #endif
    125   };
    126 
    127   template <class T, class U > struct pair<T*, U*> {
    128     typedef T* first_type;
    129     typedef U* second_type;
    130 
    131     %traits_swigtype(T);
    132     %traits_swigtype(U);
    133 
    134     %fragment(SWIG_Traits_frag(std::pair<T*,U* >), "header",
    135 	      fragment=SWIG_Traits_frag(T),
    136 	      fragment=SWIG_Traits_frag(U),
    137 	      fragment="StdPairTraits") {
    138       namespace swig {
    139 	template <>  struct traits<std::pair<T*,U* > > {
    140 	  typedef pointer_category category;
    141 	  static const char* type_name() {
    142 	    return "std::pair<" #T " *," #U " * >";
    143 	  }
    144 	};
    145       }
    146     }
    147 
    148     %typemap_traits(SWIG_TYPECHECK_PAIR, std::pair<T*,U* >);
    149 
    150     pair();
    151     pair(T* __a, U* __b);
    152     pair(const pair& __p);
    153 
    154     T* first;
    155     U* second;
    156 
    157 #ifdef %swig_pair_methods
    158     // Add swig/language extra methods
    159     %swig_pair_methods(std::pair<T*,U*>)
    160 #endif
    161   };
    162 
    163 }
    164