Upstream version 1.3.40
[profile/ivi/swig.git] / Lib / python / boost_shared_ptr.i
1 %include <shared_ptr.i>
2
3 // Set SHARED_PTR_DISOWN to $disown if required, for example
4 // #define SHARED_PTR_DISOWN $disown
5 #if !defined(SHARED_PTR_DISOWN)
6 #define SHARED_PTR_DISOWN 0
7 #endif
8
9 %define SWIG_SHARED_PTR_TYPEMAPS(PROXYCLASS, CONST, TYPE...)
10
11 %naturalvar TYPE;
12 %naturalvar SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >;
13
14 // destructor mods
15 %feature("unref") TYPE 
16 //"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"
17                                "(void)arg1; delete smartarg1;"
18
19 %feature("smartptr", noblock=1) TYPE { SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > }
20
21 // plain value
22 %typemap(in) CONST TYPE (void *argp, int res = 0) {
23   int newmem = 0;
24   res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
25   if (!SWIG_IsOK(res)) {
26     %argument_fail(res, "$type", $symname, $argnum); 
27   }
28   if (!argp) {
29     %argument_nullref("$type", $symname, $argnum);
30   } else {
31     $1 = *(%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *)->get());
32     if (newmem & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
33   }
34 }
35 %typemap(out) CONST TYPE {
36   SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(new $1_ltype(($1_ltype &)$1));
37   %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
38 }
39
40 %typemap(varin) CONST TYPE {
41   void *argp = 0;
42   int newmem = 0;
43   int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
44   if (!SWIG_IsOK(res)) {
45     %variable_fail(res, "$type", "$name");
46   }
47   if (!argp) {
48     %argument_nullref("$type", $symname, $argnum);
49   } else {
50     $1 = *(%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *)->get());
51     if (newmem & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
52   }
53 }
54 %typemap(varout) CONST TYPE {
55   SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(new $1_ltype(($1_ltype &)$1));
56   %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
57 }
58
59 // plain pointer
60 // Note: $disown not implemented by default as it will lead to a memory leak of the shared_ptr instance
61 %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) {
62   int newmem = 0;
63   res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SHARED_PTR_DISOWN | %convertptr_flags, &newmem);
64   if (!SWIG_IsOK(res)) {
65     %argument_fail(res, "$type", $symname, $argnum); 
66   }
67   if (newmem & SWIG_CAST_NEW_MEMORY) {
68     tempshared = *%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
69     delete %reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
70     $1 = %const_cast(tempshared.get(), $1_ltype);
71   } else {
72     smartarg = %reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
73     $1 = %const_cast((smartarg ? smartarg->get() : 0), $1_ltype);
74   }
75 }
76 %typemap(out, fragment="SWIG_null_deleter") CONST TYPE * {
77   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;
78   %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), $owner | SWIG_POINTER_OWN));
79 }
80
81 %typemap(varin) CONST TYPE * {
82   void *argp = 0;
83   int newmem = 0;
84   int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
85   if (!SWIG_IsOK(res)) {
86     %variable_fail(res, "$type", "$name");
87   }
88   SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > tempshared;
89   SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartarg = 0;
90   if (newmem & SWIG_CAST_NEW_MEMORY) {
91     tempshared = *%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
92     delete %reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
93     $1 = %const_cast(tempshared.get(), $1_ltype);
94   } else {
95     smartarg = %reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
96     $1 = %const_cast((smartarg ? smartarg->get() : 0), $1_ltype);
97   }
98 }
99 %typemap(varout, fragment="SWIG_null_deleter") CONST TYPE * {
100   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;
101   %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
102 }
103
104 // plain reference
105 %typemap(in) CONST TYPE & (void  *argp = 0, int res = 0, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > tempshared) {
106   int newmem = 0;
107   res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
108   if (!SWIG_IsOK(res)) {
109     %argument_fail(res, "$type", $symname, $argnum); 
110   }
111   if (!argp) { %argument_nullref("$type", $symname, $argnum); }
112   if (newmem & SWIG_CAST_NEW_MEMORY) {
113     tempshared = *%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
114     delete %reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
115     $1 = %const_cast(tempshared.get(), $1_ltype);
116   } else {
117     $1 = %const_cast(%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *)->get(), $1_ltype);
118   }
119 }
120 %typemap(out, fragment="SWIG_null_deleter") CONST TYPE & {
121   SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_$owner);
122   %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
123 }
124
125 %typemap(varin) CONST TYPE & {
126   void *argp = 0;
127   int newmem = 0;
128   int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
129   if (!SWIG_IsOK(res)) {
130     %variable_fail(res, "$type", "$name");
131   }
132   SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > tempshared;
133   if (!argp) { %argument_nullref("$type", $symname, $argnum); }
134   if (newmem & SWIG_CAST_NEW_MEMORY) {
135     tempshared = *%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
136     delete %reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
137     $1 = *%const_cast(tempshared.get(), $1_ltype);
138   } else {
139     $1 = *%const_cast(%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *)->get(), $1_ltype);
140   }
141 }
142 %typemap(varout, fragment="SWIG_null_deleter") CONST TYPE & {
143   SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(&$1 SWIG_NO_NULL_DELETER_0);
144   %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
145 }
146
147 // plain pointer by reference
148 // Note: $disown not implemented by default as it will lead to a memory leak of the shared_ptr instance
149 %typemap(in) CONST TYPE *& (void  *argp = 0, int res = 0, $*1_ltype temp = 0, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > tempshared) {
150   int newmem = 0;
151   res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SHARED_PTR_DISOWN | %convertptr_flags, &newmem);
152   if (!SWIG_IsOK(res)) {
153     %argument_fail(res, "$type", $symname, $argnum); 
154   }
155   if (newmem & SWIG_CAST_NEW_MEMORY) {
156     tempshared = *%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
157     delete %reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *);
158     temp = %const_cast(tempshared.get(), $*1_ltype);
159   } else {
160     temp = %const_cast(%reinterpret_cast(argp, SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *)->get(), $*1_ltype);
161   }
162   $1 = &temp;
163 }
164 %typemap(out, fragment="SWIG_null_deleter") CONST TYPE *& {
165   SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(*$1 SWIG_NO_NULL_DELETER_$owner);
166   %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
167 }
168
169 %typemap(varin) CONST TYPE *& %{
170 #error "varin typemap not implemented"
171 %}
172 %typemap(varout) CONST TYPE *& %{
173 #error "varout typemap not implemented"
174 %}
175
176 // shared_ptr by value
177 %typemap(in) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > (void *argp, int res = 0) {
178   int newmem = 0;
179   res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
180   if (!SWIG_IsOK(res)) {
181     %argument_fail(res, "$type", $symname, $argnum); 
182   }
183   if (argp) $1 = *(%reinterpret_cast(argp, $&ltype));
184   if (newmem & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $&ltype);
185 }
186 %typemap(out) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > {
187   SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = $1 ? new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1) : 0;
188   %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
189 }
190
191 %typemap(varin) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > {
192   int newmem = 0;
193   void *argp = 0;
194   int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
195   if (!SWIG_IsOK(res)) {
196     %variable_fail(res, "$type", "$name");
197   }
198   $1 = argp ? *(%reinterpret_cast(argp, $&ltype)) : SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE >();
199   if (newmem & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $&ltype);
200 }
201 %typemap(varout) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > {
202   SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = $1 ? new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1) : 0;
203   %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
204 }
205
206 // shared_ptr by reference
207 %typemap(in) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > & (void *argp, int res = 0, $*1_ltype tempshared) {
208   int newmem = 0;
209   res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
210   if (!SWIG_IsOK(res)) {
211     %argument_fail(res, "$type", $symname, $argnum); 
212   }
213   if (newmem & SWIG_CAST_NEW_MEMORY) {
214     if (argp) tempshared = *%reinterpret_cast(argp, $ltype);
215     delete %reinterpret_cast(argp, $ltype);
216     $1 = &tempshared;
217   } else {
218     $1 = (argp) ? %reinterpret_cast(argp, $ltype) : &tempshared;
219   }
220 }
221 %typemap(out) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > & {
222   SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = *$1 ? new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(*$1) : 0;
223   %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
224 }
225
226 %typemap(varin) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > & %{
227 #error "varin typemap not implemented"
228 %}
229 %typemap(varout) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > & %{
230 #error "varout typemap not implemented"
231 %}
232
233 // shared_ptr by pointer
234 %typemap(in) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > * (void *argp, int res = 0, $*1_ltype tempshared) {
235   int newmem = 0;
236   res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
237   if (!SWIG_IsOK(res)) {
238     %argument_fail(res, "$type", $symname, $argnum); 
239   }
240   if (newmem & SWIG_CAST_NEW_MEMORY) {
241     if (argp) tempshared = *%reinterpret_cast(argp, $ltype);
242     delete %reinterpret_cast(argp, $ltype);
243     $1 = &tempshared;
244   } else {
245     $1 = (argp) ? %reinterpret_cast(argp, $ltype) : &tempshared;
246   }
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   if ($owner) delete $1;
252 }
253
254 %typemap(varin) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > * %{
255 #error "varin typemap not implemented"
256 %}
257 %typemap(varout) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > * %{
258 #error "varout typemap not implemented"
259 %}
260
261 // shared_ptr by pointer reference
262 %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) {
263   int newmem = 0;
264   res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), %convertptr_flags, &newmem);
265   if (!SWIG_IsOK(res)) {
266     %argument_fail(res, "$type", $symname, $argnum); 
267   }
268   if (argp) tempshared = *%reinterpret_cast(argp, $*ltype);
269   if (newmem & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $*ltype);
270   temp = &tempshared;
271   $1 = &temp;
272 }
273 %typemap(out) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& {
274   SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = *$1 && **$1 ? new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(**$1) : 0;
275   %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
276 }
277
278 %typemap(varin) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& %{
279 #error "varin typemap not implemented"
280 %}
281 %typemap(varout) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& %{
282 #error "varout typemap not implemented"
283 %}
284
285 // Typecheck typemaps
286 // Note: SWIG_ConvertPtr with void ** parameter set to 0 instead of using SWIG_ConvertPtrAndOwn, so that the casting 
287 // function is not called thereby avoiding a possible smart pointer copy constructor call when casting up the inheritance chain.
288 %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER,noblock=1) 
289                       CONST TYPE,
290                       CONST TYPE &,
291                       CONST TYPE *,
292                       CONST TYPE *&,
293                       SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >,
294                       SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > &,
295                       SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *,
296                       SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& {
297   int res = SWIG_ConvertPtr($input, 0, $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), 0);
298   $1 = SWIG_CheckState(res);
299 }
300
301
302 // various missing typemaps - If ever used (unlikely) ensure compilation error rather than runtime bug
303 %typemap(in) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{
304 #error "typemaps for $1_type not available"
305 %}
306 %typemap(out) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{
307 #error "typemaps for $1_type not available"
308 %}
309
310
311 %template() SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >;
312 %enddef
313