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>
<li><tt>std::vector</tt></li>
<li><tt>std::list</tt></li>
<li><tt>std::deque</tt></li>
<li><tt>std::set</tt></li>
</ul>
@ -859,18 +860,18 @@ Some typemaps between Scilab and the STL are available.
<li>
<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>
<table summary="Typemaps vector-list", border="1">
<tr>
<th>STL type</th>
<th>Scilab type</th>
<tr><td>vector/list of int</td><td>int matrix</td></tr>
<tr><td>vector/list of double</td><td>double matrix</td></tr>
<tr><td>vector/list of string</td><td>string matrix</td></tr>
<tr><td>vector/list 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 int</td><td>int matrix</td></tr>
<tr><td>vector/list/deque of double</td><td>double matrix</td></tr>
<tr><td>vector/list/deque of string</td><td>string matrix</td></tr>
<tr><td>vector/list/deque of bool</td><td>bool matrix</td></tr>
<tr><td>vector/list/deque of pointer</td><td>pointer list</td></tr>
</table>
</li>

View file

@ -89,6 +89,19 @@ namespace std {
T ref_list(const std::list<T>& 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 ## _list) std::list<TYPE>;
%template(TYPE ## _deque) std::deque<TYPE>;
}
%enddef
@ -109,6 +123,9 @@ namespace std
%template(ret_ ## TYPE ## _list) ret_list<TYPE>;
%template(val_ ## TYPE ## _list) val_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

View file

@ -92,6 +92,13 @@ testSequenceContainer("list", "string", "a", "b", "ab");
testSequenceContainer("list", "bool", %T, %F, %T);
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);

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_string.i
%include std_vector.i
%include std_set.i
%include std_deque.i
%include std_list.i
%include std_set.i