scilab: support of std::deque

This commit is contained in:
Simon Marchetto 2014-03-11 18:34:14 +01:00
commit 8701e6f843
5 changed files with 64 additions and 8 deletions

View file

@ -836,6 +836,7 @@ The following containers are usable:
<ul> <ul>
<li><tt>std::vector</tt></li> <li><tt>std::vector</tt></li>
<li><tt>std::list</tt></li> <li><tt>std::list</tt></li>
<li><tt>std::deque</tt></li>
<li><tt>std::set</tt></li> <li><tt>std::set</tt></li>
</ul> </ul>
@ -859,18 +860,18 @@ Some typemaps between Scilab and the STL are available.
<li> <li>
<p> <p>
A STL vector or list is mapped from/to a Scilab matrix or list, depending on type. A STL vector/list/deque is mapped from/to a Scilab matrix or list, depending on type.
<p> <p>
<table summary="Typemaps vector-list", border="1"> <table summary="Typemaps vector-list", border="1">
<tr> <tr>
<th>STL type</th> <th>STL type</th>
<th>Scilab type</th> <th>Scilab type</th>
<tr><td>vector/list of int</td><td>int matrix</td></tr> <tr><td>vector/list/deque of int</td><td>int matrix</td></tr>
<tr><td>vector/list of double</td><td>double matrix</td></tr> <tr><td>vector/list/deque of double</td><td>double matrix</td></tr>
<tr><td>vector/list of string</td><td>string matrix</td></tr> <tr><td>vector/list/deque of string</td><td>string matrix</td></tr>
<tr><td>vector/list of bool</td><td>bool matrix</td></tr> <tr><td>vector/list/deque of bool</td><td>bool matrix</td></tr>
<tr><td>vector/list of pointer</td><td>pointer list</td></tr> <tr><td>vector/list/deque of pointer</td><td>pointer list</td></tr>
</table> </table>
</li> </li>

View file

@ -89,6 +89,19 @@ namespace std {
T ref_list(const std::list<T>& container) { T ref_list(const std::list<T>& container) {
return sequence_container<std::list<T> >::ref_container(container); return sequence_container<std::list<T> >::ref_container(container);
} }
template<typename T>
std::deque<T> ret_deque(const T value1, const T value2) {
return sequence_container<std::deque<T> >::ret_container(value1, value2);
}
template<typename T>
T val_deque(const std::deque<T> container) {
return sequence_container<std::deque<T> >::val_container(container);
}
template<typename T>
T ref_deque(const std::deque<T>& container) {
return sequence_container<std::deque<T> >::ref_container(container);
}
} }
%} %}
@ -97,6 +110,7 @@ namespace std
{ {
%template(TYPE ## _vector) std::vector<TYPE>; %template(TYPE ## _vector) std::vector<TYPE>;
%template(TYPE ## _list) std::list<TYPE>; %template(TYPE ## _list) std::list<TYPE>;
%template(TYPE ## _deque) std::deque<TYPE>;
} }
%enddef %enddef
@ -109,6 +123,9 @@ namespace std
%template(ret_ ## TYPE ## _list) ret_list<TYPE>; %template(ret_ ## TYPE ## _list) ret_list<TYPE>;
%template(val_ ## TYPE ## _list) val_list<TYPE>; %template(val_ ## TYPE ## _list) val_list<TYPE>;
%template(ref_ ## TYPE ## _list) ref_list<TYPE>; %template(ref_ ## TYPE ## _list) ref_list<TYPE>;
%template(ret_ ## TYPE ## _deque) ret_deque<TYPE>;
%template(val_ ## TYPE ## _deque) val_deque<TYPE>;
%template(ref_ ## TYPE ## _deque) ref_deque<TYPE>;
} }
%enddef %enddef

View file

@ -92,6 +92,13 @@ testSequenceContainer("list", "string", "a", "b", "ab");
testSequenceContainer("list", "bool", %T, %F, %T); testSequenceContainer("list", "bool", %T, %F, %T);
testSequenceContainerPtr("list", 1, 3, 4); testSequenceContainerPtr("list", 1, 3, 4);
// test deque
testSequenceContainer("deque", "int", 1, 2, 3);
testSequenceContainer("deque", "double", 2., 3., 5.);
testSequenceContainer("deque", "string", "a", "b", "ab");
testSequenceContainer("deque", "bool", %T, %F, %T);
testSequenceContainerPtr("deque", 1, 3, 4);
exec("swigtest.quit", -1); exec("swigtest.quit", -1);

View file

@ -1 +1,31 @@
%include <std/_std_deque.i> /*
*
* C++ type : STL deque
* Scilab type : matrix (for vectors of primitive types) or list (for sets of all other types : pointers...)
*
*/
%fragment("StdDequeTraits","header",fragment="StdSequenceTraits")
%{
namespace swig {
template <class T>
struct traits_asptr<std::deque<T> > {
static int asptr(const SwigSciObject &obj, std::deque<T> **deq) {
return traits_asptr_stdseq<std::deque<T> >::asptr(obj, deq);
}
};
template <class T>
struct traits_from<std::deque<T> > {
static SwigSciObject from(const std::deque<T>& deq) {
return traits_from_stdseq<std::deque<T> >::from(deq);
}
};
}
%}
#define %swig_deque_methods(Type...) %swig_sequence_methods(Type)
#define %swig_deque_methods_val(Type...) %swig_sequence_methods_val(Type);
%include <std/std_deque.i>

View file

@ -2,5 +2,6 @@
%include std_common.i %include std_common.i
%include std_string.i %include std_string.i
%include std_vector.i %include std_vector.i
%include std_set.i %include std_deque.i
%include std_list.i %include std_list.i
%include std_set.i