Mercurial > mm7
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 } |