1555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/* -----------------------------------------------------------------------------
2555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * std_list.i
3555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot *
4555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * SWIG typemaps for std::list types
5555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot *
6555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * To use, add:
7555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot *
8555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * %include "std_list.i"
9555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot *
10555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * to your interface file. You will also need to include a template directive
11555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * for each instance of the list container you want to use in your application.
12555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * e.g.
13555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot *
14555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * %template (intlist) std::list<int>;
15555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * %template (floatlist) std::list<float>;
16555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * ----------------------------------------------------------------------------- */
17555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
18555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%module std_list
19555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%warnfilter(468) std::list;
20555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
21555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%{
22555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#include <list>
23555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#include <stdexcept>
24555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%}
25555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
26555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
27555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotnamespace std{
28555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    template<class T> class list
29555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    {
30555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    public:
31555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
32555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	typedef T &reference;
33555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	typedef const T& const_reference;
34555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	typedef T &iterator;
35555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	typedef const T& const_iterator;
36555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
37555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	list();
38555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	list(unsigned int size, const T& value = T());
39555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	list(const list<T> &);
40555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
41555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	~list();
42555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	void assign(unsigned int n, const T& value);
43555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	void swap(list<T> &x);
44555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
45555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	const_reference front();
46555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	const_reference back();
47555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	const_iterator begin();
48555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	const_iterator end();
49555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
50555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	void resize(unsigned int n, T c = T());
51555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	bool empty() const;
52555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
53555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	void push_front(const T& INPUT);
54555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	void push_back(const T& INPUT);
55555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
56555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
57555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	void pop_front();
58555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	void pop_back();
59555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	void clear();
60555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	unsigned int size() const;
61555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	unsigned int max_size() const;
62555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	void resize(unsigned int n, const T& INPUT);
63555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
64555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	void remove(const T& INPUT);
65555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	void unique();
66555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	void reverse();
67555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	void sort();
68555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
69555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	%extend
70555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	    {
71555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	        %typemap(lout) T &__getitem__ "(cl::setq ACL_ffresult (ff:fslot-value-typed '$*out_fftype :c $body))";
72555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		%typemap(lout) T *__getitem__ "(cl::setq ACL_ffresult (make-instance '$lclass :foreign-address $body))";
73555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
74555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		const_reference __getitem__(int i) throw (std::out_of_range)
75555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    {
76555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			std::list<T>::iterator first = self->begin();
77555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			int size = int(self->size());
78555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (i<0) i += size;
79555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (i>=0 && i<size)
80555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			{
81555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    for (int k=0;k<i;k++)
82555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    {
83555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot				first++;
84555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    }
85555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    return *first;
86555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			}
87555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			else throw std::out_of_range("list index out of range");
88555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    }
89555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		void __setitem__(int i, const T& INPUT) throw (std::out_of_range)
90555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    {
91555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			std::list<T>::iterator first = self->begin();
92555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			int size = int(self->size());
93555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (i<0) i += size;
94555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (i>=0 && i<size)
95555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			{
96555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    for (int k=0;k<i;k++)
97555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    {
98555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot				first++;
99555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    }
100555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    *first = INPUT;
101555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			}
102555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			else throw std::out_of_range("list index out of range");
103555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    }
104555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		void __delitem__(int i) throw (std::out_of_range)
105555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    {
106555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			std::list<T>::iterator first = self->begin();
107555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			int size = int(self->size());
108555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (i<0) i += size;
109555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (i>=0 && i<size)
110555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			{
111555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    for (int k=0;k<i;k++)
112555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    {
113555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot				first++;
114555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    }
115555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    self->erase(first);
116555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			}
117555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			else throw std::out_of_range("list index out of range");
118555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    }
119555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		std::list<T> __getslice__(int i,int j)
120555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    {
121555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			std::list<T>::iterator first = self->begin();
122555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			std::list<T>::iterator end = self->end();
123555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
124555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			int size = int(self->size());
125555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (i<0) i += size;
126555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (j<0) j += size;
127555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (i<0) i = 0;
128555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (j>size) j = size;
129555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (i>=j) i=j;
130555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (i>=0 && i<size && j>=0)
131555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			{
132555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    for (int k=0;k<i;k++)
133555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    {
134555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot				first++;
135555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    }
136555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    for (int m=0;m<j;m++)
137555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    {
138555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot				end++;
139555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    }
140555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    std::list<T> tmp(j-i);
141555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    if (j>i) std::copy(first,end,tmp.begin());
142555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    return tmp;
143555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			}
144555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			else throw std::out_of_range("list index out of range");
145555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    }
146555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		void __delslice__(int i,int j)
147555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    {
148555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			std::list<T>::iterator first = self->begin();
149555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			std::list<T>::iterator end = self->end();
150555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
151555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			int size = int(self->size());
152555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (i<0) i += size;
153555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (j<0) j += size;
154555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (i<0) i = 0;
155555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (j>size) j = size;
156555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
157555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			for (int k=0;k<i;k++)
158555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			{
159555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    first++;
160555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			}
161555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			for (int m=0;m<=j;m++)
162555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			{
163555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    end++;
164555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			}
165555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			self->erase(first,end);
166555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    }
167555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		void __setslice__(int i,int j, const std::list<T>& v)
168555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    {
169555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			std::list<T>::iterator first = self->begin();
170555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			std::list<T>::iterator end = self->end();
171555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
172555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			int size = int(self->size());
173555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (i<0) i += size;
174555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (j<0) j += size;
175555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (i<0) i = 0;
176555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (j>size) j = size;
177555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
178555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			for (int k=0;k<i;k++)
179555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			{
180555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    first++;
181555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			}
182555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			for (int m=0;m<=j;m++)
183555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			{
184555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    end++;
185555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			}
186555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			if (int(v.size()) == j-i)
187555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			{
188555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    std::copy(v.begin(),v.end(),first);
189555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			}
190555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			else {
191555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    self->erase(first,end);
192555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    if (i+1 <= int(self->size()))
193555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    {
194555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot				first = self->begin();
195555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot				for (int k=0;k<i;k++)
196555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot				{
197555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot				    first++;
198555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot				}
199555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot				self->insert(first,v.begin(),v.end());
200555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    }
201555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			    else self->insert(self->end(),v.begin(),v.end());
202555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			}
203555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
204555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    }
205555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		unsigned int __len__()
206555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    {
207555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			return self->size();
208555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    }
209555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		bool __nonzero__()
210555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    {
211555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			return !(self->empty());
212555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    }
213555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		void append(const T& INPUT)
214555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    {
215555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			self->push_back(INPUT);
216555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    }
217555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		void pop()
218555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    {
219555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot			self->pop_back();
220555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot		    }
221555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
222555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	    };
223555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    };
224555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot}
225555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
226555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
227555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
228555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
229555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
230555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
231