PageRenderTime 36ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Lib/octave/octprimtypes.swg

#
Unknown | 232 lines | 204 code | 28 blank | 0 comment | 0 complexity | 26144d9e233d4d6d0ea46553113ca332 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. /* ------------------------------------------------------------
  2. * Primitive Types
  3. * ------------------------------------------------------------ */
  4. // boolean
  5. %fragment(SWIG_From_frag(bool),"header") {
  6. SWIGINTERNINLINE octave_value
  7. SWIG_From_dec(bool)(bool value)
  8. {
  9. return octave_value(value);
  10. }
  11. }
  12. %fragment(SWIG_AsVal_frag(bool),"header",
  13. fragment=SWIG_AsVal_frag(long)) {
  14. SWIGINTERN int
  15. SWIG_AsVal_dec(bool)(const octave_value& ov, bool *val)
  16. {
  17. if (!ov.is_bool_type())
  18. return SWIG_ERROR;
  19. if (val)
  20. *val = ov.bool_value();
  21. return SWIG_OK;
  22. }
  23. }
  24. // long
  25. %fragment(SWIG_From_frag(long),"header") {
  26. SWIGINTERNINLINE octave_value SWIG_From_dec(long) (long value)
  27. {
  28. return octave_value(value);
  29. }
  30. }
  31. %fragment(SWIG_AsVal_frag(long),"header") {
  32. SWIGINTERN int SWIG_AsVal_dec(long)(const octave_value& ov, long* val)
  33. {
  34. if (!ov.is_scalar_type())
  35. return SWIG_TypeError;
  36. if (ov.is_complex_scalar())
  37. return SWIG_TypeError;
  38. if (ov.is_double_type()||ov.is_single_type()) {
  39. double v=ov.double_value();
  40. if (v!=floor(v))
  41. return SWIG_TypeError;
  42. }
  43. if (val)
  44. *val = ov.long_value();
  45. return SWIG_OK;
  46. }
  47. }
  48. // unsigned long
  49. %fragment(SWIG_From_frag(unsigned long),"header") {
  50. SWIGINTERNINLINE octave_value SWIG_From_dec(unsigned long) (unsigned long value)
  51. {
  52. return octave_value(value);
  53. }
  54. }
  55. %fragment(SWIG_AsVal_frag(unsigned long),"header") {
  56. SWIGINTERN int SWIG_AsVal_dec(unsigned long)(const octave_value& ov, unsigned long* val)
  57. {
  58. if (!ov.is_scalar_type())
  59. return SWIG_TypeError;
  60. if (ov.is_complex_scalar())
  61. return SWIG_TypeError;
  62. if (ov.is_double_type()||ov.is_single_type()) {
  63. double v=ov.double_value();
  64. if (v<0)
  65. return SWIG_OverflowError;
  66. if (v!=floor(v))
  67. return SWIG_TypeError;
  68. }
  69. if (ov.is_int8_type()||ov.is_int16_type()||
  70. ov.is_int32_type()) {
  71. long v=ov.long_value();
  72. if (v<0)
  73. return SWIG_OverflowError;
  74. }
  75. if (ov.is_int64_type()) {
  76. long long v=ov.int64_scalar_value().value();
  77. if (v<0)
  78. return SWIG_OverflowError;
  79. }
  80. if (val)
  81. *val = ov.ulong_value();
  82. return SWIG_OK;
  83. }
  84. }
  85. // long long
  86. %fragment(SWIG_From_frag(long long),"header") {
  87. SWIGINTERNINLINE octave_value SWIG_From_dec(long long) (long long value)
  88. {
  89. return octave_int64(value);
  90. }
  91. }
  92. %fragment(SWIG_AsVal_frag(long long),"header") {
  93. SWIGINTERN int SWIG_AsVal_dec(long long)(const octave_value& ov, long long* val)
  94. {
  95. if (!ov.is_scalar_type())
  96. return SWIG_TypeError;
  97. if (ov.is_complex_scalar())
  98. return SWIG_TypeError;
  99. if (ov.is_double_type()||ov.is_single_type()) {
  100. double v=ov.double_value();
  101. if (v!=floor(v))
  102. return SWIG_TypeError;
  103. }
  104. if (val) {
  105. if (ov.is_int64_type())
  106. *val = ov.int64_scalar_value().value();
  107. else if (ov.is_uint64_type())
  108. *val = ov.uint64_scalar_value().value();
  109. else
  110. *val = ov.long_value();
  111. }
  112. return SWIG_OK;
  113. }
  114. }
  115. %fragment(SWIG_From_frag(unsigned long long),"header") {
  116. SWIGINTERNINLINE octave_value SWIG_From_dec(unsigned long long) (unsigned long long value)
  117. {
  118. return octave_uint64(value);
  119. }
  120. }
  121. %fragment(SWIG_AsVal_frag(unsigned long long),"header") {
  122. SWIGINTERN int SWIG_AsVal_dec(unsigned long long)(const octave_value& ov, unsigned long long* val)
  123. {
  124. if (!ov.is_scalar_type())
  125. return SWIG_TypeError;
  126. if (ov.is_complex_scalar())
  127. return SWIG_TypeError;
  128. if (ov.is_double_type()||ov.is_single_type()) {
  129. double v=ov.double_value();
  130. if (v<0)
  131. return SWIG_OverflowError;
  132. if (v!=floor(v))
  133. return SWIG_TypeError;
  134. }
  135. if (ov.is_int8_type()||ov.is_int16_type()||
  136. ov.is_int32_type()) {
  137. long v=ov.long_value();
  138. if (v<0)
  139. return SWIG_OverflowError;
  140. }
  141. if (ov.is_int64_type()) {
  142. long long v=ov.int64_scalar_value().value();
  143. if (v<0)
  144. return SWIG_OverflowError;
  145. }
  146. if (val) {
  147. if (ov.is_int64_type())
  148. *val = ov.int64_scalar_value().value();
  149. else if (ov.is_uint64_type())
  150. *val = ov.uint64_scalar_value().value();
  151. else
  152. *val = ov.long_value();
  153. }
  154. return SWIG_OK;
  155. }
  156. }
  157. // double
  158. %fragment(SWIG_From_frag(double),"header") {
  159. SWIGINTERNINLINE octave_value SWIG_From_dec(double) (double value)
  160. {
  161. return octave_value(value);
  162. }
  163. }
  164. %fragment(SWIG_AsVal_frag(double),"header") {
  165. SWIGINTERN int SWIG_AsVal_dec(double)(const octave_value& ov, double* val)
  166. {
  167. if (!ov.is_scalar_type())
  168. return SWIG_TypeError;
  169. if (ov.is_complex_scalar())
  170. return SWIG_TypeError;
  171. if (val)
  172. *val = ov.double_value();
  173. return SWIG_OK;
  174. }
  175. }
  176. // const char* (strings)
  177. %fragment("SWIG_AsCharPtrAndSize","header") {
  178. SWIGINTERN int
  179. SWIG_AsCharPtrAndSize(octave_value ov, char** cptr, size_t* psize, int *alloc)
  180. {
  181. if (ov.is_cell() && ov.rows() == 1 && ov.columns() == 1)
  182. ov = ov.cell_value()(0);
  183. if (!ov.is_string())
  184. return SWIG_TypeError;
  185. std::string str=ov.string_value();
  186. size_t len=str.size();
  187. char* cstr=(char*)str.c_str();
  188. if (alloc) {
  189. *cptr = %new_copy_array(cstr, len + 1, char);
  190. *alloc = SWIG_NEWOBJ;
  191. } else if (cptr)
  192. *cptr = cstr;
  193. if (psize)
  194. *psize = len + 1;
  195. return SWIG_OK;
  196. }
  197. }
  198. %fragment("SWIG_FromCharPtrAndSize","header",fragment="SWIG_pchar_descriptor") {
  199. SWIGINTERNINLINE octave_value
  200. SWIG_FromCharPtrAndSize(const char* carray, size_t size)
  201. {
  202. return std::string(carray,carray+size);
  203. }
  204. }