summaryrefslogtreecommitdiff
path: root/Lib/scilab/sciarray.swg
blob: c00e3837eabf7a115a3940eab3cf9c015128dc0b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/* --------------------------------------------------------------------------
 *
 *  Arrays typemaps
 *
 * --------------------------------------------------------------------------*/

%{
#include <stdio.h>
%}

%define %scilab_asarray_withallocatecopy(TYPEMAPTYPE, FRAGMENTNAME, CTYPE, TEMPDATATYPE)
%typemap(TYPEMAPTYPE, fragment="FRAGMENTNAME") CTYPE {
  size_t i = 0;
  int iRows = 0;
  int iCols = 0;
  TEMPDATATYPE *pTempData = NULL;
  if (FRAGMENTNAME(pvApiCtx, $input, &iRows, &iCols, &pTempData, fname)) {
    return SWIG_ERROR;
  }
  $1 = ($1_ltype)MALLOC(sizeof($*1_ltype) * iRows * iCols);
  for (i = 0; i < iRows * iCols; i++) {
    $1[i] = ($*1_ltype) pTempData[i];
  }
}
%enddef

%define %scilab_asarrayandsize_withcopy(TYPEMAPTYPE, FRAGMENTNAME, CTYPE, TEMPDATATYPE)
%typemap(TYPEMAPTYPE, fragment="FRAGMENTNAME") CTYPE {
  int iRows = 0;
  int iCols = 0;
  TEMPDATATYPE *pTempData = NULL;
  if (FRAGMENTNAME(pvApiCtx, $input, &iRows, &iCols, &pTempData, fname)) {
    return SWIG_ERROR;
  }
  if (iRows*iCols <= $1_dim0) {
    size_t i;
    for (i = 0; i < $1_dim0; i++) {
      $1[i] = ($*1_ltype) pTempData[i];
    }
  }
  else {
    char errmsg[100];
    sprintf(errmsg, "Size of input data (%d) is too big (maximum is %d)",
      iRows*iCols, $1_dim0);
    SWIG_exception_fail(SWIG_OverflowError, errmsg);
  }
}
%enddef

%define %scilab_fromarrayandsize(TYPEMAPTYPE, FRAGMENTNAME, CTYPE)
%typemap(TYPEMAPTYPE, noblock=1, fragment="FRAGMENTNAME") CTYPE {
  %set_output(FRAGMENTNAME(pvApiCtx, $result, 1, $1_dim0, $1));
}
%enddef

%define %scilab_array_typemaps(CTYPE, ASARRAY_FRAGMENT, FROMARRAY_FRAGMENT, TEMPDATATYPE)
  %scilab_asarrayandsize_withcopy(varin, ASARRAY_FRAGMENT, CTYPE[ANY], TEMPDATATYPE);
  %scilab_asarray_withallocatecopy(in, ASARRAY_FRAGMENT, CTYPE[ANY], TEMPDATATYPE);
  %scilab_fromarrayandsize(varout, FROMARRAY_FRAGMENT, CTYPE[ANY]);
  %scilab_fromarrayandsize(out, FROMARRAY_FRAGMENT, CTYPE[ANY]);

  %apply SWIGTYPE[] { CTYPE[] };
  %scilab_asarray_withallocatecopy(in, ASARRAY_FRAGMENT, CTYPE[], TEMPDATATYPE);
%enddef


// Double
%scilab_array_typemaps(double, SWIG_SciDouble_AsDoubleArrayAndSize,
  SWIG_SciDouble_FromDoubleArrayAndSize, double);

// Signed char

%scilab_array_typemaps(signed char, SWIG_SciDoubleOrInt8_AsSignedCharArrayAndSize,
  SWIG_SciDouble_FromSignedCharArrayAndSize, signed char);

// Unsigned char
%scilab_array_typemaps(unsigned char, SWIG_SciDoubleOrUint8_AsUnsignedCharArrayAndSize,
  SWIG_SciDouble_FromUnsignedCharArrayAndSize, unsigned char);

// Short
%scilab_array_typemaps(short, SWIG_SciDoubleOrInt16_AsShortArrayAndSize,
  SWIG_SciDouble_FromShortArrayAndSize, short);

// Unsigned short
%scilab_array_typemaps(unsigned short, SWIG_SciDoubleOrUint16_AsUnsignedShortArrayAndSize,
  SWIG_SciDouble_FromUnsignedShortArrayAndSize, unsigned short);

// Int
%scilab_array_typemaps(int, SWIG_SciDoubleOrInt32_AsIntArrayAndSize,
  SWIG_SciDouble_FromIntArrayAndSize, int);

// Unsigned int
%scilab_array_typemaps(unsigned int, SWIG_SciDoubleOrUint32_AsUnsignedIntArrayAndSize,
  SWIG_SciDouble_FromUnsignedIntArrayAndSize, unsigned int);

// Long
%scilab_array_typemaps(long, SWIG_SciDoubleOrInt32_AsIntArrayAndSize,
  SWIG_SciDouble_FromLongArrayAndSize, int);

// Unsigned long
%scilab_array_typemaps(unsigned long, SWIG_SciDoubleOrUint32_AsUnsignedIntArrayAndSize,
  SWIG_SciDouble_FromUnsignedLongArrayAndSize, unsigned int);

// Float
%scilab_array_typemaps(float, SWIG_SciDouble_AsFloatArrayAndSize,
  SWIG_SciDouble_FromFloatArrayAndSize, float);

// Bool
%scilab_array_typemaps(bool, SWIG_SciBoolean_AsIntArrayAndSize,
  SWIG_SciBoolean_FromBoolArrayAndSize, int);

// Char *
%scilab_array_typemaps(char *, SWIG_SciString_AsCharPtrArrayAndSize,
  SWIG_SciString_FromCharPtrArrayAndSize, char *);