Fix int matrix typemap (accept empty matrix as input)
This commit is contained in:
parent
46a234ed8f
commit
2847765ddf
1 changed files with 46 additions and 25 deletions
|
|
@ -115,8 +115,8 @@ SWIG_From_dec(size_t)(size_t _iValue)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* C-type: int[ANY]
|
* C-type: int
|
||||||
* Scilab type: int32 vector
|
* Scilab type: 32-bit signed integer matrix
|
||||||
*/
|
*/
|
||||||
%fragment("SWIG_SciInt32_AsIntArrayAndSize", "header") {
|
%fragment("SWIG_SciInt32_AsIntArrayAndSize", "header") {
|
||||||
SWIGINTERN int
|
SWIGINTERN int
|
||||||
|
|
@ -127,37 +127,58 @@ SWIG_SciInt32_AsIntArrayAndSize(void *_pvApiCtx, int _iVar, int *_iRows, int *_i
|
||||||
int *piAddrVar = NULL;
|
int *piAddrVar = NULL;
|
||||||
|
|
||||||
sciErr = getVarAddressFromPosition(_pvApiCtx, _iVar, &piAddrVar);
|
sciErr = getVarAddressFromPosition(_pvApiCtx, _iVar, &piAddrVar);
|
||||||
if (sciErr.iErr) {
|
if (sciErr.iErr)
|
||||||
|
{
|
||||||
printError(&sciErr, 0);
|
printError(&sciErr, 0);
|
||||||
return SWIG_ERROR;
|
return SWIG_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
sciErr = getVarType(_pvApiCtx, piAddrVar, &iType);
|
// Accepts 32-bit signed integer matrix for input
|
||||||
if (sciErr.iErr) {
|
if (isIntegerType(_pvApiCtx, piAddrVar))
|
||||||
printError(&sciErr, 0);
|
{
|
||||||
return SWIG_ERROR;
|
|
||||||
}
|
|
||||||
if (iType != sci_ints) {
|
|
||||||
Scierror(999, _("%s: Wrong type for input argument #%d: A 32-bit signed integer vector expected.\n"), _fname, _iVar);
|
|
||||||
return SWIG_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
sciErr = getMatrixOfIntegerPrecision(_pvApiCtx, piAddrVar, &iPrec);
|
sciErr = getMatrixOfIntegerPrecision(_pvApiCtx, piAddrVar, &iPrec);
|
||||||
if (sciErr.iErr) {
|
if (sciErr.iErr)
|
||||||
|
{
|
||||||
printError(&sciErr, 0);
|
printError(&sciErr, 0);
|
||||||
return SWIG_ERROR;
|
return SWIG_ERROR;
|
||||||
}
|
}
|
||||||
if (iPrec != SCI_INT32) {
|
if (iPrec != SCI_INT32)
|
||||||
Scierror(999, _("%s: Wrong type for input argument #%d: A 32-bit signed integer vector expected.\n"), _fname, _iVar);
|
{
|
||||||
|
Scierror(999, _("%s: Wrong type for input argument #%d: A 32-bit signed integer matrix expected.\n"), _fname, _iVar);
|
||||||
return SWIG_ERROR;
|
return SWIG_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
sciErr = getMatrixOfInteger32(_pvApiCtx, piAddrVar, _iRows, _iCols, _piValue);
|
sciErr = getMatrixOfInteger32(_pvApiCtx, piAddrVar, _iRows, _iCols, _piValue);
|
||||||
if (sciErr.iErr) {
|
if (sciErr.iErr)
|
||||||
|
{
|
||||||
printError(&sciErr, 0);
|
printError(&sciErr, 0);
|
||||||
return SWIG_ERROR;
|
return SWIG_ERROR;
|
||||||
}
|
}
|
||||||
|
return SWIG_OK;
|
||||||
|
}
|
||||||
|
else if (isDoubleType(_pvApiCtx, piAddrVar))
|
||||||
|
{
|
||||||
|
double **dblValue;
|
||||||
|
|
||||||
|
// Check if input matrix is not empty (empty matrix type is double)
|
||||||
|
sciErr = getMatrixOfDouble(_pvApiCtx, piAddrVar, _iRows, _iCols, dblValue);
|
||||||
|
if (sciErr.iErr)
|
||||||
|
{
|
||||||
|
printError(&sciErr, 0);
|
||||||
|
return SWIG_ERROR;
|
||||||
|
}
|
||||||
|
if ((*_iRows > 0) || (*_iCols > 0))
|
||||||
|
{
|
||||||
|
Scierror(999, _("%s: Wrong type for input argument #%d: A 32-bit signed integer matrix expected.\n"), _fname, _iVar);
|
||||||
|
return SWIG_ERROR;
|
||||||
|
}
|
||||||
|
*_piValue = (int*) malloc(sizeof(int*));
|
||||||
|
return SWIG_OK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Scierror(999, _("%s: Wrong type for input argument #%d: A 32-bit signed integer matrix expected.\n"), _fname, _iVar);
|
||||||
|
return SWIG_ERROR;
|
||||||
|
}
|
||||||
return SWIG_OK;
|
return SWIG_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue