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

/trunk/Lib/csharp/boost_intrusive_ptr.i

#
Swig | 511 lines | 450 code | 61 blank | 0 comment | 0 complexity | cd6b4a7f91f0f53157702aabd6ff31a6 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
  4. #define SWIG_INTRUSIVE_PTR_TYPEMAPS(CONST, TYPE...) SWIG_INTRUSIVE_PTR_TYPEMAPS_IMPLEMENTATION(internal, internal, CONST, TYPE)
  5. #endif
  6. #ifndef SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP
  7. #define SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP(CONST, TYPE...) SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP_IMPLEMENTATION(internal, internal, 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, canthrow=1) 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_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null $1_type", 0);
  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, canthrow=1) 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, canthrow=1) 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_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "$1_type reference is null", 0);
  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($1.get());
  100. *(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 >());
  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 (ctype) 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 > *& "void *"
  193. %typemap (imtype, out="IntPtr") 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 > *& "HandleRef"
  198. %typemap (cstype) 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(cstype, TYPE)"
  203. %typemap(csin) 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(cstype, TYPE).getCPtr($csinput)"
  208. %typemap(csout, excode=SWIGEXCODE) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > {
  209. IntPtr cPtr = $imcall;
  210. $typemap(cstype, TYPE) ret = (cPtr == IntPtr.Zero) ? null : new $typemap(cstype, TYPE)(cPtr, true);$excode
  211. return ret;
  212. }
  213. %typemap(csout, excode=SWIGEXCODE) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > {
  214. IntPtr cPtr = $imcall;
  215. $typemap(cstype, TYPE) ret = (cPtr == IntPtr.Zero) ? null : new $typemap(cstype, TYPE)(cPtr, true);$excode
  216. return ret;
  217. }
  218. %typemap(csout, excode=SWIGEXCODE) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > & {
  219. IntPtr cPtr = $imcall;
  220. $typemap(cstype, TYPE) ret = (cPtr == IntPtr.Zero) ? null : new $typemap(cstype, TYPE)(cPtr, true);$excode
  221. return ret;
  222. }
  223. %typemap(csout, excode=SWIGEXCODE) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > * {
  224. IntPtr cPtr = $imcall;
  225. $typemap(cstype, TYPE) ret = (cPtr == IntPtr.Zero) ? null : new $typemap(cstype, TYPE)(cPtr, true);$excode
  226. return ret;
  227. }
  228. %typemap(csout, excode=SWIGEXCODE) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& {
  229. IntPtr cPtr = $imcall;
  230. $typemap(cstype, TYPE) ret = (cPtr == IntPtr.Zero) ? null : new $typemap(cstype, TYPE)(cPtr, true);$excode
  231. return ret;
  232. }
  233. %typemap(csvarout, excode=SWIGEXCODE2) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > %{
  234. get {
  235. $typemap(cstype, TYPE) ret = new $typemap(cstype, TYPE)($imcall, true);$excode
  236. return ret;
  237. } %}
  238. %typemap(csvarout, excode=SWIGEXCODE2) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >& %{
  239. get {
  240. $typemap(cstype, TYPE) ret = new $typemap(cstype, TYPE)($imcall, true);$excode
  241. return ret;
  242. } %}
  243. %typemap(csvarout, excode=SWIGEXCODE2) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >* %{
  244. get {
  245. $typemap(cstype, TYPE) ret = new $typemap(cstype, TYPE)($imcall, true);$excode
  246. return ret;
  247. } %}
  248. %typemap(csout, excode=SWIGEXCODE) CONST TYPE {
  249. $typemap(cstype, TYPE) ret = new $typemap(cstype, TYPE)($imcall, true);$excode
  250. return ret;
  251. }
  252. %typemap(csout, excode=SWIGEXCODE) CONST TYPE & {
  253. $typemap(cstype, TYPE) ret = new $typemap(cstype, TYPE)($imcall, true);$excode
  254. return ret;
  255. }
  256. %typemap(csout, excode=SWIGEXCODE) CONST TYPE * {
  257. IntPtr cPtr = $imcall;
  258. $typemap(cstype, TYPE) ret = (cPtr == IntPtr.Zero) ? null : new $typemap(cstype, TYPE)(cPtr, true);$excode
  259. return ret;
  260. }
  261. %typemap(csout, excode=SWIGEXCODE) TYPE *CONST& {
  262. IntPtr cPtr = $imcall;
  263. $typemap(cstype, TYPE) ret = (cPtr == IntPtr.Zero) ? null : new $typemap(cstype, TYPE)(cPtr, true);$excode
  264. return ret;
  265. }
  266. // Base proxy classes
  267. %typemap(csbody) TYPE %{
  268. private HandleRef swigCPtr;
  269. private bool swigCMemOwnBase;
  270. PTRCTOR_VISIBILITY $csclassname(IntPtr cPtr, bool cMemoryOwn) {
  271. swigCMemOwnBase = cMemoryOwn;
  272. swigCPtr = new HandleRef(this, cPtr);
  273. }
  274. CPTR_VISIBILITY static HandleRef getCPtr($csclassname obj) {
  275. return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
  276. }
  277. %}
  278. // Derived proxy classes
  279. %typemap(csbody_derived) TYPE %{
  280. private HandleRef swigCPtr;
  281. private bool swigCMemOwnDerived;
  282. PTRCTOR_VISIBILITY $csclassname(IntPtr cPtr, bool cMemoryOwn) : base($imclassname.$csclazznameSWIGSmartPtrUpcast(cPtr), true) {
  283. swigCMemOwnDerived = cMemoryOwn;
  284. swigCPtr = new HandleRef(this, cPtr);
  285. }
  286. CPTR_VISIBILITY static HandleRef getCPtr($csclassname obj) {
  287. return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
  288. }
  289. %}
  290. %typemap(csdestruct, methodname="Dispose", methodmodifiers="public") TYPE {
  291. lock(this) {
  292. if (swigCPtr.Handle != IntPtr.Zero) {
  293. if (swigCMemOwnBase) {
  294. swigCMemOwnBase = false;
  295. $imcall;
  296. }
  297. swigCPtr = new HandleRef(null, IntPtr.Zero);
  298. }
  299. GC.SuppressFinalize(this);
  300. }
  301. }
  302. %typemap(csdestruct_derived, methodname="Dispose", methodmodifiers="public") TYPE {
  303. lock(this) {
  304. if (swigCPtr.Handle != IntPtr.Zero) {
  305. if (swigCMemOwnDerived) {
  306. swigCMemOwnDerived = false;
  307. $imcall;
  308. }
  309. swigCPtr = new HandleRef(null, IntPtr.Zero);
  310. }
  311. GC.SuppressFinalize(this);
  312. base.Dispose();
  313. }
  314. }
  315. // CONST version needed ???? also for C#
  316. %typemap(imtype, nopgcpp="1") SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > swigSharedPtrUpcast "HandleRef"
  317. %typemap(imtype, nopgcpp="1") SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > swigSharedPtrUpcast "HandleRef"
  318. %template() SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >;
  319. %template() SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >;
  320. %enddef
  321. /////////////////////////////////////////////////////////////////////
  322. %include <shared_ptr.i>
  323. %define SWIG_INTRUSIVE_PTR_TYPEMAPS_NO_WRAP_IMPLEMENTATION(PTRCTOR_VISIBILITY, CPTR_VISIBILITY, CONST, TYPE...)
  324. %naturalvar TYPE;
  325. %naturalvar SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >;
  326. // destructor mods
  327. %feature("unref") TYPE "(void)arg1; delete smartarg1;"
  328. // plain value
  329. %typemap(in, canthrow=1) CONST TYPE ($&1_type argp = 0) %{
  330. argp = (*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input) ? (*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input)->get() : 0;
  331. if (!argp) {
  332. SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null $1_type", 0);
  333. return $null;
  334. }
  335. $1 = *argp; %}
  336. %typemap(out) CONST TYPE
  337. %{ *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(new $1_ltype(($1_ltype &)$1)); %}
  338. // plain pointer
  339. %typemap(in) CONST TYPE * (SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartarg = 0) %{
  340. smartarg = *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input;
  341. $1 = (TYPE *)(smartarg ? smartarg->get() : 0); %}
  342. %typemap(out, fragment="SWIG_null_deleter") CONST TYPE * %{
  343. *(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;
  344. %}
  345. // plain reference
  346. %typemap(in, canthrow=1) CONST TYPE & %{
  347. $1 = ($1_ltype)((*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input) ? (*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input)->get() : 0);
  348. if (!$1) {
  349. SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "$1_type reference is null", 0);
  350. return $null;
  351. } %}
  352. %typemap(out, fragment="SWIG_null_deleter") CONST TYPE &
  353. %{ *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_$owner); %}
  354. // plain pointer by reference
  355. %typemap(in) TYPE *CONST& ($*1_ltype temp = 0)
  356. %{ temp = ($*1_ltype)((*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input) ? (*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input)->get() : 0);
  357. $1 = &temp; %}
  358. %typemap(out, fragment="SWIG_null_deleter") TYPE *CONST&
  359. %{ *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(*$1 SWIG_NO_NULL_DELETER_$owner); %}
  360. %typemap(in) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > swigSharedPtrUpcast ($&1_type smartarg) %{
  361. // shared_ptr by value
  362. smartarg = *($&1_ltype*)&$input;
  363. if (smartarg) $1 = *smartarg;
  364. %}
  365. %typemap(out) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > ANY_TYPE_SWIGSharedPtrUpcast %{
  366. *($&1_ltype*)&$result = $1 ? new $1_ltype($1) : 0;
  367. %}
  368. // various missing typemaps - If ever used (unlikely) ensure compilation error rather than runtime bug
  369. %typemap(in) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{
  370. #error "typemaps for $1_type not available"
  371. %}
  372. %typemap(out) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{
  373. #error "typemaps for $1_type not available"
  374. %}
  375. %typemap (ctype) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > "void *"
  376. %typemap (imtype) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > "void *"
  377. %typemap (cstype) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > "$typemap(cstype, TYPE)"
  378. %typemap (csin) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > "$typemap(cstype, TYPE).getCPtr($csinput)"
  379. %typemap(csout, excode=SWIGEXCODE) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > {
  380. IntPtr cPtr = $imcall;
  381. return (cPtr == IntPtr.Zero) ? null : new $typemap(cstype, TYPE)(cPtr, true);
  382. }
  383. %typemap(csout, excode=SWIGEXCODE) CONST TYPE {
  384. return new $typemap(cstype, TYPE)($imcall, true);
  385. }
  386. %typemap(csout, excode=SWIGEXCODE) CONST TYPE & {
  387. return new $typemap(cstype, TYPE)($imcall, true);
  388. }
  389. %typemap(csout, excode=SWIGEXCODE) CONST TYPE * {
  390. IntPtr cPtr = $imcall;
  391. return (cPtr == IntPtr.Zero) ? null : new $typemap(cstype, TYPE)(cPtr, true);
  392. }
  393. %typemap(csout, excode=SWIGEXCODE) TYPE *CONST& {
  394. IntPtr cPtr = $imcall;
  395. return (cPtr == IntPtr.Zero) ? null : new $typemap(cstype, TYPE)(cPtr, true);
  396. }
  397. // Base proxy classes
  398. %typemap(csbody) TYPE %{
  399. private HandleRef swigCPtr;
  400. private bool swigCMemOwnBase;
  401. PTRCTOR_VISIBILITY $csclassname(IntPtr cPtr, bool cMemoryOwn) {
  402. swigCMemOwnBase = cMemoryOwn;
  403. swigCPtr = new HandleRef(this, cPtr);
  404. }
  405. CPTR_VISIBILITY static HandleRef getCPtr($csclassname obj) {
  406. return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
  407. }
  408. %}
  409. // Derived proxy classes
  410. %typemap(csbody_derived) TYPE %{
  411. private HandleRef swigCPtr;
  412. private bool swigCMemOwnDerived;
  413. PTRCTOR_VISIBILITY $csclassname(IntPtr cPtr, bool cMemoryOwn) : base($imclassname.$csclazznameSWIGSmartPtrUpcast(cPtr), true) {
  414. swigCMemOwnDerived = cMemoryOwn;
  415. swigCPtr = new HandleRef(this, cPtr);
  416. }
  417. CPTR_VISIBILITY static HandleRef getCPtr($csclassname obj) {
  418. return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
  419. }
  420. %}
  421. %typemap(csdestruct, methodname="Dispose", methodmodifiers="public") TYPE {
  422. lock(this) {
  423. if (swigCPtr.Handle != IntPtr.Zero) {
  424. if (swigCMemOwnBase) {
  425. swigCMemOwnBase = false;
  426. $imcall;
  427. }
  428. swigCPtr = new HandleRef(null, IntPtr.Zero);
  429. }
  430. GC.SuppressFinalize(this);
  431. }
  432. }
  433. %typemap(csdestruct_derived, methodname="Dispose", methodmodifiers="public") TYPE {
  434. lock(this) {
  435. if (swigCPtr.Handle != IntPtr.Zero) {
  436. if (swigCMemOwnDerived) {
  437. swigCMemOwnDerived = false;
  438. $imcall;
  439. }
  440. swigCPtr = new HandleRef(null, IntPtr.Zero);
  441. }
  442. GC.SuppressFinalize(this);
  443. base.Dispose();
  444. }
  445. }
  446. // CONST version needed ???? also for C#
  447. %typemap(imtype, nopgcpp="1") SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > swigSharedPtrUpcast "HandleRef"
  448. %typemap(imtype, nopgcpp="1") SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > swigSharedPtrUpcast "HandleRef"
  449. %template() SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >;
  450. %enddef