scilab: char* array matrix and vector typemaps
This commit is contained in:
parent
d4168ef47c
commit
89d4dac99d
3 changed files with 114 additions and 35 deletions
|
|
@ -179,67 +179,55 @@ SWIG_SciString_FromCharPtr(void *_pvApiCtx, int _iVarOut, const char *_pchValue)
|
||||||
|
|
||||||
%fragment("SWIG_SciString_AsCharPtrArrayAndSize", "header") {
|
%fragment("SWIG_SciString_AsCharPtrArrayAndSize", "header") {
|
||||||
SWIGINTERN int
|
SWIGINTERN int
|
||||||
SWIG_SciString_AsCharPtrArrayAndSize(void *_pvApiCtx, int _iVar, char ***_charPtrArray, int* _charPtrArraySize, char *_fname) {
|
SWIG_SciString_AsCharPtrArrayAndSize(void *_pvApiCtx, int _iVar, int *_iRows, int *_iCols, char ***_charPtrArray, char *_fname) {
|
||||||
SciErr sciErr;
|
SciErr sciErr;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int *piAddrVar = NULL;
|
int *piAddrVar = NULL;
|
||||||
int iRows = 0;
|
|
||||||
int iCols = 0;
|
|
||||||
int* piLength = NULL;
|
int* piLength = NULL;
|
||||||
|
|
||||||
if ((_charPtrArray == NULL) || (_charPtrArraySize == NULL)) {
|
|
||||||
return SWIG_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 = getMatrixOfString(_pvApiCtx, piAddrVar, &iRows, &iCols, NULL, NULL);
|
sciErr = getMatrixOfString(_pvApiCtx, piAddrVar, _iRows, _iCols, NULL, NULL);
|
||||||
if (sciErr.iErr) {
|
if (sciErr.iErr) {
|
||||||
printError(&sciErr, 0);
|
printError(&sciErr, 0);
|
||||||
return SWIG_ERROR;
|
return SWIG_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
piLength = (int*) malloc(iRows * iCols * sizeof(int));
|
piLength = (int*) malloc((*_iRows) * (*_iCols) * sizeof(int));
|
||||||
|
|
||||||
sciErr = getMatrixOfString(_pvApiCtx, piAddrVar, &iRows, &iCols, piLength, NULL);
|
sciErr = getMatrixOfString(_pvApiCtx, piAddrVar, _iRows, _iCols, piLength, NULL);
|
||||||
if (sciErr.iErr) {
|
if (sciErr.iErr) {
|
||||||
printError(&sciErr, 0);
|
printError(&sciErr, 0);
|
||||||
return SWIG_ERROR;
|
return SWIG_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
*_charPtrArray = (char**) malloc(iRows * iCols * sizeof(char*));
|
*_charPtrArray = (char**) malloc((*_iRows) * (*_iCols) * sizeof(char*));
|
||||||
for(i = 0 ; i < iRows * iCols ; i++)
|
for(i = 0 ; i < (*_iRows) * (*_iCols); i++)
|
||||||
{
|
{
|
||||||
(*_charPtrArray)[i] = (char*) malloc(sizeof(char) * (piLength[i] + 1));
|
(*_charPtrArray)[i] = (char*) malloc(sizeof(char) * (piLength[i] + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
sciErr = getMatrixOfString(_pvApiCtx, piAddrVar, &iRows, &iCols, piLength, *_charPtrArray);
|
sciErr = getMatrixOfString(_pvApiCtx, piAddrVar, _iRows, _iCols, piLength, *_charPtrArray);
|
||||||
if (sciErr.iErr) {
|
if (sciErr.iErr) {
|
||||||
printError(&sciErr, 0);
|
printError(&sciErr, 0);
|
||||||
return SWIG_ERROR;
|
return SWIG_ERROR;
|
||||||
}
|
}
|
||||||
*_charPtrArraySize = iRows * iCols;
|
|
||||||
|
|
||||||
free(piLength);
|
free(piLength);
|
||||||
|
|
||||||
return SWIG_OK;
|
return SWIG_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
%fragment("SWIG_SciString_FromCharPtrArray", "header") {
|
%fragment("SWIG_SciString_FromCharPtrArrayAndSize", "header") {
|
||||||
SWIGINTERN int
|
SWIGINTERN int
|
||||||
SWIG_SciString_FromCharPtrArray(void *_pvApiCtx, int _iVarOut, char **_charPtrArray, int _charPtrArraySize) {
|
SWIG_SciString_FromCharPtrArrayAndSize(void *_pvApiCtx, int _iVarOut, int _iRows, int _iCols, char **_charPtrArray) {
|
||||||
SciErr sciErr;
|
SciErr sciErr;
|
||||||
|
|
||||||
if (_charPtrArray == NULL) {
|
sciErr = createMatrixOfString(_pvApiCtx, SWIG_NbInputArgument(pvApiCtx) + _iVarOut, _iRows, _iCols, _charPtrArray);
|
||||||
return SWIG_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
sciErr = createMatrixOfString(_pvApiCtx, SWIG_NbInputArgument(pvApiCtx) + _iVarOut, 1, _charPtrArraySize, _charPtrArray);
|
|
||||||
if (sciErr.iErr) {
|
if (sciErr.iErr) {
|
||||||
printError(&sciErr, 0);
|
printError(&sciErr, 0);
|
||||||
return SWIG_ERROR;
|
return SWIG_ERROR;
|
||||||
|
|
|
||||||
|
|
@ -5,16 +5,103 @@
|
||||||
|
|
||||||
%include <scichar.swg>
|
%include <scichar.swg>
|
||||||
|
|
||||||
// in (char** vectorIn, int vectorInSize)
|
// in (char** matrixIn, int matrixInRowCount, int matrixInColCount)
|
||||||
|
|
||||||
%typemap(in, fragment="SWIG_SciString_AsCharPtrArrayAndSize") (char** vectorIn, int vectorInSize)
|
%typemap(in, fragment="SWIG_SciString_AsCharPtrArrayAndSize") (char** matrixIn, int matrixInRowCount, int matrixInColCount)
|
||||||
{
|
{
|
||||||
if (SWIG_SciString_AsCharPtrArrayAndSize(pvApiCtx, $input, &$1, &$2, fname) != SWIG_OK)
|
if (SWIG_SciString_AsCharPtrArrayAndSize(pvApiCtx, $input, &$2, &$3, &$1, fname) != SWIG_OK)
|
||||||
{
|
{
|
||||||
return SWIG_ERROR;
|
return SWIG_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// in (int matrixInRowCount, int matrixInColCount, char** matrixIn)
|
||||||
|
|
||||||
|
%typemap(in, fragment="SWIG_SciString_AsCharPtrArrayAndSize") (int matrixInRowCount, int matrixInColCount, char** matrixIn)
|
||||||
|
{
|
||||||
|
if (SWIG_SciString_AsCharPtrArrayAndSize(pvApiCtx, $input, &$1, &$2, &$3, fname) != SWIG_OK)
|
||||||
|
{
|
||||||
|
return SWIG_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// in (char** vectorIn, int vectorInSize)
|
||||||
|
|
||||||
|
%typemap(in, fragment="SWIG_SciString_AsCharPtrArrayAndSize") (char** vectorIn, int vectorInSize)
|
||||||
|
{
|
||||||
|
if (SWIG_SciString_AsCharPtrArrayAndSize(pvApiCtx, $input, 1, &$2, &$1, fname) != SWIG_OK)
|
||||||
|
{
|
||||||
|
return SWIG_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// out (char*** matrixOut, int* matrixOutRowCount, int* matrixOutColCount)
|
||||||
|
|
||||||
|
%typemap(in, numinputs=0) (char*** matrixOut, int* matrixOutRowCount, int* matrixOutColCount)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
%typemap(arginit) (char*** matrixOut, int* matrixOutRowCount, int* matrixOutColCount)
|
||||||
|
{
|
||||||
|
$1 = (char***) malloc(sizeof(char**));
|
||||||
|
$2 = (int*) malloc(sizeof(int));
|
||||||
|
$3 = (int*) malloc(sizeof(int));
|
||||||
|
}
|
||||||
|
|
||||||
|
%typemap(argout, fragment="SWIG_SciString_FromCharPtrArrayAndSize") (char*** matrixOut, int* matrixOutRowCount, int* matrixOutColCount)
|
||||||
|
{
|
||||||
|
if (SWIG_SciString_FromCharPtrArrayAndSize(pvApiCtx, SWIG_Scilab_GetOutputPosition(), *$2, *$3, *$1) == SWIG_OK)
|
||||||
|
{
|
||||||
|
SWIG_Scilab_SetOutput(pvApiCtx, SWIG_NbInputArgument(pvApiCtx) + SWIG_Scilab_GetOutputPosition());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return SWIG_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
%typemap(freearg) (char*** matrixOut, int* matrixOutRowCount, int* matrixOutColCount)
|
||||||
|
{
|
||||||
|
free(*$1);
|
||||||
|
free($1);
|
||||||
|
free($2);
|
||||||
|
free($3);
|
||||||
|
}
|
||||||
|
|
||||||
|
// out (int* matrixOutRowCount, int* matrixOutColCount, char*** matrixOut)
|
||||||
|
|
||||||
|
%typemap(in, numinputs=0) (int* matrixOutRowCount, int* matrixOutColCount, char*** matrixOut)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
%typemap(arginit) (int* matrixOutRowCount, int* matrixOutColCount, char*** matrixOut)
|
||||||
|
{
|
||||||
|
$1 = (char***) malloc(sizeof(char**));
|
||||||
|
$2 = (int*) malloc(sizeof(int));
|
||||||
|
$3 = (int**) malloc(sizeof(int*));
|
||||||
|
}
|
||||||
|
|
||||||
|
%typemap(argout, fragment="SWIG_SciString_FromCharPtrArrayAndSize") (int* matrixOutRowCount, int* matrixOutColCount, char*** matrixOut)
|
||||||
|
{
|
||||||
|
if (SWIG_SciString_FromCharPtrArrayAndSize(pvApiCtx, SWIG_Scilab_GetOutputPosition(), *$1, *$2, *$3) == SWIG_OK)
|
||||||
|
{
|
||||||
|
SWIG_Scilab_SetOutput(pvApiCtx, SWIG_NbInputArgument(pvApiCtx) + SWIG_Scilab_GetOutputPosition());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return SWIG_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
%typemap(freearg) (int* matrixOutRowCount, int* matrixOutColCount, char*** matrixOut)
|
||||||
|
{
|
||||||
|
free($1);
|
||||||
|
free($2);
|
||||||
|
free(*$3);
|
||||||
|
free($3);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// out (char*** vectorOut, int* vectorOutSize)
|
// out (char*** vectorOut, int* vectorOutSize)
|
||||||
|
|
||||||
%typemap(in, numinputs=0) (char*** vectorOut, int* vectorOutSize)
|
%typemap(in, numinputs=0) (char*** vectorOut, int* vectorOutSize)
|
||||||
|
|
@ -35,9 +122,9 @@
|
||||||
free($2);
|
free($2);
|
||||||
}
|
}
|
||||||
|
|
||||||
%typemap(argout, fragment="SWIG_SciString_FromCharPtrArray") (char*** vectorOut, int* vectorOutSize)
|
%typemap(argout, fragment="SWIG_SciString_FromCharPtrArrayAndSize") (char*** vectorOut, int* vectorOutSize)
|
||||||
{
|
{
|
||||||
if (SWIG_SciString_FromCharPtrArray(pvApiCtx, SWIG_Scilab_GetOutputPosition(), *$1, *$2) == SWIG_OK)
|
if (SWIG_SciString_FromCharPtrArray(pvApiCtx, SWIG_Scilab_GetOutputPosition(), 1, *$2, *$1) == SWIG_OK)
|
||||||
{
|
{
|
||||||
SWIG_Scilab_SetOutput(pvApiCtx, SWIG_NbInputArgument(pvApiCtx) + SWIG_Scilab_GetOutputPosition());
|
SWIG_Scilab_SetOutput(pvApiCtx, SWIG_NbInputArgument(pvApiCtx) + SWIG_Scilab_GetOutputPosition());
|
||||||
}
|
}
|
||||||
|
|
@ -51,7 +138,7 @@
|
||||||
|
|
||||||
%typemap(in, fragment="SWIG_SciString_AsCharPtrArrayAndSize") (int vectorInSize, char** vectorIn)
|
%typemap(in, fragment="SWIG_SciString_AsCharPtrArrayAndSize") (int vectorInSize, char** vectorIn)
|
||||||
{
|
{
|
||||||
if (SWIG_SciString_AsCharPtrArrayAndSize(pvApiCtx, $input, &$2, &$1, fname) != SWIG_OK)
|
if (SWIG_SciString_AsCharPtrArrayAndSize(pvApiCtx, $input, 1, &$1, &$2, fname) != SWIG_OK)
|
||||||
{
|
{
|
||||||
return SWIG_ERROR;
|
return SWIG_ERROR;
|
||||||
}
|
}
|
||||||
|
|
@ -69,9 +156,9 @@
|
||||||
$2 = (char***) malloc(sizeof(char**));
|
$2 = (char***) malloc(sizeof(char**));
|
||||||
}
|
}
|
||||||
|
|
||||||
%typemap(argout, fragment="SWIG_SciString_FromCharPtrArray") (int* vectorOutSize, char*** vectorOut)
|
%typemap(argout, fragment="SWIG_SciString_FromCharPtrArrayAndSize") (int* vectorOutSize, char*** vectorOut)
|
||||||
{
|
{
|
||||||
if (SWIG_SciString_FromCharPtrArray(pvApiCtx, SWIG_Scilab_GetOutputPosition(), *$2, *$1) == SWIG_OK)
|
if (SWIG_SciString_FromCharPtrArray(pvApiCtx, SWIG_Scilab_GetOutputPosition(), 1, *$1, *$2) == SWIG_OK)
|
||||||
{
|
{
|
||||||
SWIG_Scilab_SetOutput(pvApiCtx, SWIG_NbInputArgument(pvApiCtx) + SWIG_Scilab_GetOutputPosition());
|
SWIG_Scilab_SetOutput(pvApiCtx, SWIG_NbInputArgument(pvApiCtx) + SWIG_Scilab_GetOutputPosition());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,9 @@ SWIG_AsCheck_Sequence_dec(std::string)(SwigSciObject _obj) {
|
||||||
|
|
||||||
SWIGINTERN int
|
SWIGINTERN int
|
||||||
SWIG_AsGet_Sequence_dec(std::string)(SwigSciObject _obj, char ***_pSequence) {
|
SWIG_AsGet_Sequence_dec(std::string)(SwigSciObject _obj, char ***_pSequence) {
|
||||||
int iSize;
|
int iRows = 0;
|
||||||
return (SWIG_SciString_AsCharPtrArrayAndSize(pvApiCtx, _obj, _pSequence, &iSize, SWIG_Scilab_GetFname()));
|
int iCols = 0;
|
||||||
|
return (SWIG_SciString_AsCharPtrArrayAndSize(pvApiCtx, _obj, &iRows, &iCols, _pSequence, SWIG_Scilab_GetFname()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -47,7 +48,10 @@ SWIG_AsGet_Sequence_dec(std::string)(SwigSciObject _obj, char ***_pSequence) {
|
||||||
SWIGINTERN int
|
SWIGINTERN int
|
||||||
SWIG_AsSize_Sequence_dec(std::string)(SwigSciObject _obj, int *_piSize) {
|
SWIG_AsSize_Sequence_dec(std::string)(SwigSciObject _obj, int *_piSize) {
|
||||||
char **pstMatrix;
|
char **pstMatrix;
|
||||||
if (SWIG_SciString_AsCharPtrArrayAndSize(pvApiCtx, _obj, &pstMatrix, _piSize, SWIG_Scilab_GetFname()) == SWIG_OK) {
|
int iCols = 0;
|
||||||
|
int iRows = 0;
|
||||||
|
if (SWIG_SciString_AsCharPtrArrayAndSize(pvApiCtx, _obj, &iRows, &iCols, &pstMatrix, SWIG_Scilab_GetFname()) == SWIG_OK) {
|
||||||
|
*_piSize = iRows * iCols;
|
||||||
return SWIG_OK;
|
return SWIG_OK;
|
||||||
}
|
}
|
||||||
return SWIG_ERROR;
|
return SWIG_ERROR;
|
||||||
|
|
@ -64,11 +68,11 @@ SWIG_FromCreate_Sequence_dec(std::string)(int _size, char ***_sequence) {
|
||||||
}
|
}
|
||||||
|
|
||||||
%fragment(SWIG_FromSet_Sequence_frag(std::string), "header",
|
%fragment(SWIG_FromSet_Sequence_frag(std::string), "header",
|
||||||
fragment="SWIG_SciString_FromCharPtrArray") {
|
fragment="SWIG_SciString_FromCharPtrArrayAndSize") {
|
||||||
|
|
||||||
SWIGINTERN SwigSciObject
|
SWIGINTERN SwigSciObject
|
||||||
SWIG_FromSet_Sequence_dec(std::string)(int _size, char **_sequence) {
|
SWIG_FromSet_Sequence_dec(std::string)(int _size, char **_sequence) {
|
||||||
SwigSciObject obj = SWIG_SciString_FromCharPtrArray(pvApiCtx, SWIG_Scilab_GetOutputPosition(), _sequence, _size);
|
SwigSciObject obj = SWIG_SciString_FromCharPtrArrayAndSize(pvApiCtx, SWIG_Scilab_GetOutputPosition(), 1, _size, _sequence);
|
||||||
delete (char **)_sequence;
|
delete (char **)_sequence;
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue