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

/trunk/Lib/java/boost_intrusive_ptr.i

#
Swig | 473 lines | 412 code | 61 blank | 0 comment | 0 complexity | 75418c0d761b9b9f03e030c932f3ea7f MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. // Users can provide their own SWIG_INTRUSIVE_PTR_TYPEMAPS or SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP macros before including this file to change the
  2. // visibility of the constructor and getCPtr method if desired to public if using multiple modules.
  3. #ifndef SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP
  4. #define SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP(CONST, TYPE...) SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP_IMPLEMENTATION(protected, protected, CONST, TYPE)
  5. #endif
  6. #ifndef SWIG_INTRUSIVE_PTR_TYPEMAPS
  7. #define SWIG_INTRUSIVE_PTR_TYPEMAPS(CONST, TYPE...) SWIG_INTRUSIVE_PTR_TYPEMAPS_IMPLEMENTATION(protected, protected, CONST, TYPE)
  8. #endif
  9. %include <intrusive_ptr.i>
  10. // Language specific macro implementing all the customisations for handling the smart pointer
  11. %define SWIG_INTRUSIVE_PTR_TYPEMAPS_IMPLEMENTATION(PTRCTOR_VISIBILITY, CPTR_VISIBILITY, CONST, TYPE...)
  12. // %naturalvar is as documented for member variables
  13. %naturalvar TYPE;
  14. %naturalvar SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >;
  15. // destructor wrapper customisation
  16. %feature("unref") TYPE "(void)arg1; delete smartarg1;"
  17. // Typemap customisations...
  18. %typemap(in) CONST TYPE ($&1_type argp = 0, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartarg = 0) %{
  19. // plain value
  20. argp = (*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input) ? (*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input)->get() : 0;
  21. if (!argp) {
  22. SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null $1_type");
  23. return $null;
  24. }
  25. $1 = *argp;
  26. %}
  27. %typemap(out, fragment="SWIG_intrusive_deleter") CONST TYPE %{
  28. //plain value(out)
  29. $1_ltype* resultp = new $1_ltype(($1_ltype &)$1);
  30. intrusive_ptr_add_ref(resultp);
  31. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(resultp, SWIG_intrusive_deleter< CONST TYPE >());
  32. %}
  33. %typemap(in) CONST TYPE * (SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartarg = 0) %{
  34. // plain pointer
  35. smartarg = *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input;
  36. $1 = (TYPE *)(smartarg ? smartarg->get() : 0);
  37. %}
  38. %typemap(out, fragment="SWIG_intrusive_deleter,SWIG_null_deleter") CONST TYPE * %{
  39. //plain pointer(out)
  40. #if ($owner)
  41. if ($1) {
  42. intrusive_ptr_add_ref($1);
  43. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1, SWIG_intrusive_deleter< CONST TYPE >());
  44. } else {
  45. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = 0;
  46. }
  47. #else
  48. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = $1 ? new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_0) : 0;
  49. #endif
  50. %}
  51. %typemap(in) CONST TYPE & (SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartarg = 0) %{
  52. // plain reference
  53. $1 = ($1_ltype)((*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input) ? (*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input)->get() : 0);
  54. if(!$1) {
  55. SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "$1_type reference is null");
  56. return $null;
  57. }
  58. %}
  59. %typemap(out, fragment="SWIG_intrusive_deleter,SWIG_null_deleter") CONST TYPE & %{
  60. //plain reference(out)
  61. #if ($owner)
  62. if ($1) {
  63. intrusive_ptr_add_ref($1);
  64. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1, SWIG_intrusive_deleter< CONST TYPE >());
  65. } else {
  66. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = 0;
  67. }
  68. #else
  69. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = $1 ? new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_0) : 0;
  70. #endif
  71. %}
  72. %typemap(in) TYPE *CONST& ($*1_ltype temp = 0, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartarg = 0) %{
  73. // plain pointer by reference
  74. temp = ($*1_ltype)((*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input) ? (*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input)->get() : 0);
  75. $1 = &temp;
  76. %}
  77. %typemap(out, fragment="SWIG_intrusive_deleter,SWIG_null_deleter") TYPE *CONST& %{
  78. // plain pointer by reference(out)
  79. #if ($owner)
  80. if (*$1) {
  81. intrusive_ptr_add_ref(*$1);
  82. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(*$1, SWIG_intrusive_deleter< CONST TYPE >());
  83. } else {
  84. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = 0;
  85. }
  86. #else
  87. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(*$1 SWIG_NO_NULL_DELETER_0);
  88. #endif
  89. %}
  90. %typemap(in) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > ($&1_type argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > * smartarg) %{
  91. // intrusive_ptr by value
  92. smartarg = *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >**)&$input;
  93. if (smartarg) {
  94. $1 = SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >(smartarg->get(), true);
  95. }
  96. %}
  97. %typemap(out, fragment="SWIG_intrusive_deleter") SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > %{
  98. if ($1) {
  99. intrusive_ptr_add_ref(result.get());
  100. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(result.get(), SWIG_intrusive_deleter< CONST TYPE >());
  101. } else {
  102. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = 0;
  103. }
  104. %}
  105. %typemap(in) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > swigSharedPtrUpcast ($&1_type smartarg) %{
  106. // shared_ptr by value
  107. smartarg = *($&1_ltype*)&$input;
  108. if (smartarg) $1 = *smartarg;
  109. %}
  110. %typemap(out) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > ANY_TYPE_SWIGSharedPtrUpcast %{
  111. *($&1_ltype*)&$result = $1 ? new $1_ltype($1) : 0;
  112. %}
  113. %typemap(in) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > & ($*1_ltype tempnull, $*1_ltype temp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > * smartarg) %{
  114. // intrusive_ptr by reference
  115. if ( $input ) {
  116. smartarg = *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >**)&$input;
  117. temp = SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >(smartarg->get(), true);
  118. $1 = &temp;
  119. } else {
  120. $1 = &tempnull;
  121. }
  122. %}
  123. %typemap(memberin) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > & %{
  124. delete &($1);
  125. if ($self) {
  126. SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > * temp = new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >(*$input);
  127. $1 = *temp;
  128. }
  129. %}
  130. %typemap(out, fragment="SWIG_intrusive_deleter") SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > & %{
  131. if (*$1) {
  132. intrusive_ptr_add_ref($1->get());
  133. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1->get(), SWIG_intrusive_deleter< CONST TYPE >());
  134. } else {
  135. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = 0;
  136. }
  137. %}
  138. %typemap(in) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > * ($*1_ltype tempnull, $*1_ltype temp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > * smartarg) %{
  139. // intrusive_ptr by pointer
  140. if ( $input ) {
  141. smartarg = *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >**)&$input;
  142. temp = SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >(smartarg->get(), true);
  143. $1 = &temp;
  144. } else {
  145. $1 = &tempnull;
  146. }
  147. %}
  148. %typemap(memberin) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > * %{
  149. delete $1;
  150. if ($self) $1 = new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >(*$input);
  151. %}
  152. %typemap(out, fragment="SWIG_intrusive_deleter") SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > * %{
  153. if ($1 && *$1) {
  154. intrusive_ptr_add_ref($1->get());
  155. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1->get(), SWIG_intrusive_deleter< CONST TYPE >());
  156. } else {
  157. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = 0;
  158. }
  159. if ($owner) delete $1;
  160. %}
  161. %typemap(in) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& (SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > temp, $*1_ltype tempp = 0, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > * smartarg) %{
  162. // intrusive_ptr by pointer reference
  163. smartarg = *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >**)&$input;
  164. if ($input) {
  165. temp = SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >(smartarg->get(), true);
  166. }
  167. tempp = &temp;
  168. $1 = &tempp;
  169. %}
  170. %typemap(memberin) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& %{
  171. if ($self) $1 = *$input;
  172. %}
  173. %typemap(out, fragment="SWIG_intrusive_deleter") SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& %{
  174. if (*$1 && **$1) {
  175. intrusive_ptr_add_ref((*$1)->get());
  176. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >((*$1)->get(), SWIG_intrusive_deleter< CONST TYPE >());
  177. } else {
  178. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = 0;
  179. }
  180. %}
  181. // various missing typemaps - If ever used (unlikely) ensure compilation error rather than runtime bug
  182. %typemap(in) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{
  183. #error "typemaps for $1_type not available"
  184. %}
  185. %typemap(out) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{
  186. #error "typemaps for $1_type not available"
  187. %}
  188. %typemap (jni) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >,
  189. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >,
  190. SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > &,
  191. SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *,
  192. SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& "jlong"
  193. %typemap (jtype) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >,
  194. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >,
  195. SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > &,
  196. SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *,
  197. SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& "long"
  198. %typemap (jstype) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >,
  199. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >,
  200. SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > &,
  201. SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *,
  202. SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& "$typemap(jstype, TYPE)"
  203. %typemap(javain) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >,
  204. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >,
  205. SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > &,
  206. SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *,
  207. SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& "$typemap(jstype, TYPE).getCPtr($javainput)"
  208. %typemap(javaout) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > {
  209. long cPtr = $jnicall;
  210. return (cPtr == 0) ? null : new $typemap(jstype, TYPE)(cPtr, true);
  211. }
  212. %typemap(javaout) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > {
  213. long cPtr = $jnicall;
  214. return (cPtr == 0) ? null : new $typemap(jstype, TYPE)(cPtr, true);
  215. }
  216. %typemap(javaout) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > & {
  217. long cPtr = $jnicall;
  218. return (cPtr == 0) ? null : new $typemap(jstype, TYPE)(cPtr, true);
  219. }
  220. %typemap(javaout) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > * {
  221. long cPtr = $jnicall;
  222. return (cPtr == 0) ? null : new $typemap(jstype, TYPE)(cPtr, true);
  223. }
  224. %typemap(javaout) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& {
  225. long cPtr = $jnicall;
  226. return (cPtr == 0) ? null : new $typemap(jstype, TYPE)(cPtr, true);
  227. }
  228. %typemap(javaout) CONST TYPE {
  229. return new $typemap(jstype, TYPE)($jnicall, true);
  230. }
  231. %typemap(javaout) CONST TYPE & {
  232. return new $typemap(jstype, TYPE)($jnicall, true);
  233. }
  234. %typemap(javaout) CONST TYPE * {
  235. long cPtr = $jnicall;
  236. return (cPtr == 0) ? null : new $typemap(jstype, TYPE)(cPtr, true);
  237. }
  238. %typemap(javaout) TYPE *CONST& {
  239. long cPtr = $jnicall;
  240. return (cPtr == 0) ? null : new $typemap(jstype, TYPE)(cPtr, true);
  241. }
  242. // Base proxy classes
  243. %typemap(javabody) TYPE %{
  244. private long swigCPtr;
  245. private boolean swigCMemOwnBase;
  246. PTRCTOR_VISIBILITY $javaclassname(long cPtr, boolean cMemoryOwn) {
  247. swigCMemOwnBase = cMemoryOwn;
  248. swigCPtr = cPtr;
  249. }
  250. CPTR_VISIBILITY static long getCPtr($javaclassname obj) {
  251. return (obj == null) ? 0 : obj.swigCPtr;
  252. }
  253. %}
  254. // Derived proxy classes
  255. %typemap(javabody_derived) TYPE %{
  256. private long swigCPtr;
  257. private boolean swigCMemOwnDerived;
  258. PTRCTOR_VISIBILITY $javaclassname(long cPtr, boolean cMemoryOwn) {
  259. super($imclassname.$javaclazznameSWIGSmartPtrUpcast(cPtr), true);
  260. swigCMemOwnDerived = cMemoryOwn;
  261. swigCPtr = cPtr;
  262. }
  263. CPTR_VISIBILITY static long getCPtr($javaclassname obj) {
  264. return (obj == null) ? 0 : obj.swigCPtr;
  265. }
  266. %}
  267. %typemap(javadestruct, methodname="delete", methodmodifiers="public synchronized") TYPE {
  268. if(swigCPtr != 0 && swigCMemOwnBase) {
  269. swigCMemOwnBase = false;
  270. $jnicall;
  271. }
  272. swigCPtr = 0;
  273. }
  274. %typemap(javadestruct_derived, methodname="delete", methodmodifiers="public synchronized") TYPE {
  275. if(swigCPtr != 0 && swigCMemOwnDerived) {
  276. swigCMemOwnDerived = false;
  277. $jnicall;
  278. }
  279. swigCPtr = 0;
  280. super.delete();
  281. }
  282. // CONST version needed ???? also for C#
  283. %typemap(jtype, nopgcpp="1") SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > swigSharedPtrUpcast "long"
  284. %typemap(jtype, nopgcpp="1") SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > swigSharedPtrUpcast "long"
  285. %template() SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >;
  286. %template() SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >;
  287. %enddef
  288. /////////////////////////////////////////////////////////////////////
  289. %include <shared_ptr.i>
  290. %define SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP_IMPLEMENTATION(PTRCTOR_VISIBILITY, CPTR_VISIBILITY, CONST, TYPE...)
  291. %naturalvar TYPE;
  292. %naturalvar SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >;
  293. // destructor mods
  294. %feature("unref") TYPE "(void)arg1; delete smartarg1;"
  295. // plain value
  296. %typemap(in) CONST TYPE ($&1_type argp = 0) %{
  297. argp = (*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input) ? (*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input)->get() : 0;
  298. if (!argp) {
  299. SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null $1_type");
  300. return $null;
  301. }
  302. $1 = *argp; %}
  303. %typemap(out) CONST TYPE
  304. %{ *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(new $1_ltype(($1_ltype &)$1)); %}
  305. // plain pointer
  306. %typemap(in) CONST TYPE * (SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartarg = 0) %{
  307. smartarg = *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input;
  308. $1 = (TYPE *)(smartarg ? smartarg->get() : 0); %}
  309. %typemap(out, fragment="SWIG_null_deleter") CONST TYPE * %{
  310. *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = $1 ? new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_$owner) : 0;
  311. %}
  312. // plain reference
  313. %typemap(in) CONST TYPE & %{
  314. $1 = ($1_ltype)((*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input) ? (*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input)->get() : 0);
  315. if (!$1) {
  316. SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "$1_type reference is null");
  317. return $null;
  318. } %}
  319. %typemap(out, fragment="SWIG_null_deleter") CONST TYPE &
  320. %{ *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_$owner); %}
  321. // plain pointer by reference
  322. %typemap(in) TYPE *CONST& ($*1_ltype temp = 0)
  323. %{ temp = ($*1_ltype)((*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input) ? (*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input)->get() : 0);
  324. $1 = &temp; %}
  325. %typemap(out, fragment="SWIG_null_deleter") TYPE *CONST&
  326. %{ *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(*$1 SWIG_NO_NULL_DELETER_$owner); %}
  327. %typemap(in) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > swigSharedPtrUpcast ($&1_type smartarg) %{
  328. // shared_ptr by value
  329. smartarg = *($&1_ltype*)&$input;
  330. if (smartarg) $1 = *smartarg;
  331. %}
  332. %typemap(out) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > ANY_TYPE_SWIGSharedPtrUpcast %{
  333. *($&1_ltype*)&$result = $1 ? new $1_ltype($1) : 0;
  334. %}
  335. // various missing typemaps - If ever used (unlikely) ensure compilation error rather than runtime bug
  336. %typemap(in) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{
  337. #error "typemaps for $1_type not available"
  338. %}
  339. %typemap(out) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{
  340. #error "typemaps for $1_type not available"
  341. %}
  342. %typemap (jni) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > "jlong"
  343. %typemap (jtype) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > "long"
  344. %typemap (jstype) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > "$typemap(jstype, TYPE)"
  345. %typemap (javain) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > "$typemap(jstype, TYPE).getCPtr($javainput)"
  346. %typemap(javaout) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > {
  347. long cPtr = $jnicall;
  348. return (cPtr == 0) ? null : new $typemap(jstype, TYPE)(cPtr, true);
  349. }
  350. %typemap(javaout) CONST TYPE {
  351. return new $typemap(jstype, TYPE)($jnicall, true);
  352. }
  353. %typemap(javaout) CONST TYPE & {
  354. return new $typemap(jstype, TYPE)($jnicall, true);
  355. }
  356. %typemap(javaout) CONST TYPE * {
  357. long cPtr = $jnicall;
  358. return (cPtr == 0) ? null : new $typemap(jstype, TYPE)(cPtr, true);
  359. }
  360. %typemap(javaout) TYPE *CONST& {
  361. long cPtr = $jnicall;
  362. return (cPtr == 0) ? null : new $typemap(jstype, TYPE)(cPtr, true);
  363. }
  364. // Base proxy classes
  365. %typemap(javabody) TYPE %{
  366. private long swigCPtr;
  367. private boolean swigCMemOwnBase;
  368. PTRCTOR_VISIBILITY $javaclassname(long cPtr, boolean cMemoryOwn) {
  369. swigCMemOwnBase = cMemoryOwn;
  370. swigCPtr = cPtr;
  371. }
  372. CPTR_VISIBILITY static long getCPtr($javaclassname obj) {
  373. return (obj == null) ? 0 : obj.swigCPtr;
  374. }
  375. %}
  376. // Derived proxy classes
  377. %typemap(javabody_derived) TYPE %{
  378. private long swigCPtr;
  379. private boolean swigCMemOwnDerived;
  380. PTRCTOR_VISIBILITY $javaclassname(long cPtr, boolean cMemoryOwn) {
  381. super($imclassname.$javaclazznameSWIGSmartPtrUpcast(cPtr), true);
  382. swigCMemOwnDerived = cMemoryOwn;
  383. swigCPtr = cPtr;
  384. }
  385. CPTR_VISIBILITY static long getCPtr($javaclassname obj) {
  386. return (obj == null) ? 0 : obj.swigCPtr;
  387. }
  388. %}
  389. %typemap(javadestruct, methodname="delete", methodmodifiers="public synchronized") TYPE {
  390. if (swigCPtr != 0) {
  391. if (swigCMemOwnBase) {
  392. swigCMemOwnBase = false;
  393. $jnicall;
  394. }
  395. swigCPtr = 0;
  396. }
  397. }
  398. %typemap(javadestruct_derived, methodname="delete", methodmodifiers="public synchronized") TYPE {
  399. if (swigCPtr != 0) {
  400. if (swigCMemOwnDerived) {
  401. swigCMemOwnDerived = false;
  402. $jnicall;
  403. }
  404. swigCPtr = 0;
  405. }
  406. super.delete();
  407. }
  408. // CONST version needed ???? also for C#
  409. %typemap(jtype, nopgcpp="1") SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > swigSharedPtrUpcast "long"
  410. %typemap(jtype, nopgcpp="1") SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > swigSharedPtrUpcast "long"
  411. %template() SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >;
  412. %enddef