sciarray.swg 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /* --------------------------------------------------------------------------
  2. *
  3. * Arrays typemaps
  4. *
  5. * --------------------------------------------------------------------------*/
  6. %{
  7. #include <stdio.h>
  8. %}
  9. %define %scilab_asarray_withallocatecopy(TYPEMAPTYPE, FRAGMENTNAME, CTYPE, TEMPDATATYPE)
  10. %typemap(TYPEMAPTYPE, fragment="FRAGMENTNAME") CTYPE {
  11. size_t i = 0;
  12. int iRows = 0;
  13. int iCols = 0;
  14. TEMPDATATYPE *pTempData = NULL;
  15. if (FRAGMENTNAME(pvApiCtx, $input, &iRows, &iCols, &pTempData, fname)) {
  16. return SWIG_ERROR;
  17. }
  18. $1 = ($1_ltype)MALLOC(sizeof($*1_ltype) * iRows * iCols);
  19. for (i = 0; i < iRows * iCols; i++) {
  20. $1[i] = ($*1_ltype) pTempData[i];
  21. }
  22. }
  23. %enddef
  24. %define %scilab_asarrayandsize_withcopy(TYPEMAPTYPE, FRAGMENTNAME, CTYPE, TEMPDATATYPE)
  25. %typemap(TYPEMAPTYPE, fragment="FRAGMENTNAME") CTYPE {
  26. int iRows = 0;
  27. int iCols = 0;
  28. TEMPDATATYPE *pTempData = NULL;
  29. if (FRAGMENTNAME(pvApiCtx, $input, &iRows, &iCols, &pTempData, fname)) {
  30. return SWIG_ERROR;
  31. }
  32. if (iRows*iCols <= $1_dim0) {
  33. size_t i;
  34. for (i = 0; i < $1_dim0; i++) {
  35. $1[i] = ($*1_ltype) pTempData[i];
  36. }
  37. }
  38. else {
  39. char errmsg[100];
  40. sprintf(errmsg, "Size of input data (%d) is too big (maximum is %d)",
  41. iRows*iCols, $1_dim0);
  42. SWIG_exception_fail(SWIG_OverflowError, errmsg);
  43. }
  44. }
  45. %enddef
  46. %define %scilab_fromarrayandsize(TYPEMAPTYPE, FRAGMENTNAME, CTYPE)
  47. %typemap(TYPEMAPTYPE, noblock=1, fragment="FRAGMENTNAME") CTYPE {
  48. %set_output(FRAGMENTNAME(pvApiCtx, $result, 1, $1_dim0, $1));
  49. }
  50. %enddef
  51. %define %scilab_array_typemaps(CTYPE, ASARRAY_FRAGMENT, FROMARRAY_FRAGMENT, TEMPDATATYPE)
  52. %scilab_asarrayandsize_withcopy(varin, ASARRAY_FRAGMENT, CTYPE[ANY], TEMPDATATYPE);
  53. %scilab_asarray_withallocatecopy(in, ASARRAY_FRAGMENT, CTYPE[ANY], TEMPDATATYPE);
  54. %scilab_fromarrayandsize(varout, FROMARRAY_FRAGMENT, CTYPE[ANY]);
  55. %scilab_fromarrayandsize(out, FROMARRAY_FRAGMENT, CTYPE[ANY]);
  56. %apply SWIGTYPE[] { CTYPE[] };
  57. %scilab_asarray_withallocatecopy(in, ASARRAY_FRAGMENT, CTYPE[], TEMPDATATYPE);
  58. %enddef
  59. // Double
  60. %scilab_array_typemaps(double, SWIG_SciDouble_AsDoubleArrayAndSize,
  61. SWIG_SciDouble_FromDoubleArrayAndSize, double);
  62. // Signed char
  63. %scilab_array_typemaps(signed char, SWIG_SciDoubleOrInt8_AsSignedCharArrayAndSize,
  64. SWIG_SciDouble_FromSignedCharArrayAndSize, signed char);
  65. // Unsigned char
  66. %scilab_array_typemaps(unsigned char, SWIG_SciDoubleOrUint8_AsUnsignedCharArrayAndSize,
  67. SWIG_SciDouble_FromUnsignedCharArrayAndSize, unsigned char);
  68. // Short
  69. %scilab_array_typemaps(short, SWIG_SciDoubleOrInt16_AsShortArrayAndSize,
  70. SWIG_SciDouble_FromShortArrayAndSize, short);
  71. // Unsigned short
  72. %scilab_array_typemaps(unsigned short, SWIG_SciDoubleOrUint16_AsUnsignedShortArrayAndSize,
  73. SWIG_SciDouble_FromUnsignedShortArrayAndSize, unsigned short);
  74. // Int
  75. %scilab_array_typemaps(int, SWIG_SciDoubleOrInt32_AsIntArrayAndSize,
  76. SWIG_SciDouble_FromIntArrayAndSize, int);
  77. // Unsigned int
  78. %scilab_array_typemaps(unsigned int, SWIG_SciDoubleOrUint32_AsUnsignedIntArrayAndSize,
  79. SWIG_SciDouble_FromUnsignedIntArrayAndSize, unsigned int);
  80. // Long
  81. %scilab_array_typemaps(long, SWIG_SciDoubleOrInt32_AsIntArrayAndSize,
  82. SWIG_SciDouble_FromLongArrayAndSize, int);
  83. // Unsigned long
  84. %scilab_array_typemaps(unsigned long, SWIG_SciDoubleOrUint32_AsUnsignedIntArrayAndSize,
  85. SWIG_SciDouble_FromUnsignedLongArrayAndSize, unsigned int);
  86. // Float
  87. %scilab_array_typemaps(float, SWIG_SciDouble_AsFloatArrayAndSize,
  88. SWIG_SciDouble_FromFloatArrayAndSize, float);
  89. // Bool
  90. %scilab_array_typemaps(bool, SWIG_SciBoolean_AsIntArrayAndSize,
  91. SWIG_SciBoolean_FromBoolArrayAndSize, int);
  92. // Char *
  93. %scilab_array_typemaps(char *, SWIG_SciString_AsCharPtrArrayAndSize,
  94. SWIG_SciString_FromCharPtrArrayAndSize, char *);