sciunsignedchar.swg 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. /*
  2. * C-type: unsigned char
  3. * Scilab type: double or uint8
  4. */
  5. %fragment(SWIG_AsVal_frag(unsigned char), "header", fragment="SWIG_SciDoubleOrUint8_AsUnsignedChar", fragment="<limits.h>") {
  6. #define SWIG_AsVal_unsigned_SS_char(scilabValue, valuePointer) SWIG_SciDoubleOrUint8_AsUnsignedChar(pvApiCtx, scilabValue, valuePointer, SWIG_Scilab_GetFuncName())
  7. }
  8. %fragment("SWIG_SciDoubleOrUint8_AsUnsignedChar", "header") {
  9. SWIGINTERN int
  10. SWIG_SciDoubleOrUint8_AsUnsignedChar(void *pvApiCtx, int iVar, unsigned char *pucValue, 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 char *pucData = 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 (pucValue) {
  30. sciErr = getMatrixOfIntegerPrecision(pvApiCtx, piAddrVar, &iPrec);
  31. if (sciErr.iErr) {
  32. printError(&sciErr, 0);
  33. return SWIG_ERROR;
  34. }
  35. if (iPrec != SCI_UINT8) {
  36. Scierror(SCILAB_API_ARGUMENT_ERROR, _("%s: Wrong type for input argument #%d: A 8-bit unsigned integer or a double expected.\n"), fname, iVar);
  37. return SWIG_ERROR;
  38. }
  39. sciErr = getMatrixOfUnsignedInteger8(pvApiCtx, piAddrVar, &iRows, &iCols, &pucData);
  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 8-bit unsigned integer or a double expected.\n"), fname, iVar);
  46. return SWIG_ERROR;
  47. }
  48. *pucValue = *pucData;
  49. }
  50. }
  51. else if (iType == sci_matrix) {
  52. if (pucValue) {
  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 8-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 8-bit unsigned integer.\n"), fname, iVar);
  67. return SWIG_ValueError;
  68. }
  69. if ((dValue < 0) || (dValue > UCHAR_MAX)) {
  70. Scierror(SCILAB_API_ARGUMENT_ERROR, _("%s: Overflow error for input argument #%d: The double value cannot be converted to a 8-bit unsigned integer.\n"), fname, iVar);
  71. return SWIG_OverflowError;
  72. }
  73. *pucValue = (unsigned char) dValue;
  74. }
  75. }
  76. else {
  77. Scierror(SCILAB_API_ARGUMENT_ERROR, _("%s: Wrong type for input argument #%d: A 8-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 char), "header", fragment="SWIG_SciDouble_FromUnsignedChar") {
  84. #define SWIG_From_unsigned_SS_char(value) SWIG_SciDouble_FromUnsignedChar(pvApiCtx, SWIG_Scilab_GetOutputPosition(), value)
  85. }
  86. %fragment("SWIG_SciDouble_FromUnsignedChar", "header") {
  87. SWIGINTERN int
  88. SWIG_SciDouble_FromUnsignedChar(void *pvApiCtx, int iVarOut, unsigned char ucValue) {
  89. if (createScalarDouble(pvApiCtx,
  90. SWIG_NbInputArgument(pvApiCtx) + iVarOut, (double) ucValue))
  91. return SWIG_ERROR;
  92. return SWIG_OK;
  93. }
  94. }
  95. /*
  96. * C-type: unsigned char[]
  97. * Scilab type: double or uint8 matrix
  98. */
  99. %fragment("SWIG_SciDoubleOrUint8_AsUnsignedCharArrayAndSize", "header") {
  100. SWIGINTERN int
  101. SWIG_SciDoubleOrUint8_AsUnsignedCharArrayAndSize(void *pvApiCtx, int iVar, int *iRows, int *iCols, unsigned char **pucValue, char *fname) {
  102. SciErr sciErr;
  103. int iType = 0;
  104. int iPrec = 0;
  105. int *piAddrVar = NULL;
  106. sciErr = getVarAddressFromPosition(pvApiCtx, iVar, &piAddrVar);
  107. if (sciErr.iErr) {
  108. printError(&sciErr, 0);
  109. return SWIG_ERROR;
  110. }
  111. sciErr = getVarType(pvApiCtx, piAddrVar, &iType);
  112. if (sciErr.iErr) {
  113. printError(&sciErr, 0);
  114. return SWIG_ERROR;
  115. }
  116. if (iType == sci_matrix) {
  117. double *pdData = NULL;
  118. int size = 0;
  119. int i;
  120. sciErr = getMatrixOfDouble(pvApiCtx, piAddrVar, iRows, iCols, &pdData);
  121. if (sciErr.iErr) {
  122. printError(&sciErr, 0);
  123. return SWIG_ERROR;
  124. }
  125. size = (*iRows) * (*iCols);
  126. *pucValue = (unsigned char*) malloc(size * sizeof(int*));
  127. for (i = 0; i < size; i++)
  128. (*pucValue)[i] = (unsigned char) pdData[i];
  129. }
  130. else if (iType == sci_ints) {
  131. sciErr = getMatrixOfIntegerPrecision(pvApiCtx, piAddrVar, &iPrec);
  132. if (sciErr.iErr) {
  133. printError(&sciErr, 0);
  134. return SWIG_ERROR;
  135. }
  136. if (iPrec != SCI_UINT8) {
  137. Scierror(SCILAB_API_ARGUMENT_ERROR, _("%s: Wrong type for input argument #%d: A 8-bit unsigned integer or a double vector expected.\n"), fname, iVar);
  138. return SWIG_ERROR;
  139. }
  140. sciErr = getMatrixOfUnsignedInteger8(pvApiCtx, piAddrVar, iRows, iCols, pucValue);
  141. if (sciErr.iErr) {
  142. printError(&sciErr, 0);
  143. return SWIG_ERROR;
  144. }
  145. }
  146. else {
  147. Scierror(SCILAB_API_ARGUMENT_ERROR, _("%s: Wrong type for input argument #%d: A 8-bit unsigned integer or a double vector expected.\n"), fname, iVar);
  148. return SWIG_ERROR;
  149. }
  150. return SWIG_OK;
  151. }
  152. }
  153. %fragment("SWIG_SciDouble_FromUnsignedCharArrayAndSize", "header") {
  154. SWIGINTERN int
  155. SWIG_SciDouble_FromUnsignedCharArrayAndSize(void *pvApiCtx, int iVarOut, int iRows, int iCols, const unsigned char *pucValues) {
  156. SciErr sciErr;
  157. double *pdValues = NULL;
  158. int i;
  159. pdValues = (double*) malloc(iRows * iCols * sizeof(double));
  160. for (i=0; i<iRows * iCols; i++)
  161. pdValues[i] = pucValues[i];
  162. sciErr = createMatrixOfDouble(pvApiCtx, SWIG_NbInputArgument(pvApiCtx) + iVarOut, iRows, iCols, pdValues);
  163. if (sciErr.iErr) {
  164. printError(&sciErr, 0);
  165. free(pdValues);
  166. return SWIG_ERROR;
  167. }
  168. free(pdValues);
  169. return SWIG_OK;
  170. }
  171. }