diff options
Diffstat (limited to 'Examples/scilab')
-rw-r--r-- | Examples/scilab/matrix2/example.c | 30 | ||||
-rw-r--r-- | Examples/scilab/matrix2/example.i | 4 | ||||
-rw-r--r-- | Examples/scilab/matrix2/runme.sci | 8 |
3 files changed, 37 insertions, 5 deletions
diff --git a/Examples/scilab/matrix2/example.c b/Examples/scilab/matrix2/example.c index 476067df9..232c88824 100644 --- a/Examples/scilab/matrix2/example.c +++ b/Examples/scilab/matrix2/example.c @@ -29,12 +29,12 @@ void squareDoubleMatrix(double *inputMatrix, int nbRow, int nbCol, double** resu } } -void getDoubleMatrix(double **resultMatrix, int *nbRowRes, int *nbColRes) +void getDoubleMatrix(int nbRow, int nbCol, double **resultMatrix, int *nbRowRes, int *nbColRes) { int i; int size; - *nbRowRes = 5; - *nbColRes = 3; + *nbRowRes = nbRow; + *nbColRes = nbCol; size = (*nbRowRes) * (*nbColRes); *resultMatrix = (double*) malloc(size * sizeof(double)); for (i=0; i<size; i++) @@ -43,6 +43,30 @@ void getDoubleMatrix(double **resultMatrix, int *nbRowRes, int *nbColRes) } } +void extractDoubleMatrix(double *inputMatrix, int nbRow, int nbCol, int* indexes, int nbIndexes, double **resultMatrix, int *nbRowRes, int *nbColRes) +{ + if (nbIndexes < 0) + { + int sz = nbRow * nbCol; + *nbRowRes = sz; + *nbColRes = 1; + + *resultMatrix = malloc(sz * sizeof(double)); + memcpy(*resultMatrix, inputMatrix, sz * sizeof(double)); + } else { + int i; + + *nbRowRes = nbIndexes; + *nbColRes = 1; + + *resultMatrix = malloc(nbIndexes * sizeof(double)); + for (i = 0; i < nbIndexes; i++) + { + (*resultMatrix)[i] = inputMatrix[indexes[i]]; + } + } +} + // Integer matrix functions int sumIntegerMatrix(int *inputMatrix, int nbRow, int nbCol) diff --git a/Examples/scilab/matrix2/example.i b/Examples/scilab/matrix2/example.i index e37cd116c..1584691cc 100644 --- a/Examples/scilab/matrix2/example.i +++ b/Examples/scilab/matrix2/example.i @@ -4,6 +4,7 @@ %apply (double *IN, int IN_ROWCOUNT, int IN_COLCOUNT) { (double *inputMatrix, int nbRow, int nbCol) } %apply (double **OUT, int *OUT_ROWCOUNT, int *OUT_COLCOUNT) { (double **resultMatrix, int *nbRowRes, int *nbColRes) } +%apply (int *IN, int IN_SIZE) { (int* indexes, int nbIndexes) } %apply (int *IN, int IN_ROWCOUNT, int IN_COLCOUNT) { (int *inputMatrix, int nbRow, int nbCol) } %apply (int **OUT, int *OUT_ROWCOUNT, int *OUT_COLCOUNT) { (int **resultMatrix, int *nbRowRes, int *nbColRes) } @@ -14,7 +15,8 @@ %inline %{ extern double sumDoubleMatrix(double *inputMatrix, int nbRow, int nbCol); extern void squareDoubleMatrix(double *inputMatrix, int nbRow, int nbCol, double **resultMatrix, int *nbRowRes, int *nbColRes); - extern void getDoubleMatrix(double **resultMatrix, int *nbRowRes, int *nbColRes); + extern void getDoubleMatrix(int nbRow, int nbCol,double **resultMatrix, int *nbRowRes, int *nbColRes); + extern void extractDoubleMatrix(double *inputMatrix, int nbRow, int nbCol, int* indexes, int nbIndexes, double **resultMatrix, int *nbRowRes, int *nbColRes); extern int sumIntegerMatrix(int *inputMatrix, int nbRow, int nbCol); extern void squareIntegerMatrix(int *inputMatrix, int nbRow, int nbCol, int **resultMatrix, int *nbRowRes, int *nbColRes); diff --git a/Examples/scilab/matrix2/runme.sci b/Examples/scilab/matrix2/runme.sci index 0af7df4e7..4264991e8 100644 --- a/Examples/scilab/matrix2/runme.sci +++ b/Examples/scilab/matrix2/runme.sci @@ -8,7 +8,7 @@ end // Test lib double matrix functions disp("Call lib function getDoubleMatrix()"); -doubleMatrix = getDoubleMatrix(); +doubleMatrix = getDoubleMatrix(5, 3); disp(doubleMatrix); disp("Call lib function sumDoubleMatrix()"); @@ -19,6 +19,12 @@ disp("Call lib function squareDoubleMatrix()"); sqrd = squareDoubleMatrix(doubleMatrix); disp(sqrd); +disp("Extract various indexes"); +disp(extractDoubleMatrix(doubleMatrix, 2)); +disp(extractDoubleMatrix(doubleMatrix, 2:5)); +disp(extractDoubleMatrix(doubleMatrix, :)); + + // Test lib integer matrix functions |