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") {
|
||||
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;
|
||||
int i = 0;
|
||||
int *piAddrVar = NULL;
|
||||
int iRows = 0;
|
||||
int iCols = 0;
|
||||
int* piLength = NULL;
|
||||
|
||||
if ((_charPtrArray == NULL) || (_charPtrArraySize == NULL)) {
|
||||
return SWIG_ERROR;
|
||||
}
|
||||
|
||||
sciErr = getVarAddressFromPosition(_pvApiCtx, _iVar, &piAddrVar);
|
||||
if (sciErr.iErr) {
|
||||
printError(&sciErr, 0);
|
||||
return SWIG_ERROR;
|
||||
}
|
||||
|
||||
sciErr = getMatrixOfString(_pvApiCtx, piAddrVar, &iRows, &iCols, NULL, NULL);
|
||||
sciErr = getMatrixOfString(_pvApiCtx, piAddrVar, _iRows, _iCols, NULL, NULL);
|
||||
if (sciErr.iErr) {
|
||||
printError(&sciErr, 0);
|
||||
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) {
|
||||
printError(&sciErr, 0);
|
||||
return SWIG_ERROR;
|
||||
}
|
||||
|
||||
*_charPtrArray = (char**) malloc(iRows * iCols * sizeof(char*));
|
||||
for(i = 0 ; i < iRows * iCols ; i++)
|
||||
*_charPtrArray = (char**) malloc((*_iRows) * (*_iCols) * sizeof(char*));
|
||||
for(i = 0 ; i < (*_iRows) * (*_iCols); i++)
|
||||
{
|
||||
(*_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) {
|
||||
printError(&sciErr, 0);
|
||||
return SWIG_ERROR;
|
||||
}
|
||||
*_charPtrArraySize = iRows * iCols;
|
||||
|
||||
free(piLength);
|
||||
|
||||
return SWIG_OK;
|
||||
}
|
||||
}
|
||||
|
||||
%fragment("SWIG_SciString_FromCharPtrArray", "header") {
|
||||
%fragment("SWIG_SciString_FromCharPtrArrayAndSize", "header") {
|
||||
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;
|
||||
|
||||
if (_charPtrArray == NULL) {
|
||||
return SWIG_ERROR;
|
||||
}
|
||||
|
||||
sciErr = createMatrixOfString(_pvApiCtx, SWIG_NbInputArgument(pvApiCtx) + _iVarOut, 1, _charPtrArraySize, _charPtrArray);
|
||||
sciErr = createMatrixOfString(_pvApiCtx, SWIG_NbInputArgument(pvApiCtx) + _iVarOut, _iRows, _iCols, _charPtrArray);
|
||||
if (sciErr.iErr) {
|
||||
printError(&sciErr, 0);
|
||||
return SWIG_ERROR;
|
||||
|
|
|
|||
|
|
@ -5,16 +5,103 @@
|
|||
|
||||
%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;
|
||||
}
|
||||
}
|
||||
|
||||
// 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)
|
||||
|
||||
%typemap(in, numinputs=0) (char*** vectorOut, int* vectorOutSize)
|
||||
|
|
@ -35,9 +122,9 @@
|
|||
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());
|
||||
}
|
||||
|
|
@ -51,7 +138,7 @@
|
|||
|
||||
%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;
|
||||
}
|
||||
|
|
@ -69,9 +156,9 @@
|
|||
$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());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,8 +36,9 @@ SWIG_AsCheck_Sequence_dec(std::string)(SwigSciObject _obj) {
|
|||
|
||||
SWIGINTERN int
|
||||
SWIG_AsGet_Sequence_dec(std::string)(SwigSciObject _obj, char ***_pSequence) {
|
||||
int iSize;
|
||||
return (SWIG_SciString_AsCharPtrArrayAndSize(pvApiCtx, _obj, _pSequence, &iSize, SWIG_Scilab_GetFname()));
|
||||
int iRows = 0;
|
||||
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
|
||||
SWIG_AsSize_Sequence_dec(std::string)(SwigSciObject _obj, int *_piSize) {
|
||||
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_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_SciString_FromCharPtrArray") {
|
||||
fragment="SWIG_SciString_FromCharPtrArrayAndSize") {
|
||||
|
||||
SWIGINTERN SwigSciObject
|
||||
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;
|
||||
return obj;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue