sciunsignedshort.swg 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. /*
  2. * C-type: unsigned short
  3. * Scilab type: double or uint16
  4. */
  5. %fragment(SWIG_AsVal_frag(unsigned short), "header", fragment="SWIG_SciDoubleOrUint16_AsUnsignedShort", fragment="<limits.h>") {
  6. %#define SWIG_AsVal_unsigned_SS_short(scilabValue, valuePointer) SWIG_SciDoubleOrUint16_AsUnsignedShort(pvApiCtx, scilabValue, valuePointer, SWIG_Scilab_GetFuncName())
  7. }
  8. %fragment("SWIG_SciDoubleOrUint16_AsUnsignedShort", "header") {
  9. SWIGINTERN int
  10. SWIG_SciDoubleOrUint16_AsUnsignedShort(void *pvApiCtx, int iVar, unsigned short *pusValue, char *fname) {
  11. SciErr sciErr;
  12. int iType = 0;
  13. int iRows = 0;
  14. int iCols = 0;
  15. int iPrec = 0;
  16. int *piAddrVar = NULL;
  17. unsigned short *pusData = NULL;
  18. sciErr = getVarAddressFromPosition(pvApiCtx, iVar, &piAddrVar);
  19. if (sciErr.iErr) {
  20. printError(&sciErr, 0);
  21. return SWIG_ERROR;
  22. }
  23. sciErr = getVarType(pvApiCtx, piAddrVar, &iType);
  24. if (sciErr.iErr) {
  25. printError(&sciErr, 0);
  26. return SWIG_ERROR;
  27. }
  28. if (iType == sci_ints) {
  29. if (pusValue) {
  30. sciErr = getMatrixOfIntegerPrecision(pvApiCtx, piAddrVar, &iPrec);
  31. if (sciErr.iErr) {
  32. printError(&sciErr, 0);
  33. return SWIG_ERROR;
  34. }
  35. if (iPrec != SCI_UINT16) {
  36. Scierror(SCILAB_API_ARGUMENT_ERROR, _("%s: Wrong type for input argument #%d: A 16-bit unsigned integer or a double expected.\n"), fname, iVar);
  37. return SWIG_ERROR;
  38. }
  39. sciErr = getMatrixOfUnsignedInteger16(pvApiCtx, piAddrVar, &iRows, &iCols, &pusData);
  40. if (sciErr.iErr) {
  41. printError(&sciErr, 0);
  42. return SWIG_ERROR;
  43. }
  44. if (iRows * iCols != 1) {
  45. Scierror(SCILAB_API_ARGUMENT_ERROR, _("%s: Wrong size for input argument #%d: A 16-bit unsigned integer or a double expected.\n"), fname, iVar);
  46. return SWIG_ERROR;
  47. }
  48. *pusValue = *pusData;
  49. }
  50. }
  51. else if (iType == sci_matrix) {
  52. if (pusValue) {
  53. double *pdData = NULL;
  54. double dValue = 0.0f;
  55. sciErr = getMatrixOfDouble(pvApiCtx, piAddrVar, &iRows, &iCols, &pdData);
  56. if (sciErr.iErr) {
  57. printError(&sciErr, 0);
  58. return SWIG_ERROR;
  59. }
  60. if (iRows * iCols != 1) {
  61. Scierror(SCILAB_API_ARGUMENT_ERROR, _("%s: Wrong size for input argument #%d: A 16-bit unsigned integer or a double expected.\n"), fname, iVar);
  62. return SWIG_TypeError;
  63. }
  64. dValue = *pdData;
  65. if (dValue != floor(dValue)) {
  66. Scierror(SCILAB_API_ARGUMENT_ERROR, _("%s: Incorrect value for input argument #%d: The double value cannot be converted to a 16-bit unsigned integer.\n"), fname, iVar);
  67. return SWIG_ValueError;
  68. }
  69. if ((dValue < 0) || (dValue > USHRT_MAX)) {
  70. Scierror(SCILAB_API_ARGUMENT_ERROR, _("%s: Overflow error for input argument #%d: The double value cannot be converted to a 16-bit unsigned integer.\n"), fname, iVar);
  71. return SWIG_OverflowError;
  72. }
  73. *pusValue = (unsigned short) dValue;
  74. }
  75. }
  76. else {
  77. Scierror(SCILAB_API_ARGUMENT_ERROR, _("%s: Wrong type for input argument #%d: A 16-bit unsigned integer or a double expected.\n"), fname, iVar);
  78. return SWIG_ERROR;
  79. }
  80. return SWIG_OK;
  81. }
  82. }
  83. %fragment(SWIG_From_frag(unsigned short), "header", fragment="SWIG_SciDouble_FromUnsignedShort") {
  84. %#define SWIG_From_unsigned_SS_short(scilabValue) SWIG_SciDouble_FromUnsignedShort(pvApiCtx, SWIG_Scilab_GetOutputPosition(), scilabValue, SWIG_Scilab_GetFuncName())
  85. }
  86. %fragment("SWIG_SciDouble_FromUnsignedShort", "header") {
  87. SWIGINTERN int
  88. SWIG_SciDouble_FromUnsignedShort(void *pvApiCtx, int iVarOut, unsigned short usValue, char *fname) {
  89. if (createScalarDouble(pvApiCtx, SWIG_NbInputArgument(pvApiCtx) + iVarOut, (double) usValue))
  90. return SWIG_ERROR;
  91. return SWIG_OK;
  92. }
  93. }
  94. /*
  95. * C-type: unsigned short[]
  96. * Scilab type: uint16 vector
  97. */
  98. %fragment("SWIG_SciDoubleOrUint16_AsUnsignedShortArrayAndSize", "header") {
  99. SWIGINTERN int
  100. SWIG_SciDoubleOrUint16_AsUnsignedShortArrayAndSize(void *pvApiCtx, int iVar, int *iRows, int *iCols, unsigned short **pusValue, char *fname) {
  101. SciErr sciErr;
  102. int iType = 0;
  103. int iPrec = 0;
  104. int *piAddrVar = NULL;
  105. sciErr = getVarAddressFromPosition(pvApiCtx, iVar, &piAddrVar);
  106. if (sciErr.iErr) {
  107. printError(&sciErr, 0);
  108. return SWIG_ERROR;
  109. }
  110. sciErr = getVarType(pvApiCtx, piAddrVar, &iType);
  111. if (sciErr.iErr) {
  112. printError(&sciErr, 0);
  113. return SWIG_ERROR;
  114. }
  115. if (iType == sci_matrix) {
  116. double *pdData = NULL;
  117. int size = 0;
  118. int i;
  119. sciErr = getMatrixOfDouble(pvApiCtx, piAddrVar, iRows, iCols, &pdData);
  120. if (sciErr.iErr) {
  121. printError(&sciErr, 0);
  122. return SWIG_ERROR;
  123. }
  124. size = (*iRows) * (*iCols);
  125. *pusValue = (unsigned short*) malloc(size * sizeof(int*));
  126. for (i = 0; i < size; i++)
  127. (*pusValue)[i] = (unsigned short) pdData[i];
  128. }
  129. else if (iType == sci_ints) {
  130. sciErr = getMatrixOfIntegerPrecision(pvApiCtx, piAddrVar, &iPrec);
  131. if (sciErr.iErr) {
  132. printError(&sciErr, 0);
  133. return SWIG_ERROR;
  134. }
  135. if (iPrec != SCI_UINT16) {
  136. Scierror(SCILAB_API_ARGUMENT_ERROR, _("%s: Wrong type for input argument #%d: A 16-bit unsigned integer or a double vector expected.\n"), fname, iVar);
  137. return SWIG_ERROR;
  138. }
  139. sciErr = getMatrixOfUnsignedInteger16(pvApiCtx, piAddrVar, iRows, iCols, pusValue);
  140. if (sciErr.iErr) {
  141. printError(&sciErr, 0);
  142. return SWIG_ERROR;
  143. }
  144. }
  145. else {
  146. Scierror(SCILAB_API_ARGUMENT_ERROR, _("%s: Wrong type for input argument #%d: A 16-bit unsigned integer or a double vector expected.\n"), fname, iVar);
  147. return SWIG_ERROR;
  148. }
  149. return SWIG_OK;
  150. }
  151. }
  152. %fragment("SWIG_SciDouble_FromUnsignedShortArrayAndSize", "header") {
  153. SWIGINTERN int
  154. SWIG_SciDouble_FromUnsignedShortArrayAndSize(void *pvApiCtx, int iVarOut, int iRows, int iCols, unsigned short *pusValues) {
  155. SciErr sciErr;
  156. double *pdValues = NULL;
  157. int i;
  158. pdValues = (double*) malloc(iRows * iCols * sizeof(double));
  159. for (i=0; i<iRows * iCols; i++)
  160. pdValues[i] = pusValues[i];
  161. sciErr = createMatrixOfDouble(pvApiCtx, SWIG_NbInputArgument(pvApiCtx) + iVarOut, iRows, iCols, pdValues);
  162. if (sciErr.iErr) {
  163. printError(&sciErr, 0);
  164. free(pdValues);
  165. return SWIG_ERROR;
  166. }
  167. free(pdValues);
  168. return SWIG_OK;
  169. }
  170. }