1 // 2 // std::deque 3 4 %include <std_container.i> 5 6 // Deque 7 8 %define %std_deque_methods(deque...) 9 %std_sequence_methods(deque) 10 11 void pop_front(); 12 void push_front(const value_type& x); 13 %enddef 14 15 %define %std_deque_methods_val(deque...) 16 %std_sequence_methods_val(deque) 17 18 void pop_front(); 19 void push_front(value_type x); 20 %enddef 21 22 // ------------------------------------------------------------------------ 23 // std::deque 24 // 25 // const declarations are used to guess the intent of the function being 26 // exported; therefore, the following rationale is applied: 27 // 28 // -- f(std::deque<T>), f(const std::deque<T>&): 29 // the parameter being read-only, either a sequence or a 30 // previously wrapped std::deque<T> can be passed. 31 // -- f(std::deque<T>&), f(std::deque<T>*): 32 // the parameter may be modified; therefore, only a wrapped std::deque 33 // can be passed. 34 // -- std::deque<T> f(), const std::deque<T>& f(): 35 // the deque is returned by copy; therefore, a sequence of T:s 36 // is returned which is most easily used in other functions 37 // -- std::deque<T>& f(), std::deque<T>* f(): 38 // the deque is returned by reference; therefore, a wrapped std::deque 39 // is returned 40 // -- const std::deque<T>* f(), f(const std::deque<T>*): 41 // for consistency, they expect and return a plain deque pointer. 42 // ------------------------------------------------------------------------ 43 44 %{ 45 #include <deque> 46 %} 47 48 // exported classes 49 50 namespace std { 51 52 template<class _Tp, class _Alloc = allocator<_Tp> > 53 class deque { 54 public: 55 typedef size_t size_type; 56 typedef ptrdiff_t difference_type; 57 typedef _Tp value_type; 58 typedef value_type* pointer; 59 typedef const value_type* const_pointer; 60 typedef value_type& reference; 61 typedef const value_type& const_reference; 62 typedef _Alloc allocator_type; 63 64 %traits_swigtype(_Tp); 65 66 %fragment(SWIG_Traits_frag(std::deque<_Tp, _Alloc >), "header", 67 fragment=SWIG_Traits_frag(_Tp), 68 fragment="StdDequeTraits") { 69 namespace swig { 70 template <> struct traits<std::deque<_Tp, _Alloc > > { 71 typedef pointer_category category; 72 static const char* type_name() { 73 return "std::deque<" #_Tp " >"; 74 } 75 }; 76 } 77 } 78 79 %typemap_traits_ptr(SWIG_TYPECHECK_DEQUE, std::deque<_Tp, _Alloc >); 80 81 #ifdef %swig_deque_methods 82 // Add swig/language extra methods 83 %swig_deque_methods(std::deque<_Tp, _Alloc >); 84 #endif 85 86 %std_deque_methods(deque); 87 }; 88 89 template<class _Tp, class _Alloc > 90 class deque<_Tp*, _Alloc > { 91 public: 92 typedef size_t size_type; 93 typedef ptrdiff_t difference_type; 94 typedef _Tp* value_type; 95 typedef value_type* pointer; 96 typedef const value_type* const_pointer; 97 typedef value_type reference; 98 typedef value_type const_reference; 99 typedef _Alloc allocator_type; 100 101 %traits_swigtype(_Tp); 102 103 %fragment(SWIG_Traits_frag(std::deque<_Tp*, _Alloc >), "header", 104 fragment=SWIG_Traits_frag(_Tp), 105 fragment="StdDequeTraits") { 106 namespace swig { 107 template <> struct traits<std::deque<_Tp*, _Alloc > > { 108 typedef value_category category; 109 static const char* type_name() { 110 return "std::deque<" #_Tp " * >"; 111 } 112 }; 113 } 114 } 115 116 %typemap_traits_ptr(SWIG_TYPECHECK_DEQUE, std::deque<_Tp*, _Alloc >); 117 118 #ifdef %swig_deque_methods_val 119 // Add swig/language extra methods 120 %swig_deque_methods_val(std::deque<_Tp*, _Alloc >); 121 #endif 122 123 %std_deque_methods_val(std::deque<_Tp*, _Alloc >); 124 }; 125 126 } 127 128