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