Factorize code with macros

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2009-sploving@12305 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Vincent Couvert 2010-11-23 16:13:42 +00:00
commit 95bb883090

View file

@ -2522,238 +2522,130 @@
/* ------------------------------------------------------------ /* ------------------------------------------------------------
* --- Typecheck typemaps --- * --- Typecheck typemaps ---
* ------------------------------------------------------------ */ * ------------------------------------------------------------ */
%define SCILAB_TYPECHECK(SCITYPE)
int *piAddrVar = NULL;
int iType = 0;
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr)
{
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &iType);
$1 = (iType == ##SCITYPE##) ? 1 : 0;
%enddef
/* Scilab equivalent for C integers can be sci_ints or sci_matrix */
%define SCILAB_INTEGERTYPECHECK(INTTYPE)
SCILAB_TYPECHECK(sci_ints)
if ($1 == 1) /* sci_ints type */
{
int iPrec = 0;
sciErr = getMatrixOfIntegerPrecision(pvApiCtx, piAddrVar, &iPrec);
if (sciErr.iErr)
{
printError(&sciErr, 0);
return 0;
}
$1 = (iPrec == ##INTTYPE##) ? 1 : 0;
}
else /* sci_matrix type */
{
SCILAB_TYPECHECK(sci_matrix)
}
%enddef
/* Basic C types */ /* Basic C types */
%typecheck(SWIG_TYPECHECK_CHAR) char { %typecheck(SWIG_TYPECHECK_CHAR) char {
int *piAddrVar; SCILAB_TYPECHECK(sci_strings)
int typearg;
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_strings) ? 1 : 0;
} }
%typecheck(SWIG_TYPECHECK_INT8) signed char { %typecheck(SWIG_TYPECHECK_INT8) signed char {
int *piAddrVar; //SCILAB_INTEGERTYPECHECK(SCI_INT8)
int typearg; SCILAB_TYPECHECK(sci_matrix)
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_matrix) ? 1 : 0; /* TODO: fix this bug. should be int */
} }
%typecheck(SWIG_TYPECHECK_UINT8) unsigned char { %typecheck(SWIG_TYPECHECK_UINT8) unsigned char {
int *piAddrVar; //SCILAB_INTEGERTYPECHECK(SCI_UINT8)
int typearg; SCILAB_TYPECHECK(sci_matrix)
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_matrix) ? 1 : 0; /* TODO: fix this bug. should be int */
} }
%typecheck(SWIG_TYPECHECK_INT16) short { %typecheck(SWIG_TYPECHECK_INT16) short {
int *piAddrVar; //SCILAB_INTEGERTYPECHECK(SCI_INT16)
int typearg; SCILAB_TYPECHECK(sci_matrix)
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_matrix) ? 1 : 0; /* TODO: fix this bug. should be int */
} }
%typecheck(SWIG_TYPECHECK_UINT16) unsigned short { %typecheck(SWIG_TYPECHECK_UINT16) unsigned short {
int *piAddrVar; //SCILAB_INTEGERTYPECHECK(SCI_UINT16)
int typearg; SCILAB_TYPECHECK(sci_matrix)
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_matrix) ? 1 : 0; /* TODO: fix this bug. should be int */
} }
%typecheck(SWIG_TYPECHECK_INT32) int, %typecheck(SWIG_TYPECHECK_INT32) int,
long { long {
int *piAddrVar; //SCILAB_INTEGERTYPECHECK(SCI_INT32)
int typearg; SCILAB_TYPECHECK(sci_matrix)
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_matrix) ? 1 : 0; /* TODO: fix this bug. should be int */
} }
%typecheck(SWIG_TYPECHECK_UINT32) unsigned int, %typecheck(SWIG_TYPECHECK_UINT32) unsigned int,
unsigned long { unsigned long {
int *piAddrVar; //SCILAB_INTEGERTYPECHECK(SCI_UINT32)
int typearg; SCILAB_TYPECHECK(sci_matrix)
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_matrix) ? 1 : 0; /* TODO: fix this bug. should be int */
} }
/* TODO: add int64 & uint64 for Scilab 6 */ /* TODO: add int64 & uint64 for Scilab 6 */
%typecheck(SWIG_TYPECHECK_DOUBLE) double { %typecheck(SWIG_TYPECHECK_DOUBLE) double {
int *piAddrVar; SCILAB_TYPECHECK(sci_matrix)
int typearg;
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_matrix) ? 1 : 0;
} }
%typecheck(SWIG_TYPECHECK_FLOAT) float { %typecheck(SWIG_TYPECHECK_FLOAT) float {
int *piAddrVar; SCILAB_TYPECHECK(sci_matrix)
int typearg;
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_matrix) ? 1 : 0;
} }
%typecheck(SWIG_TYPECHECK_STRING) char * { %typecheck(SWIG_TYPECHECK_STRING) char * {
int *piAddrVar; SCILAB_TYPECHECK(sci_strings)
int typearg;
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_strings) ? 1 : 0;
} }
/* Arrays */ /* Arrays */
%typecheck(SWIG_TYPECHECK_CHAR_ARRAY) char [ANY] { %typecheck(SWIG_TYPECHECK_CHAR_ARRAY) char [ANY] {
int *piAddrVar; SCILAB_TYPECHECK(sci_strings)
int typearg;
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_strings) ? 1 : 0;
} }
%typecheck(SWIG_TYPECHECK_INT8_ARRAY) signed char [ANY] { %typecheck(SWIG_TYPECHECK_INT8_ARRAY) signed char [ANY] {
int *piAddrVar; //SCILAB_INTEGERTYPECHECK(SCI_INT8)
int typearg; SCILAB_TYPECHECK(sci_matrix)
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_matrix) ? 1 : 0;
} }
%typecheck(SWIG_TYPECHECK_INT16_ARRAY) unsigned char [ANY], %typecheck(SWIG_TYPECHECK_INT16_ARRAY) unsigned char [ANY],
short [ANY] { short [ANY] {
int *piAddrVar; //SCILAB_INTEGERTYPECHECK(SCI_INT16)
int typearg; SCILAB_TYPECHECK(sci_matrix)
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_matrix) ? 1 : 0;
} }
%typecheck(SWIG_TYPECHECK_INT32_ARRAY) unsigned short [ANY], %typecheck(SWIG_TYPECHECK_INT32_ARRAY) unsigned short [ANY],
int [ANY], int [ANY],
long [ANY] { long [ANY] {
int *piAddrVar; //SCILAB_INTEGERTYPECHECK(SCI_INT32)
int typearg; SCILAB_TYPECHECK(sci_matrix)
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_matrix) ? 1 : 0;
} }
%typecheck(SWIG_TYPECHECK_INT64_ARRAY) unsigned int [ANY], /* TODO: add int64 for Scilab 6 */
unsigned long [ANY] {
int *piAddrVar;
int typearg;
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_matrix) ? 1 : 0;
}
%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) double [ANY]{ %typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) double [ANY]{
int *piAddrVar; SCILAB_TYPECHECK(sci_matrix)
int typearg;
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_matrix) ? 1 : 0;
} }
%typecheck(SWIG_TYPECHECK_FLOAT_ARRAY) float [ANY]{ %typecheck(SWIG_TYPECHECK_FLOAT_ARRAY) float [ANY]{
int *piAddrVar; SCILAB_TYPECHECK(sci_matrix)
int typearg;
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_matrix) ? 1 : 0;
} }
%typecheck(SWIG_TYPECHECK_STRING_ARRAY) char ** { %typecheck(SWIG_TYPECHECK_STRING_ARRAY) char ** {
int *piAddrVar; SCILAB_TYPECHECK(sci_strings)
int typearg;
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_strings) ? 1 : 0;
} }
%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE * { %typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE * {
int *piAddrVar; SCILAB_TYPECHECK(sci_pointer)
int typearg;
sciErr = getVarAddressFromPosition(pvApiCtx, $input, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return 0;
}
getVarType(pvApiCtx, piAddrVar, &typearg);
$1 = (typearg == sci_pointer) ? 1 : 0;
} }
/* ------------------------------------------------------------ /* ------------------------------------------------------------