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