Scilab: fix li_std_vector & ignore_template_constructor test case
fix: return a runtime error for not supported type containers
This commit is contained in:
parent
6735b9727f
commit
774dddca00
2 changed files with 53 additions and 13 deletions
|
|
@ -23,7 +23,6 @@
|
||||||
#define SWIG_From_SequenceItem_frag(Type...) %fragment_name(From_SequenceItem, Type)
|
#define SWIG_From_SequenceItem_frag(Type...) %fragment_name(From_SequenceItem, Type)
|
||||||
#define SWIG_From_SequenceItem_dec(Type...) %symbol_name(From_SequenceItem, Type)
|
#define SWIG_From_SequenceItem_dec(Type...) %symbol_name(From_SequenceItem, Type)
|
||||||
|
|
||||||
|
|
||||||
%include <scisequencepointer.swg>
|
%include <scisequencepointer.swg>
|
||||||
%include <scisequenceint.swg>
|
%include <scisequenceint.swg>
|
||||||
%include <scisequencedouble.swg>
|
%include <scisequencedouble.swg>
|
||||||
|
|
@ -39,10 +38,35 @@
|
||||||
fragment=SWIG_AsGet_Sequence_frag(ptr),
|
fragment=SWIG_AsGet_Sequence_frag(ptr),
|
||||||
fragment=SWIG_AsSize_Sequence_frag(ptr),
|
fragment=SWIG_AsSize_Sequence_frag(ptr),
|
||||||
fragment=SWIG_FromCreate_Sequence_frag(ptr),
|
fragment=SWIG_FromCreate_Sequence_frag(ptr),
|
||||||
fragment=SWIG_FromSet_Sequence_frag(ptr)) {
|
fragment=SWIG_FromSet_Sequence_frag(ptr),
|
||||||
|
fragment="StdTraits") {
|
||||||
|
|
||||||
namespace swig {
|
namespace swig {
|
||||||
|
// Returns an error for default (not specialized) value containers
|
||||||
|
|
||||||
template <typename T> struct traits_as_sequence {
|
template <typename T> struct traits_as_sequence {
|
||||||
|
static int check(SciObject obj) {
|
||||||
|
SWIG_Error(SWIG_TypeError, type_name<T>());
|
||||||
|
}
|
||||||
|
static int get(SciObject obj, void **sequence) {
|
||||||
|
SWIG_Error(SWIG_TypeError, type_name<T>());
|
||||||
|
}
|
||||||
|
static int size(SciObject obj, int *size) {
|
||||||
|
SWIG_Error(SWIG_TypeError, type_name<T>());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
template <typename T> struct traits_from_sequence {
|
||||||
|
static int create(int size, void **sequence) {
|
||||||
|
SWIG_Error(SWIG_TypeError, type_name<T>());
|
||||||
|
}
|
||||||
|
static SciObject set(int size, void *sequence) {
|
||||||
|
SWIG_Error(SWIG_TypeError, type_name<T>());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// But supports containers of pointers
|
||||||
|
|
||||||
|
template <typename T> struct traits_as_sequence<T*> {
|
||||||
static int check(SciObject obj) {
|
static int check(SciObject obj) {
|
||||||
return SWIG_AsCheck_Sequence_dec(ptr)(obj);
|
return SWIG_AsCheck_Sequence_dec(ptr)(obj);
|
||||||
}
|
}
|
||||||
|
|
@ -53,12 +77,12 @@ namespace swig {
|
||||||
return SWIG_AsSize_Sequence_dec(ptr)(obj, size);
|
return SWIG_AsSize_Sequence_dec(ptr)(obj, size);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
template <typename T> struct traits_from_sequence {
|
template <typename T> struct traits_from_sequence<T*> {
|
||||||
static int create(int size, void **sequence) {
|
static int create(int size, void **sequence) {
|
||||||
return SWIG_FromCreate_Sequence_dec(ptr)(size, (int ***)sequence);
|
return SWIG_FromCreate_Sequence_dec(ptr)(size, (long long **)sequence);
|
||||||
}
|
}
|
||||||
static SciObject set(int size, void *sequence) {
|
static SciObject set(int size, void *sequence) {
|
||||||
return SWIG_FromSet_Sequence_dec(ptr)(size, (int **)sequence);
|
return SWIG_FromSet_Sequence_dec(ptr)(size, (long long *)sequence);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -104,19 +128,35 @@ namespace swig {
|
||||||
|
|
||||||
%fragment(SWIG_Traits_SequenceItem_frag(ptr), "header",
|
%fragment(SWIG_Traits_SequenceItem_frag(ptr), "header",
|
||||||
fragment=SWIG_AsVal_SequenceItem_frag(ptr),
|
fragment=SWIG_AsVal_SequenceItem_frag(ptr),
|
||||||
fragment=SWIG_From_SequenceItem_frag(ptr)) {
|
fragment=SWIG_From_SequenceItem_frag(ptr),
|
||||||
|
fragment="StdTraits") {
|
||||||
|
|
||||||
namespace swig {
|
namespace swig {
|
||||||
|
// Returns an error for default (not specialized) value containers
|
||||||
|
|
||||||
template <typename T> struct traits_asval_sequenceitem {
|
template <typename T> struct traits_asval_sequenceitem {
|
||||||
static int asval(SciObject obj, void *pSequence, int iItemIndex, T *pItemValue) {
|
static int asval(SciObject obj, void *pSequence, int iItemIndex, T *pItemValue) {
|
||||||
return SWIG_AsVal_SequenceItem_dec(ptr)(obj, (int *)pSequence, iItemIndex, (int **)pItemValue);
|
SWIG_Error(SWIG_TypeError, type_name<T>());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
template <typename T> struct traits_from_sequenceitem {
|
template <typename T> struct traits_from_sequenceitem {
|
||||||
static int from(void *pSequence, int iItemIndex, T itemValue) {
|
static int from(void *pSequence, int iItemIndex, T itemValue) {
|
||||||
return SWIG_From_SequenceItem_dec(ptr)((int **)pSequence, iItemIndex, (int*)itemValue);
|
SWIG_Error(SWIG_TypeError, type_name<T>());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// But supports containers of pointers
|
||||||
|
|
||||||
|
template <typename T> struct traits_asval_sequenceitem<T*> {
|
||||||
|
static int asval(SciObject obj, void *pSequence, int iItemIndex, T **pItemValue) {
|
||||||
|
return SWIG_AsVal_SequenceItem_dec(ptr)(obj, (int *)pSequence, iItemIndex, (void **)pItemValue);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
template <typename T> struct traits_from_sequenceitem<T*> {
|
||||||
|
static int from(void *pSequence, int iItemIndex, T *itemValue) {
|
||||||
|
return SWIG_From_SequenceItem_dec(ptr)((long long *)pSequence, iItemIndex, (long long) itemValue);
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,8 @@ SWIG_AsSize_Sequence_dec(ptr)(SciObject _obj, int *_piSize) {
|
||||||
%fragment(SWIG_FromCreate_Sequence_frag(ptr), "header") {
|
%fragment(SWIG_FromCreate_Sequence_frag(ptr), "header") {
|
||||||
|
|
||||||
SWIGINTERN int
|
SWIGINTERN int
|
||||||
SWIG_FromCreate_Sequence_dec(ptr)(int _size, int ***_sequence) {
|
SWIG_FromCreate_Sequence_dec(ptr)(int _size, long long **_sequence) {
|
||||||
*_sequence = new int*[_size];
|
*_sequence = new long long[_size];
|
||||||
return *_sequence != NULL ? SWIG_OK : SWIG_ERROR;
|
return *_sequence != NULL ? SWIG_OK : SWIG_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -45,7 +45,7 @@ SWIG_FromCreate_Sequence_dec(ptr)(int _size, int ***_sequence) {
|
||||||
%fragment(SWIG_FromSet_Sequence_frag(ptr), "header") {
|
%fragment(SWIG_FromSet_Sequence_frag(ptr), "header") {
|
||||||
|
|
||||||
SWIGINTERN SciObject
|
SWIGINTERN SciObject
|
||||||
SWIG_FromSet_Sequence_dec(ptr)(int _size, int **_sequence) {
|
SWIG_FromSet_Sequence_dec(ptr)(int _size, long long *_sequence) {
|
||||||
SciErr sciErr;
|
SciErr sciErr;
|
||||||
int *piListAddr;
|
int *piListAddr;
|
||||||
|
|
||||||
|
|
@ -75,7 +75,7 @@ SWIG_FromSet_Sequence_dec(ptr)(int _size, int **_sequence) {
|
||||||
%fragment(SWIG_AsVal_SequenceItem_frag(ptr), "header") {
|
%fragment(SWIG_AsVal_SequenceItem_frag(ptr), "header") {
|
||||||
|
|
||||||
SWIGINTERN int
|
SWIGINTERN int
|
||||||
SWIG_AsVal_SequenceItem_dec(ptr)(SciObject _obj, int* _piSequence, int _itemIndex, int **_pItemValue)
|
SWIG_AsVal_SequenceItem_dec(ptr)(SciObject _obj, int *_piSequence, int _itemIndex, void **_pItemValue)
|
||||||
{
|
{
|
||||||
SciErr sciErr;
|
SciErr sciErr;
|
||||||
int *piItemAddr;
|
int *piItemAddr;
|
||||||
|
|
@ -115,7 +115,7 @@ SWIG_AsVal_SequenceItem_dec(ptr)(SciObject _obj, int* _piSequence, int _itemInde
|
||||||
%fragment(SWIG_From_SequenceItem_frag(ptr), "header") {
|
%fragment(SWIG_From_SequenceItem_frag(ptr), "header") {
|
||||||
|
|
||||||
SWIGINTERN int
|
SWIGINTERN int
|
||||||
SWIG_From_SequenceItem_dec(ptr)(int **_pSequence, int _iItemIndex, int *_itemValue) {
|
SWIG_From_SequenceItem_dec(ptr)(long long *_pSequence, int _iItemIndex, long long _itemValue) {
|
||||||
_pSequence[_iItemIndex] = _itemValue;
|
_pSequence[_iItemIndex] = _itemValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue