scisignedchar.swg 5.8 KB

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