add array example

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2009-sploving@11478 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Baozeng Ding 2009-07-30 09:41:11 +00:00
commit a19aea6b4b
16 changed files with 456 additions and 240 deletions

View file

@ -50,67 +50,28 @@
$1 = ($1_ltype)*_pstStrings;
}
/* Pointers */
%typemap(in) signed char *(int *piAddrVar, int iRows, int iCols) {
char *_piData;
int index;
%typemap(in) signed char * (int *piAddrVar),
short * (int *piAddrVar),
unsigned char * (int *piAddrVar),
unsigned short * (int *piAddrVar),
int * (int *piAddrVar),
unsigned int * (int *piAddrVar),
long * (int *piAddrVar),
unsigned long * (int *piAddrVar),
double * (int *piAddrVar),
float * (int *piAddrVar) {
void *_piData = NULL;
getVarAddressFromPosition($argnum, &piAddrVar);
getVarDimension(piAddrVar, &iRows, &iCols);
if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) {
Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum);
if (getVarType(piAddrVar) != sci_lufact_pointer) {
Scierror(999, _("%s: Wrong type for input argument #%d: Pointer expected.\n"), fname, $argnum);
}
getMatrixOfInteger8(piAddrVar, &iRows, &iCols, &_piData);
getPointer(piAddrVar, &_piData);
$1 = ($1_ltype)_piData;
}
%typemap(in) short *(int *piAddrVar, int iRows, int iCols),
unsigned char *(int *piAddrVar, int iRows, int iCols) {
short *_piData;
int index;
getVarAddressFromPosition($argnum, &piAddrVar);
getVarDimension(piAddrVar, &iRows, &iCols);
if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) {
Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum);
}
getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData);
$1 = ($1_ltype)_piData;
}
%typemap(in) unsigned short *(int *piAddrVar, int iRows, int iCols),
int *(int *piAddrVar, int iRows, int iCols),
unsigned int *(int *piAddrVar, int iRows, int iCols),
long *(int *piAddrVar, int iRows, int iCols),
unsigned long *(int *piAddrVar, int iRows, int iCols) {
int *_piData;
int index;
getVarAddressFromPosition($argnum, &piAddrVar);
getVarDimension(piAddrVar, &iRows, &iCols);
if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) {
Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum);
}
getMatrixOfInteger32(piAddrVar, &iRows, &iCols, &_piData);
$1 = ($1_ltype)_piData;
}
%typemap(in) double *(int *piAddrVar, int iRows, int iCols),
float *(int *piAddrVar, int iRows, int iCols) {
double *_piData;
int index;
getVarAddressFromPosition($argnum, &piAddrVar);
getVarDimension(piAddrVar, &iRows, &iCols);
if (getVarType(piAddrVar) != sci_matrix || isVarComplex(piAddrVar)) {
Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum);
}
getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData);
$1 = ($1_ltype)_piData;
}
%typemap(in) char *(int *piAddrVar, int iRows, int iCols){
%typemap(in) char * (int *piAddrVar, int iRows, int iCols){
char *_pstStrings;
int _piLength;
getVarAddressFromPosition($argnum, &piAddrVar);
@ -205,8 +166,6 @@
}
}
%typemap(in) char [ANY] (int *piAddrVar, int iRows, int iCols){
char *_pstStrings;
int _piLength;
@ -220,7 +179,6 @@
$1 = strdup(_pstStrings);
}
/* Arrays */
%typemap(in) signed char [ANY][ANY] (int *piAddrVar, int iRows, int iCols) {
char *_piData;
@ -317,20 +275,26 @@
}
}
%typemap(in) SWIGTYPE *(int *piAddrVar, int iRows, int iCols) {
$&1_ltype _piData = ($&1_ltype)0;
%typemap(in) SWIGTYPE * (int *piAddrVar) {
void *_piData = NULL;
getVarAddressFromPosition($argnum, &piAddrVar);
getVarDimension(piAddrVar, &iRows, &iCols);
if (getVarType(piAddrVar) != sci_matrix || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) {
Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum);
if (getVarType(piAddrVar) != sci_lufact_pointer) {
Scierror(999, _("%s: Wrong type for input argument #%d: Pointer expected.\n"), fname, $argnum);
}
getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData);
$1 = ($1_ltype)*_piData;
getPointer(piAddrVar, &_piData);
$1 = ($1_ltype)_piData;
}
%typemap(in) SWIGTYPE {
void *_piData = NULL;
getVarAddressFromPosition($argnum, &piAddrVar);
if (getVarType(piAddrVar) != sci_lufact_pointer) {
Scierror(999, _("%s: Wrong type for input argument #%d: Pointer expected.\n"), fname, $argnum);
}
getPointer(piAddrVar, &_piData);
$1 = *(($&1_ltype)_piData);
}
/* -----------------------------------------------------------------------------
@ -409,48 +373,18 @@
}
/* Pointers */
%typemap(out) signed char *(int iRowsOut, int iColsOut) {
char *temp;
temp = (char *)($result);
iRowsOut = 1;
iColsOut = 1;
createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, temp);
LhsVar(iOutNum) = iVarOut;
}
%typemap(out) short *(int iRowsOut, int iColsOut),
unsigned char *(int iRowsOut, int iColsOut) {
short *temp;
temp = (short *)($result);
iRowsOut = 1;
iColsOut = 1;
createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, temp);
LhsVar(iOutNum) = iVarOut;
}
%typemap(out) int *(int iRowsOut, int iColsOut),
unsigned int *(int iRowsOut, int iColsOut),
unsigned short *(int iRowsOut, int iColsOut),
unsigned long *(int iRowsOut, int iColsOut),
long *(int iRowsOut, int iColsOut) {
int *temp;
temp = (int *)($result);
iRowsOut = 1;
iColsOut = 1;
createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, temp);
LhsVar(iOutNum) = iVarOut;
}
%typemap(out) double *,
%typemap(out) signed char *,
short *,
unsigned char *,
unsigned short *,
int *,
unsigned int *,
long *,
unsigned long *,
double *,
float * {
double *temp;
temp = (double *)($result);
iRowsOut = 1;
iColsOut = 1;
createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, temp);
createPointer(iVarOut, (void *)$result);
LhsVar(iOutNum) = iVarOut;
iOutNum++;
iVarOut++;
}
%typemap(out) char *(int iRowsOut, int iColsOut) {
@ -464,10 +398,13 @@
if ($1) free($1);
}
%typemap(out) SWIGTYPE *(int iRowsOut, int iColsOut) {
iRowsOut = 1;
iColsOut = 1;
createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &$result);
%typemap(out) SWIGTYPE * {
createPointer(iVarOut, (void *)$result);
LhsVar(iOutNum) = iVarOut;
}
%typemap(out) SWIGTYPE {
createPointer(iVarOut, (void *)&$result);
LhsVar(iOutNum) = iVarOut;
}
@ -518,8 +455,11 @@
if (getVarType(piAddrVar) != sci_strings || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) {
Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum);
}
getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings);
getMatrixOfString(piAddrVar, &iRows, &iCols, &_piLength, NULL);
_pstStrings = (char *)malloc(sizeof(char) * _piLength);
getMatrixOfString(piAddrVar, &iRows, &iCols, &_piLength, &_pstStrings);
$1 = strdup(_pstStrings);
free(_pstStrings);
}
%typemap(varin,noblock=1) char [ANY] {
@ -531,84 +471,32 @@
if (getVarType(piAddrVar) != sci_strings || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) {
Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum);
}
getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings);
strcpy($1, _pstStrings);
}
%typemap(varin,noblock=1) int *{
int *_piData;
int index;
getVarAddressFromPosition($argnum, &piAddrVar);
getVarDimension(piAddrVar, &iRows, &iCols);
if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) {
Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum);
}
getMatrixOfInteger32(piAddrVar, &iRows, &iCols, &_piData);
if($1 != NULL) {
free($1);
}
$1 = ($1_ltype)malloc(iRows * iCols * sizeof($*1_ltype));
for(index = 0; index < iRows * iCols; index++) {
$1[index] = ($*1_ltype)_piData[index];
}
getMatrixOfString(piAddrVar, &iRows, &iCols, &_piLength, NULL);
_pstStrings = (char *)malloc(sizeof(char) * _piLength);
getMatrixOfString(piAddrVar, &iRows, &iCols, &_piLength, &_pstStrings);
strcpy($1, _pstStrings);
free(_pstStrings);
}
%typemap(varin,noblock=1) short * {
short *_piData;
int index;
getVarAddressFromPosition($argnum, &piAddrVar);
getVarDimension(piAddrVar, &iRows, &iCols);
if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) {
Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum);
}
getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData);
if($1 != NULL) {
free($1);
}
$1 = ($1_ltype)malloc(iRows * iCols * sizeof($*1_ltype));
for(index = 0; index < iRows * iCols; index++) {
$1[index] = ($*1_ltype)_piData[index];
}
}
%typemap(varin,noblock=1) double *,
%typemap(varin,noblock=1) signed char *,
short *,
unsigned char *,
unsigned short *,
int *,
unsigned int *,
long *,
unsigned long *,
double *,
float * {
double *_piData;
int index;
void *_piData = NULL;
getVarAddressFromPosition($argnum, &piAddrVar);
getVarDimension(piAddrVar, &iRows, &iCols);
if (getVarType(piAddrVar) == sci_matrix ){
if(!isVarComplex(piAddrVar)) {
isComplex = 0;
getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData);
if($1 != NULL) {
free($1);
}
$1 = ($1_ltype)malloc(iRows * iCols * sizeof($*1_ltype));
for(index = 0; index < iRows * iCols; index++){
$1[index] = ($*1_ltype)_piData[index];
}
}
else {
isComplex = 1;
double *_pdblImg;
getComplexMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData, &_pdblImg);
if($1 != NULL) {
free($1);
}
$1 = ($1_ltype)malloc(2 * iRows * iCols * sizeof($*1_ltype));
for(index = 0; index < iRows * iCols; index++){
$1[index] = ($*1_ltype)_piData[index];
$1[index + iRows * iCols] = (double)_pdblImg[index];
}
}
}
else {
Scierror(999, _("%s: Wrong type for input argument #%d: double matrix expected.\n"), fname, $argnum);
if (getVarType(piAddrVar) != sci_lufact_pointer) {
Scierror(999, _("%s: Wrong type for input argument #%d: Pointer expected.\n"), fname, $argnum);
}
getPointer(piAddrVar, &_piData);
$1 = ($1_ltype)_piData;
}
%typemap(varin,noblock=1) char ** {
@ -634,6 +522,27 @@
$1 = _pstStrings;
}
%typemap(varin,noblock=1) SWIGTYPE *(int *piAddrVar) {
void *_piData = NULL;
getVarAddressFromPosition($argnum, &piAddrVar);
if (getVarType(piAddrVar) != sci_lufact_pointer) {
Scierror(999, _("%s: Wrong type for input argument #%d: Pointer expected.\n"), fname, $argnum);
}
getPointer(piAddrVar, &_piData);
$1 = ($1_ltype)_piData;
}
%typemap(varin,nobloack=1) SWIGTYPE {
void *_piData = NULL;
getVarAddressFromPosition($argnum, &piAddrVar);
if (getVarType(piAddrVar) != sci_lufact_pointer) {
Scierror(999, _("%s: Wrong type for input argument #%d: Pointer expected.\n"), fname, $argnum);
}
getPointer(piAddrVar, &_piData);
$1 = *(($&1_ltype)_piData);
}
/* -----------------------------------------------------------------------------
* --- Variable output ---
@ -690,35 +599,23 @@
LhsVar(iOutNum) = iVarOut;
}
%typemap(varout,noblock=1) char *{
%typemap(varout,noblock=1) char * {
createMatrixOfString(iVarOut, iRowsOut, iColsOut, &($result));
LhsVar(iOutNum) = iVarOut;
}
%typemap(varout,noblock=1) int *{
createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, $result);
LhsVar(iOutNum) = iVarOut;
if($result != NULL)
free($result);
}
%typemap(varout,noblock=1) short *{
createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, $result);
LhsVar(iOutNum) = iVarOut;
if($result != NULL)
free($result);
}
%typemap(varout,noblock=1) double *,
%typemap(varout,noblock=1) signed char *,
short *,
unsigned char *,
unsigned short *,
int *,
unsigned int *,
long *,
unsigned long *,
double *,
float * {
if(isComplex) {
createComplexMatrixOfDouble(iVarOut, iRowsOut, iColsOut, $result, &$result[iRowsOut * iColsOut]);
LhsVar(iOutNum) = iVarOut;
}
else {
createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, $result);
LhsVar(iOutNum) = iVarOut;
}
createPointer(iVarOut, (void *)$result);
LhsVar(iOutNum) = iVarOut;
}
%typemap(varout,noblock=1) char [ANY] {
@ -738,9 +635,17 @@
LhsVar(iOutNum) = iVarOut;
}
%typemap(varout,noblock=1) SWIGTYPE * {
createPointer(iVarOut, (void *)$result);
LhsVar(iOutNum) = iVarOut;
}
%typemap(varout,noblock=1) SWIGTYPE {
createPointer(iVarOut, (void *)&$result);
LhsVar(iOutNum) = iVarOut;
}
/* ------------------------------------------------------------
* Enums mapped as integer values
* ------------------------------------------------------------ */