PageRenderTime 41ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Examples/test-suite/list_vector.i

#
Swig | 153 lines | 127 code | 22 blank | 4 comment | 0 complexity | 57be3d35b9744f80c86dbad4472ee859 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. /* -*- c -*- */
  2. %module list_vector
  3. %include "list-vector.i"
  4. %multiple_values
  5. /* The ordinary, well behaved multi-typemap. */
  6. double sum_list(int LISTLENINPUT, double *LISTINPUT);
  7. double sum_vector(int VECTORLENINPUT, double *VECTORINPUT);
  8. void one_to_seven_list(int *LISTLENOUTPUT, int **LISTOUTPUT);
  9. void one_to_seven_vector(int *VECTORLENOUTPUT, int **VECTOROUTPUT);
  10. /* Variants with `size_t' instead of `int' length. */
  11. double sum_list2(size_t LISTLENINPUT, double *LISTINPUT);
  12. double sum_vector2(size_t VECTORLENINPUT, double *VECTORINPUT);
  13. void one_to_seven_list2(size_t *LISTLENOUTPUT, int **LISTOUTPUT);
  14. void one_to_seven_vector2(size_t *VECTORLENOUTPUT, int **VECTOROUTPUT);
  15. /* Parallel variants */
  16. double sum_lists(int PARALLEL_LISTLENINPUT,
  17. double *PARALLEL_LISTINPUT,
  18. int *PARALLEL_LISTINPUT,
  19. int *PARALLEL_LISTINPUT);
  20. double sum_lists2(size_t PARALLEL_LISTLENINPUT,
  21. double *PARALLEL_LISTINPUT,
  22. int *PARALLEL_LISTINPUT,
  23. int *PARALLEL_LISTINPUT);
  24. void produce_lists(int *PARALLEL_VECTORLENOUTPUT,
  25. int **PARALLEL_VECTOROUTPUT,
  26. int **PARALLEL_VECTOROUTPUT,
  27. double **PARALLEL_VECTOROUTPUT);
  28. %{
  29. double sum_list(int length, double *item)
  30. {
  31. int i;
  32. double res = 0.0;
  33. for (i = 0; i<length; i++)
  34. res += item[i];
  35. return res;
  36. }
  37. double sum_list2(size_t length, double *item)
  38. {
  39. size_t i;
  40. double res = 0.0;
  41. for (i = 0; i<length; i++)
  42. res += item[i];
  43. return res;
  44. }
  45. double sum_vector(int length, double *item)
  46. {
  47. int i;
  48. double res = 0.0;
  49. for (i = 0; i<length; i++)
  50. res += item[i];
  51. return res;
  52. }
  53. double sum_vector2(size_t length, double *item)
  54. {
  55. size_t i;
  56. double res = 0.0;
  57. for (i = 0; i<length; i++)
  58. res += item[i];
  59. return res;
  60. }
  61. void one_to_seven_list(int *length_p, int **list_p)
  62. {
  63. int i;
  64. *length_p = 7;
  65. *list_p = malloc(7 * sizeof(int));
  66. for (i = 0; i<7; i++)
  67. (*list_p)[i] = i+1;
  68. }
  69. void one_to_seven_list2(size_t *length_p, int **list_p)
  70. {
  71. size_t i;
  72. *length_p = 7;
  73. *list_p = malloc(7 * sizeof(int));
  74. for (i = 0; i<7; i++)
  75. (*list_p)[i] = i+1;
  76. }
  77. void one_to_seven_vector(int *length_p, int **list_p)
  78. {
  79. int i;
  80. *length_p = 7;
  81. *list_p = malloc(7 * sizeof(int));
  82. for (i = 0; i<7; i++)
  83. (*list_p)[i] = i+1;
  84. }
  85. void one_to_seven_vector2(size_t *length_p, int **list_p)
  86. {
  87. size_t i;
  88. *length_p = 7;
  89. *list_p = malloc(7 * sizeof(int));
  90. for (i = 0; i<7; i++)
  91. (*list_p)[i] = i+1;
  92. }
  93. double sum_lists(int len,
  94. double *list1,
  95. int *list2,
  96. int *list3)
  97. {
  98. int i;
  99. double sum = 0.0;
  100. for (i = 0; i<len; i++)
  101. sum += (list1[i] + list2[i] + list3[i]);
  102. return sum;
  103. }
  104. double sum_lists2(size_t len,
  105. double *list1,
  106. int *list2,
  107. int *list3)
  108. {
  109. size_t i;
  110. double sum = 0.0;
  111. for (i = 0; i<len; i++)
  112. sum += (list1[i] + list2[i] + list3[i]);
  113. return sum;
  114. }
  115. void produce_lists(int *len_p,
  116. int **list1_p,
  117. int **list2_p,
  118. double **list3_p)
  119. {
  120. int i;
  121. *len_p = 5;
  122. *list1_p = malloc(sizeof(int) * 5);
  123. *list2_p = malloc(sizeof(int) * 5);
  124. *list3_p = malloc(sizeof(double) * 5);
  125. for (i = 0; i<5; i++) {
  126. (*list1_p)[i] = i;
  127. (*list2_p)[i] = i*i;
  128. (*list3_p)[i] = 1.5*i;
  129. }
  130. }
  131. %}