comparison lib/swig/swigwin-2.0.11/Lib/std/_std_deque.i @ 1899:b3009adc0e2f

Adding swig, gitignore, hgignore
author Nomad
date Mon, 21 Oct 2013 10:42:27 +0200
parents
children
comparison
equal deleted inserted replaced
1867:eb580660bbbb 1899:b3009adc0e2f
1 /* -----------------------------------------------------------------------------
2 * _std_deque.i
3 *
4 * This file contains a generic definition of std::deque along with
5 * some helper functions. Specific language modules should include
6 * this file to generate wrappers.
7 * ----------------------------------------------------------------------------- */
8
9 %include <std_except.i>
10
11 %{
12 #include <deque>
13 #include <stdexcept>
14 %}
15
16
17 /* This macro defines all of the standard methods for a deque. This
18 is defined as a macro to simplify the task of specialization. For
19 example,
20
21 template<> class deque<int> {
22 public:
23 %std_deque_methods(int);
24 };
25 */
26
27 %define %std_deque_methods_noempty(T)
28 typedef size_t size_type;
29 typedef ptrdiff_t difference_type;
30 typedef T value_type;
31 typedef value_type* pointer;
32 typedef const value_type* const_pointer;
33 typedef value_type& reference;
34 typedef const value_type& const_reference;
35
36 deque();
37 deque(unsigned int size, const T& value=T());
38 deque(const deque<T> &);
39 ~deque();
40
41 void assign(unsigned int n, const T& value);
42 void swap(deque<T> &x);
43 unsigned int size() const;
44 unsigned int max_size() const;
45 void resize(unsigned int n, T c = T());
46 const_reference front();
47 const_reference back();
48 void push_front(const T& x);
49 void push_back(const T& x);
50 void pop_front();
51 void pop_back();
52 void clear();
53
54 /* Some useful extensions */
55 %extend {
56 const_reference getitem(int i) throw (std::out_of_range) {
57 int size = int(self->size());
58 if (i<0) i += size;
59 if (i>=0 && i<size)
60 return (*self)[i];
61 else
62 throw std::out_of_range("deque index out of range");
63 }
64 void setitem(int i, const T& x) throw (std::out_of_range) {
65 int size = int(self->size());
66 if (i<0) i+= size;
67 if (i>=0 && i<size)
68 (*self)[i] = x;
69 else
70 throw std::out_of_range("deque index out of range");
71 }
72 void delitem(int i) throw (std::out_of_range) {
73 int size = int(self->size());
74 if (i<0) i+= size;
75 if (i>=0 && i<size) {
76 self->erase(self->begin()+i);
77 } else {
78 throw std::out_of_range("deque index out of range");
79 }
80 }
81 std::deque<T> getslice(int i, int j) {
82 int size = int(self->size());
83 if (i<0) i = size+i;
84 if (j<0) j = size+j;
85 if (i<0) i = 0;
86 if (j>size) j = size;
87 std::deque<T > tmp(j-i);
88 std::copy(self->begin()+i,self->begin()+j,tmp.begin());
89 return tmp;
90 }
91 void setslice(int i, int j, const std::deque<T>& v) {
92 int size = int(self->size());
93 if (i<0) i = size+i;
94 if (j<0) j = size+j;
95 if (i<0) i = 0;
96 if (j>size) j = size;
97 if (int(v.size()) == j-i) {
98 std::copy(v.begin(),v.end(),self->begin()+i);
99 } else {
100 self->erase(self->begin()+i,self->begin()+j);
101 if (i+1 <= size)
102 self->insert(self->begin()+i+1,v.begin(),v.end());
103 else
104 self->insert(self->end(),v.begin(),v.end());
105 }
106 }
107 void delslice(int i, int j) {
108 int size = int(self->size());
109 if (i<0) i = size+i;
110 if (j<0) j = size+j;
111 if (i<0) i = 0;
112 if (j>size) j = size;
113 self->erase(self->begin()+i,self->begin()+j);
114 }
115 };
116 %enddef
117
118 #ifdef SWIGPHP
119 %define %std_deque_methods(T)
120 %extend {
121 bool is_empty() const {
122 return self->empty();
123 }
124 };
125 %std_deque_methods_noempty(T)
126 %enddef
127 #else
128 %define %std_deque_methods(T)
129 bool empty() const;
130 %std_deque_methods_noempty(T)
131 %enddef
132 #endif
133
134 namespace std {
135 template<class T> class deque {
136 public:
137 %std_deque_methods(T);
138 };
139 }