Fix enum typemaps (now base on int conversion)

This commit is contained in:
Simon Marchetto 2013-05-28 11:19:26 +02:00
commit e667d59ed9

View file

@ -17,59 +17,33 @@
%include <scipointer.swg> %include <scipointer.swg>
%include <scibool.swg> %include <scibool.swg>
%fragment("SwigScilabInt32ToEnum", "header") { %fragment("SwigScilabInt32ToEnum", "header", fragment=SWIG_AsVal_frag(int)) {
SWIGINTERN int SWIGINTERN int
SwigScilabInt32ToEnum(void *_pvApiCtx, int _iVar, int *_enumValue, char* _fname) { SwigScilabInt32ToEnum(void *_pvApiCtx, int _iVar, int *_enumValue, char* _fname)
SciErr sciErr; {
int iPrec = 0; int iValue = 0;
int iRows = 1; if (SWIG_AsVal_dec(int)(_iVar, &iValue) != SWIG_OK)
int iCols = 1; {
int *piAddrVar = NULL;
int *piData = NULL;
sciErr = getVarAddressFromPosition(pvApiCtx, _iVar, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return SWIG_ERROR; return SWIG_ERROR;
} }
if (_enumValue)
sciErr = getMatrixOfIntegerPrecision(pvApiCtx, piAddrVar, &iPrec); {
if (sciErr.iErr) { *_enumValue = iValue;
printError(&sciErr, 0);
return SWIG_ERROR;
} }
if (iPrec != SCI_INT32) {
Scierror(999, _("%s: Wrong type for input argument #%d: A 32-bit integer expected.\n"), _fname, _iVar);
return SWIG_ERROR;
}
sciErr = getMatrixOfInteger32(pvApiCtx, piAddrVar, &iRows, &iCols, &piData);
if (sciErr.iErr) {
printError(&sciErr, 0);
return SWIG_ERROR;
}
*_enumValue = (int)piData[0];
return SWIG_OK; return SWIG_OK;
} }
} }
%fragment("SwigScilabInt32FromEnum", "header") { %fragment("SwigScilabInt32FromEnum", "header") {
SWIGINTERN int SWIGINTERN int
SwigScilabInt32FromEnum(void *_pvApiCtx, int _iVarOut, int _enumValue) { SwigScilabInt32FromEnum(void *_pvApiCtx, int _iVarOut, int _enumValue)
SciErr sciErr; {
int iRowsOut = 1; int iRet;
int iColsOut = 1; iRet = createScalarInteger32(pvApiCtx, nbInputArgument(pvApiCtx) + _iVarOut, _enumValue);
if (iRet)
sciErr = createMatrixOfInteger32(pvApiCtx, Rhs + _iVarOut, iRowsOut, iColsOut, &_enumValue); {
if (sciErr.iErr) {
printError(&sciErr, 0);
return SWIG_ERROR; return SWIG_ERROR;
} }
AssignOutputVariable(pvApiCtx, _iVarOut) = nbInputArgument(pvApiCtx) + _iVarOut; AssignOutputVariable(pvApiCtx, _iVarOut) = nbInputArgument(pvApiCtx) + _iVarOut;
return SWIG_OK; return SWIG_OK;
} }
} }