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