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