scisequencepointer.swg 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. /*
  2. *
  3. * Scilab list of pointer <-> C++ pointer container
  4. *
  5. */
  6. %include <scilist.swg>
  7. %fragment("<stdint.h>", "header") {
  8. %#include <stdint.h>
  9. }
  10. %fragment(SWIG_AsCheck_Sequence_frag(ptr), "header",
  11. fragment="SWIG_ScilabList") {
  12. SWIGINTERN int
  13. SWIG_AsCheck_Sequence_dec(ptr)(SwigSciObject obj) {
  14. return SWIG_CheckScilabList(obj);
  15. }
  16. }
  17. %fragment(SWIG_AsGet_Sequence_frag(ptr), "header",
  18. fragment="SWIG_ScilabList") {
  19. SWIGINTERN int
  20. SWIG_AsGet_Sequence_dec(ptr)(SwigSciObject obj, int **piSequence) {
  21. return SWIG_GetScilabList(obj, piSequence);
  22. }
  23. }
  24. %fragment(SWIG_AsSize_Sequence_frag(ptr), "header",
  25. fragment="SWIG_ScilabList") {
  26. SWIGINTERN int
  27. SWIG_AsSize_Sequence_dec(ptr)(SwigSciObject obj, int *piSize) {
  28. return SWIG_GetScilabListSize(obj, piSize);
  29. }
  30. }
  31. %fragment(SWIG_FromCreate_Sequence_frag(ptr), "header",
  32. fragment="<stdint.h>") {
  33. SWIGINTERN int
  34. SWIG_FromCreate_Sequence_dec(ptr)(int size, uintptr_t **pSequence) {
  35. *pSequence = new uintptr_t[size];
  36. return *pSequence != NULL ? SWIG_OK : SWIG_ERROR;
  37. }
  38. }
  39. %fragment(SWIG_FromSet_Sequence_frag(ptr), "header",
  40. fragment="<stdint.h>") {
  41. SWIGINTERN SwigSciObject
  42. SWIG_FromSet_Sequence_dec(ptr)(int size, uintptr_t *pSequence) {
  43. SciErr sciErr;
  44. int *piListAddr;
  45. int iVarOut = SWIG_NbInputArgument(pvApiCtx) + SWIG_Scilab_GetOutputPosition();
  46. sciErr = createList(pvApiCtx, iVarOut, size, &piListAddr);
  47. if (sciErr.iErr) {
  48. printError(&sciErr, 0);
  49. return SWIG_ERROR;
  50. }
  51. for (int i=0; i<size; i++) {
  52. sciErr = createPointerInList(pvApiCtx, iVarOut, piListAddr, i + 1, (void *)pSequence[i]);
  53. if (sciErr.iErr) {
  54. printError(&sciErr, 0);
  55. return SWIG_ERROR;
  56. }
  57. }
  58. delete (int*)pSequence;
  59. return SWIG_OK;
  60. }
  61. }
  62. %fragment(SWIG_AsVal_SequenceItem_frag(ptr), "header") {
  63. SWIGINTERN void*
  64. SWIG_AsVal_SequenceItem_dec(ptr)(SwigSciObject obj, int *piSequence, int itemIndex)
  65. {
  66. SciErr sciErr;
  67. int *piItemAddr;
  68. int iType;
  69. void* pItemValue = NULL;
  70. sciErr = getListItemAddress(pvApiCtx, piSequence, itemIndex + 1, &piItemAddr);
  71. if (sciErr.iErr) {
  72. printError(&sciErr, 0);
  73. return NULL;
  74. }
  75. sciErr = getVarType(pvApiCtx, piItemAddr, &iType);
  76. if (sciErr.iErr) {
  77. printError(&sciErr, 0);
  78. return NULL;
  79. }
  80. if (iType != sci_pointer) {
  81. Scierror(SCILAB_API_ARGUMENT_ERROR, _("%s: Wrong type for input argument #%d: A pointer is expected at list item #%d.\n"), SWIG_Scilab_GetFuncName(), obj, itemIndex + 1);
  82. return NULL;
  83. }
  84. sciErr = getPointerInList(pvApiCtx, piSequence, itemIndex + 1, &pItemValue);
  85. if (sciErr.iErr) {
  86. printError(&sciErr, 0);
  87. return NULL;
  88. }
  89. return pItemValue;
  90. }
  91. }
  92. %fragment(SWIG_From_SequenceItem_frag(ptr), "header",
  93. fragment="<stdint.h>") {
  94. SWIGINTERN int
  95. SWIG_From_SequenceItem_dec(ptr)(uintptr_t *pSequence, int iItemIndex, uintptr_t itemValue) {
  96. pSequence[iItemIndex] = itemValue;
  97. return SWIG_OK;
  98. }
  99. }