| Index: swig/Lib/std/_std_deque.i
|
| ===================================================================
|
| --- swig/Lib/std/_std_deque.i (revision 0)
|
| +++ swig/Lib/std/_std_deque.i (revision 0)
|
| @@ -0,0 +1,126 @@
|
| +/* -----------------------------------------------------------------------------
|
| + * See the LICENSE file for information on copyright, usage and redistribution
|
| + * of SWIG, and the README file for authors - http://www.swig.org/release.html.
|
| + *
|
| + * _std_deque.i
|
| + *
|
| + * This file contains a generic definition of std::deque along with
|
| + * some helper functions. Specific language modules should include
|
| + * this file to generate wrappers.
|
| + * ----------------------------------------------------------------------------- */
|
| +
|
| +%include <std_except.i>
|
| +
|
| +%{
|
| +#include <deque>
|
| +#include <stdexcept>
|
| +%}
|
| +
|
| +
|
| +/* This macro defines all of the standard methods for a deque. This
|
| + is defined as a macro to simplify the task of specialization. For
|
| + example,
|
| +
|
| + template<> class deque<int> {
|
| + public:
|
| + %std_deque_methods(int);
|
| + };
|
| +*/
|
| +
|
| +%define %std_deque_methods(T)
|
| + typedef T &reference;
|
| + typedef const T& const_reference;
|
| +
|
| + deque();
|
| + deque(unsigned int size, const T& value=T());
|
| + deque(const deque<T> &);
|
| + ~deque();
|
| +
|
| + void assign(unsigned int n, const T& value);
|
| + void swap(deque<T> &x);
|
| + unsigned int size() const;
|
| + unsigned int max_size() const;
|
| + void resize(unsigned int n, T c = T());
|
| + bool empty() const;
|
| + const_reference front();
|
| + const_reference back();
|
| + void push_front(const T& x);
|
| + void push_back(const T& x);
|
| + void pop_front();
|
| + void pop_back();
|
| + void clear();
|
| +
|
| + /* Some useful extensions */
|
| + %extend {
|
| + const_reference getitem(int i) throw (std::out_of_range) {
|
| + int size = int(self->size());
|
| + if (i<0) i += size;
|
| + if (i>=0 && i<size)
|
| + return (*self)[i];
|
| + else
|
| + throw std::out_of_range("deque index out of range");
|
| + }
|
| + void setitem(int i, const T& x) throw (std::out_of_range) {
|
| + int size = int(self->size());
|
| + if (i<0) i+= size;
|
| + if (i>=0 && i<size)
|
| + (*self)[i] = x;
|
| + else
|
| + throw std::out_of_range("deque index out of range");
|
| + }
|
| + void delitem(int i) throw (std::out_of_range) {
|
| + int size = int(self->size());
|
| + if (i<0) i+= size;
|
| + if (i>=0 && i<size) {
|
| + self->erase(self->begin()+i);
|
| + } else {
|
| + throw std::out_of_range("deque index out of range");
|
| + }
|
| + }
|
| + std::deque<T> getslice(int i, int j) {
|
| + int size = int(self->size());
|
| + if (i<0) i = size+i;
|
| + if (j<0) j = size+j;
|
| + if (i<0) i = 0;
|
| + if (j>size) j = size;
|
| + std::deque<T > tmp(j-i);
|
| + std::copy(self->begin()+i,self->begin()+j,tmp.begin());
|
| + return tmp;
|
| + }
|
| + void setslice(int i, int j, const std::deque<T>& v) {
|
| + int size = int(self->size());
|
| + if (i<0) i = size+i;
|
| + if (j<0) j = size+j;
|
| + if (i<0) i = 0;
|
| + if (j>size) j = size;
|
| + if (int(v.size()) == j-i) {
|
| + std::copy(v.begin(),v.end(),self->begin()+i);
|
| + } else {
|
| + self->erase(self->begin()+i,self->begin()+j);
|
| + if (i+1 <= size)
|
| + self->insert(self->begin()+i+1,v.begin(),v.end());
|
| + else
|
| + self->insert(self->end(),v.begin(),v.end());
|
| + }
|
| + }
|
| + void delslice(int i, int j) {
|
| + int size = int(self->size());
|
| + if (i<0) i = size+i;
|
| + if (j<0) j = size+j;
|
| + if (i<0) i = 0;
|
| + if (j>size) j = size;
|
| + self->erase(self->begin()+i,self->begin()+j);
|
| + }
|
| + };
|
| +
|
| +%enddef
|
| +
|
| +namespace std {
|
| + template<class T> class deque {
|
| + public:
|
| + %std_deque_methods(T);
|
| + };
|
| +}
|
| +
|
| +
|
| +
|
|
|