From ba4a32e05910528f89107105f07aa28d5ff858cd Mon Sep 17 00:00:00 2001 From: Vincent Couvert Date: Wed, 23 Mar 2011 15:37:30 +0000 Subject: [PATCH] Implement SWIG_AsVal_long git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2009-sploving@12549 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- Lib/scilab/sciprimtypes.swg | 55 ++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/Lib/scilab/sciprimtypes.swg b/Lib/scilab/sciprimtypes.swg index 29480ff4c..8fdab0a96 100644 --- a/Lib/scilab/sciprimtypes.swg +++ b/Lib/scilab/sciprimtypes.swg @@ -75,7 +75,60 @@ SWIG_FromCharPtrAndSize(const char* carray, size_t size) %fragment(SWIG_AsVal_frag(long),"header") { SWIGINTERN int SWIG_AsVal_dec(long)(int iPos, long* val) { - return 0; + SciErr sciErr; + int iRows = 1; + int iCols = 1; + int iType = 0; + int* piAddrVar = NULL; + double* piData = NULL; + double v = 0.0; + + sciErr = getVarAddressFromPosition(pvApiCtx, iPos, &piAddrVar); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return SWIG_TypeError; + } + + sciErr = getVarType(pvApiCtx, piAddrVar, &iType); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return SWIG_TypeError; + } + if (iType != sci_matrix) + { + return SWIG_TypeError; + } + + if (isVarComplex(pvApiCtx, piAddrVar)) + { + return SWIG_TypeError; + } + + sciErr = getMatrixOfDouble(pvApiCtx, piAddrVar, &iRows, &iCols, (double **)&piData); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return SWIG_TypeError; + } + if (iRows * iCols != 1) + { + return SWIG_TypeError; + } + + v = piData[0]; + if (v != floor(v)) + { + return SWIG_TypeError; + } + + if (val != NULL) + { + *val = (long) piData[0]; + } + + return SWIG_OK; } }