example of a missing feature. Thanks sploving ;)

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2009-sploving@11867 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Sylvestre Ledru 2010-02-23 17:57:49 +00:00
commit b585321009
6 changed files with 150 additions and 0 deletions

View file

@ -0,0 +1,13 @@
Removes:
builder.sce => should be generated by swig
main.c => this only shows how the code can be used when matrixlib.c is a lib.
sci_sumitems.c => should be generated by swig
Missing:
matrixlib.i
Makefile
Usage:
scilab -nwni -f builder.sce
exec loader.sce
exec runme.sci

View file

@ -0,0 +1,6 @@
files=['matrixlib.c','sci_sumitems.c'];//,'sci_getValues.c'];
ilib_build('build_c',['sumitems','sci_sumitems';'generateValues','sci_getValues'],files,[]);

View file

@ -0,0 +1,24 @@
double sumitems(double *first, int nbRow, int nbCol);
void main(){
/**
* --> myMatrix=[ 103 3 1 12;0 0 2043 1];
* --> sumitems(myMatrix);
* 32
*/
double B[] = {1,3,4,9,2,8,3,2}; /* Declare the matrix */
int rowB = 2, colB = 4;
printf("sumitems: %6.2f\n",sumitems(B, rowB, colB));
/**
* --> myOtherMatrix=generateValues();
* --> size(myOtherMatrix);
*/
int numberRow, numberCol, i;
double * matrix=getValues(&numberRow, &numberCol);
printf("Matrix of size [%d,%d]",numberRow, numberCol);
for(i=0; i < numberRow*numberCol; i++)
{
printf("A[%d] = %5.2f\n",i,matrix[i]);
}
}

View file

@ -0,0 +1,19 @@
double sumitems(double *first, int nbRow, int nbCol) {
int i;
double total;
for (i=0; i<(nbRow*nbCol); i++) {
total+=first[i];
}
printf("plop: %6.2f\n",total);
return total;
}
double* getValues(int *numberOfRow, int *numberOfCol) {
*numberOfRow=23; *numberOfCol=3;
double *tempMatrix = (double*)malloc(sizeof(double) * *numberOfRow * *numberOfCol);
int i;
for (i=0; i<((*numberOfRow)*(*numberOfCol)); i++) {
tempMatrix[i]=i*2;
}
return tempMatrix;
}

View file

@ -0,0 +1,6 @@
myMatrix=[ 103 3 1 12;0 0 2043 1];
sumitems(myMatrix);
myOtherMatrix=generateValues();
size(myOtherMatrix)
disp(myOtherMatrix);

View file

@ -0,0 +1,82 @@
#include "api_scilab.h"
#include "stack-c.h"
double sumitems(double *first, int nbRow, int nbCol);
double* getValues(int *numberOfRow, int *numberOfCol);
int sci_sumitems(char *fname,unsigned long fname_len)
{
int iRows = 0;
int iCols = 0;
int *piAddr = NULL;
double* pdblReal = NULL;
CheckRhs(1,1);
CheckLhs(1,1);
SciErr sciErr;
//get variable address of the first input argument
sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
if(sciErr.iErr)
{
printError(&sciErr, 0);
return 0;
}
sciErr = getMatrixOfDouble(pvApiCtx, piAddr, &iRows, &iCols, &pdblReal);
double plop = sumitems(pdblReal, iRows, iCols);
printf("plop: %6.2f\n",plop);
/*
* Here, it is a scalar but it could be also a matrix... don't assume it
* it will be always 1x1
*/
int iRowsReturn=1;
int iColReturn=1;
sciErr = createMatrixOfDouble(pvApiCtx, Rhs + 1, iRowsReturn, iColReturn, &plop);
if(sciErr.iErr)
{
printError(&sciErr, 0);
return 0;
}
LhsVar(1) = Rhs + 1;
return 0;
}
int sci_getValues(char *fname,unsigned long fname_len)
{
int iRows = 0;
int iCols = 0;
int *piAddr = NULL;
double* pdblReal = NULL;
CheckRhs(0,0);
CheckLhs(1,1);
SciErr sciErr;
int numberRow, numberCol, i;
double * matrix=getValues(&numberRow, &numberCol);
sciErr = createMatrixOfDouble(pvApiCtx, Rhs + 1, numberRow, numberCol, matrix);
if(sciErr.iErr)
{
printError(&sciErr, 0);
return 0;
}
LhsVar(1) = Rhs + 1;
return 0;
}