PageRenderTime 1114ms CodeModel.GetById 31ms RepoModel.GetById 1ms app.codeStats 0ms

/trunk/Lib/octave/boost_shared_ptr.i

#
Swig | 307 lines | 281 code | 26 blank | 0 comment | 0 complexity | 31f8ff37dac8960e8150ef81705e3d10 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. %include <shared_ptr.i>
  2. // Language specific macro implementing all the customisations for handling the smart pointer
  3. %define SWIG_SHARED_PTR_TYPEMAPS(CONST, TYPE...)
  4. // %naturalvar is as documented for member variables
  5. %naturalvar TYPE;
  6. %naturalvar SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >;
  7. // destructor wrapper customisation
  8. %feature("unref") TYPE
  9. //"if (debug_shared) { cout << \"deleting use_count: \" << (*smartarg1).use_count() << \" [\" << (boost::get_deleter<SWIG_null_deleter>(*smartarg1) ? std::string(\"CANNOT BE DETERMINED SAFELY\") : ( (*smartarg1).get() ? (*smartarg1)->getValue() : std::string(\"NULL PTR\") )) << \"]\" << endl << flush; }\n"
  10. "(void)arg1; delete smartarg1;"
  11. // Typemap customisations...
  12. // plain value
  13. %typemap(in) CONST TYPE (void *argp, int res = 0) {
  14. int newmem = 0;
  15. res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
  16. if (!SWIG_IsOK(res)) {
  17. %argument_fail(res, "$type", $symname, $argnum);
  18. }
  19. if (!argp) {
  20. %argument_nullref("$type", $symname, $argnum);
  21. } else {
  22. $1 = *(%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *)->get());
  23. if (newmem & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
  24. }
  25. }
  26. %typemap(out) CONST TYPE {
  27. %set_output(SWIG_NewPointerObj(new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(new $1_ltype(($1_ltype &)$1)), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
  28. }
  29. %typemap(varin) CONST TYPE {
  30. void *argp = 0;
  31. int newmem = 0;
  32. int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
  33. if (!SWIG_IsOK(res)) {
  34. %variable_fail(res, "$type", "$name");
  35. }
  36. if (!argp) {
  37. %argument_nullref("$type", $symname, $argnum);
  38. } else {
  39. $1 = *(%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *)->get());
  40. if (newmem & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
  41. }
  42. }
  43. %typemap(varout) CONST TYPE {
  44. %set_varoutput(SWIG_NewPointerObj(new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(new $1_ltype(($1_ltype &)$1)), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
  45. }
  46. // plain pointer
  47. // Note: $disown not implemented as it will lead to a memory leak of the shared_ptr instance
  48. %typemap(in) CONST TYPE * (void *argp = 0, int res = 0, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > tempshared, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartarg = 0) {
  49. int newmem = 0;
  50. res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
  51. if (!SWIG_IsOK(res)) {
  52. %argument_fail(res, "$type", $symname, $argnum);
  53. }
  54. if (newmem & SWIG_CAST_NEW_MEMORY) {
  55. tempshared = *%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
  56. delete %reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
  57. $1 = %const_cast(tempshared.get(), $1_ltype);
  58. } else {
  59. smartarg = %reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
  60. $1 = %const_cast((smartarg ? smartarg->get() : 0), $1_ltype);
  61. }
  62. }
  63. %typemap(out, fragment="SWIG_null_deleter") CONST TYPE * {
  64. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = $1 ? new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_$owner) : 0;
  65. %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), $owner | SWIG_POINTER_OWN));
  66. }
  67. %typemap(varin) CONST TYPE * {
  68. void *argp = 0;
  69. int newmem = 0;
  70. int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
  71. if (!SWIG_IsOK(res)) {
  72. %variable_fail(res, "$type", "$name");
  73. }
  74. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > tempshared;
  75. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartarg = 0;
  76. if (newmem & SWIG_CAST_NEW_MEMORY) {
  77. tempshared = *%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
  78. delete %reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
  79. $1 = %const_cast(tempshared.get(), $1_ltype);
  80. } else {
  81. smartarg = %reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
  82. $1 = %const_cast((smartarg ? smartarg->get() : 0), $1_ltype);
  83. }
  84. }
  85. %typemap(varout, fragment="SWIG_null_deleter") CONST TYPE * {
  86. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = $1 ? new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_0) : 0;
  87. %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
  88. }
  89. // plain reference
  90. %typemap(in) CONST TYPE & (void *argp = 0, int res = 0, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > tempshared) {
  91. int newmem = 0;
  92. res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
  93. if (!SWIG_IsOK(res)) {
  94. %argument_fail(res, "$type", $symname, $argnum);
  95. }
  96. if (!argp) { %argument_nullref("$type", $symname, $argnum); }
  97. if (newmem & SWIG_CAST_NEW_MEMORY) {
  98. tempshared = *%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
  99. delete %reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
  100. $1 = %const_cast(tempshared.get(), $1_ltype);
  101. } else {
  102. $1 = %const_cast(%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *)->get(), $1_ltype);
  103. }
  104. }
  105. %typemap(out, fragment="SWIG_null_deleter") CONST TYPE & {
  106. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_$owner);
  107. %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
  108. }
  109. %typemap(varin) CONST TYPE & {
  110. void *argp = 0;
  111. int newmem = 0;
  112. int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
  113. if (!SWIG_IsOK(res)) {
  114. %variable_fail(res, "$type", "$name");
  115. }
  116. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > tempshared;
  117. if (!argp) { %argument_nullref("$type", $symname, $argnum); }
  118. if (newmem & SWIG_CAST_NEW_MEMORY) {
  119. tempshared = *%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
  120. delete %reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
  121. $1 = *%const_cast(tempshared.get(), $1_ltype);
  122. } else {
  123. $1 = *%const_cast(%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *)->get(), $1_ltype);
  124. }
  125. }
  126. %typemap(varout, fragment="SWIG_null_deleter") CONST TYPE & {
  127. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(&$1 SWIG_NO_NULL_DELETER_0);
  128. %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
  129. }
  130. // plain pointer by reference
  131. // Note: $disown not implemented as it will lead to a memory leak of the shared_ptr instance
  132. %typemap(in) TYPE *CONST& (void *argp = 0, int res = 0, $*1_ltype temp = 0, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > tempshared) {
  133. int newmem = 0;
  134. res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
  135. if (!SWIG_IsOK(res)) {
  136. %argument_fail(res, "$type", $symname, $argnum);
  137. }
  138. if (newmem & SWIG_CAST_NEW_MEMORY) {
  139. tempshared = *%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
  140. delete %reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
  141. temp = %const_cast(tempshared.get(), $*1_ltype);
  142. } else {
  143. temp = %const_cast(%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *)->get(), $*1_ltype);
  144. }
  145. $1 = &temp;
  146. }
  147. %typemap(out, fragment="SWIG_null_deleter") TYPE *CONST& {
  148. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(*$1 SWIG_NO_NULL_DELETER_$owner);
  149. %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
  150. }
  151. %typemap(varin) TYPE *CONST& %{
  152. #error "varin typemap not implemented"
  153. %}
  154. %typemap(varout) TYPE *CONST& %{
  155. #error "varout typemap not implemented"
  156. %}
  157. // shared_ptr by value
  158. %typemap(in) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > (void *argp, int res = 0) {
  159. int newmem = 0;
  160. res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
  161. if (!SWIG_IsOK(res)) {
  162. %argument_fail(res, "$type", $symname, $argnum);
  163. }
  164. if (argp) $1 = *(%reinterpret_cast(argp, $&ltype));
  165. if (newmem & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $&ltype);
  166. }
  167. %typemap(out) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > {
  168. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = $1 ? new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1) : 0;
  169. %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
  170. }
  171. %typemap(varin) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > {
  172. int newmem = 0;
  173. void *argp = 0;
  174. int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
  175. if (!SWIG_IsOK(res)) {
  176. %variable_fail(res, "$type", "$name");
  177. }
  178. $1 = argp ? *(%reinterpret_cast(argp, $&ltype)) : SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE >();
  179. if (newmem & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $&ltype);
  180. }
  181. %typemap(varout) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > {
  182. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = $1 ? new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1) : 0;
  183. %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
  184. }
  185. // shared_ptr by reference
  186. %typemap(in) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > & (void *argp, int res = 0, $*1_ltype tempshared) {
  187. int newmem = 0;
  188. res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
  189. if (!SWIG_IsOK(res)) {
  190. %argument_fail(res, "$type", $symname, $argnum);
  191. }
  192. if (newmem & SWIG_CAST_NEW_MEMORY) {
  193. if (argp) tempshared = *%reinterpret_cast(argp, $ltype);
  194. delete %reinterpret_cast(argp, $ltype);
  195. $1 = &tempshared;
  196. } else {
  197. $1 = (argp) ? %reinterpret_cast(argp, $ltype) : &tempshared;
  198. }
  199. }
  200. %typemap(out) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > & {
  201. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = *$1 ? new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(*$1) : 0;
  202. %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
  203. }
  204. %typemap(varin) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > & %{
  205. #error "varin typemap not implemented"
  206. %}
  207. %typemap(varout) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > & %{
  208. #error "varout typemap not implemented"
  209. %}
  210. // shared_ptr by pointer
  211. %typemap(in) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > * (void *argp, int res = 0, $*1_ltype tempshared) {
  212. int newmem = 0;
  213. res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
  214. if (!SWIG_IsOK(res)) {
  215. %argument_fail(res, "$type", $symname, $argnum);
  216. }
  217. if (newmem & SWIG_CAST_NEW_MEMORY) {
  218. if (argp) tempshared = *%reinterpret_cast(argp, $ltype);
  219. delete %reinterpret_cast(argp, $ltype);
  220. $1 = &tempshared;
  221. } else {
  222. $1 = (argp) ? %reinterpret_cast(argp, $ltype) : &tempshared;
  223. }
  224. }
  225. %typemap(out) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > * {
  226. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = $1 && *$1 ? new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(*$1) : 0;
  227. %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
  228. if ($owner) delete $1;
  229. }
  230. %typemap(varin) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > * %{
  231. #error "varin typemap not implemented"
  232. %}
  233. %typemap(varout) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > * %{
  234. #error "varout typemap not implemented"
  235. %}
  236. // shared_ptr by pointer reference
  237. %typemap(in) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& (void *argp, int res = 0, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > tempshared, $*1_ltype temp = 0) {
  238. int newmem = 0;
  239. res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
  240. if (!SWIG_IsOK(res)) {
  241. %argument_fail(res, "$type", $symname, $argnum);
  242. }
  243. if (argp) tempshared = *%reinterpret_cast(argp, $*ltype);
  244. if (newmem & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $*ltype);
  245. temp = &tempshared;
  246. $1 = &temp;
  247. }
  248. %typemap(out) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& {
  249. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = *$1 && **$1 ? new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(**$1) : 0;
  250. %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
  251. }
  252. %typemap(varin) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& %{
  253. #error "varin typemap not implemented"
  254. %}
  255. %typemap(varout) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& %{
  256. #error "varout typemap not implemented"
  257. %}
  258. // Typecheck typemaps
  259. // Note: SWIG_ConvertPtr with void ** parameter set to 0 instead of using SWIG_ConvertPtrAndOwn, so that the casting
  260. // function is not called thereby avoiding a possible smart pointer copy constructor call when casting up the inheritance chain.
  261. %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER,noblock=1)
  262. TYPE CONST,
  263. TYPE CONST &,
  264. TYPE CONST *,
  265. TYPE *CONST&,
  266. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >,
  267. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > &,
  268. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *,
  269. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& {
  270. int res = SWIG_ConvertPtr($input, 0, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), 0);
  271. $1 = SWIG_CheckState(res);
  272. }
  273. // various missing typemaps - If ever used (unlikely) ensure compilation error rather than runtime bug
  274. %typemap(in) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{
  275. #error "typemaps for $1_type not available"
  276. %}
  277. %typemap(out) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{
  278. #error "typemaps for $1_type not available"
  279. %}
  280. %template() SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >;
  281. %enddef