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
14// plain value
15%typemap(in) CONST TYPE ($&1_type argp = 0) %{
16  argp = (*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input) ? (*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input)->get() : 0;
17  if (!argp) {
18    SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null $1_type");
19    return $null;
20  }
21  $1 = *argp; %}
22%typemap(out) CONST TYPE
23%{ *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(new $1_ltype(($1_ltype &)$1)); %}
24
25// plain pointer
26%typemap(in) CONST TYPE * (SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartarg = 0) %{
27  smartarg = *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input;
28  $1 = (TYPE *)(smartarg ? smartarg->get() : 0); %}
29%typemap(out, fragment="SWIG_null_deleter") CONST TYPE * %{
30  *(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;
31%}
32
33// plain reference
34%typemap(in) CONST TYPE & %{
35  $1 = ($1_ltype)((*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input) ? (*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input)->get() : 0);
36  if (!$1) {
37    SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "$1_type reference is null");
38    return $null;
39  } %}
40%typemap(out, fragment="SWIG_null_deleter") CONST TYPE &
41%{ *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_$owner); %}
42
43// plain pointer by reference
44%typemap(in) CONST TYPE *& ($*1_ltype temp = 0)
45%{ temp = ((*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input) ? (*(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$input)->get() : 0);
46   $1 = &temp; %}
47%typemap(out, fragment="SWIG_null_deleter") CONST TYPE *&
48%{ *(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > **)&$result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(*$1 SWIG_NO_NULL_DELETER_$owner); %}
49
50// shared_ptr by value
51%typemap(in) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > ($&1_type argp)
52%{ argp = *($&1_ltype*)&$input;
53   if (argp) $1 = *argp; %}
54%typemap(out) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >
55%{ *($&1_ltype*)&$result = $1 ? new $1_ltype($1) : 0; %}
56
57// shared_ptr by reference
58%typemap(in) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > & ($*1_ltype tempnull)
59%{ $1 = $input ? *($&1_ltype)&$input : &tempnull; %}
60%typemap(out) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > &
61%{ *($&1_ltype)&$result = *$1 ? new $*1_ltype(*$1) : 0; %}
62
63// shared_ptr by pointer
64%typemap(in) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > * ($*1_ltype tempnull)
65%{ $1 = $input ? *($&1_ltype)&$input : &tempnull; %}
66%typemap(out) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *
67%{ *($&1_ltype)&$result = ($1 && *$1) ? new $*1_ltype(*$1) : 0;
68   if ($owner) delete $1; %}
69
70// shared_ptr by pointer reference
71%typemap(in) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& (SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > tempnull, $*1_ltype temp = 0)
72%{ temp = $input ? *($1_ltype)&$input : &tempnull;
73   $1 = &temp; %}
74%typemap(out) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *&
75%{ *($1_ltype)&$result = (*$1 && **$1) ? new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(**$1) : 0; %}
76
77// various missing typemaps - If ever used (unlikely) ensure compilation error rather than runtime bug
78%typemap(in) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{
79#error "typemaps for $1_type not available"
80%}
81%typemap(out) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{
82#error "typemaps for $1_type not available"
83%}
84
85
86%typemap (jni)    SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >,
87                  SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > &,
88                  SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *,
89                  SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& "jlong"
90%typemap (jtype)  SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >,
91                  SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > &,
92                  SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *,
93                  SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& "long"
94%typemap (jstype) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >,
95                  SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > &,
96                  SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *,
97                  SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& "PROXYCLASS"
98
99%typemap(javain) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >,
100                 SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > &,
101                 SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *,
102                 SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& "PROXYCLASS.getCPtr($javainput)"
103
104%typemap(javaout) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > {
105    long cPtr = $jnicall;
106    return (cPtr == 0) ? null : new PROXYCLASS(cPtr, true);
107  }
108%typemap(javaout) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > & {
109    long cPtr = $jnicall;
110    return (cPtr == 0) ? null : new PROXYCLASS(cPtr, true);
111  }
112%typemap(javaout) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > * {
113    long cPtr = $jnicall;
114    return (cPtr == 0) ? null : new PROXYCLASS(cPtr, true);
115  }
116%typemap(javaout) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& {
117    long cPtr = $jnicall;
118    return (cPtr == 0) ? null : new PROXYCLASS(cPtr, true);
119  }
120
121
122%typemap(javaout) CONST TYPE {
123    return new PROXYCLASS($jnicall, true);
124  }
125%typemap(javaout) CONST TYPE & {
126    return new PROXYCLASS($jnicall, true);
127  }
128%typemap(javaout) CONST TYPE * {
129    long cPtr = $jnicall;
130    return (cPtr == 0) ? null : new PROXYCLASS(cPtr, true);
131  }
132%typemap(javaout) CONST TYPE *& {
133    long cPtr = $jnicall;
134    return (cPtr == 0) ? null : new PROXYCLASS(cPtr, true);
135  }
136
137// Base proxy classes
138%typemap(javabody) TYPE %{
139  private long swigCPtr;
140  private boolean swigCMemOwnBase;
141
142  protected $javaclassname(long cPtr, boolean cMemoryOwn) {
143    swigCMemOwnBase = cMemoryOwn;
144    swigCPtr = cPtr;
145  }
146
147  protected static long getCPtr($javaclassname obj) {
148    return (obj == null) ? 0 : obj.swigCPtr;
149  }
150%}
151
152// Derived proxy classes
153%typemap(javabody_derived) TYPE %{
154  private long swigCPtr;
155  private boolean swigCMemOwnDerived;
156
157  protected $javaclassname(long cPtr, boolean cMemoryOwn) {
158    super($imclassname.$javaclassname_SWIGSharedPtrUpcast(cPtr), true);
159    swigCMemOwnDerived = cMemoryOwn;
160    swigCPtr = cPtr;
161  }
162
163  protected static long getCPtr($javaclassname obj) {
164    return (obj == null) ? 0 : obj.swigCPtr;
165  }
166%}
167
168%typemap(javadestruct, methodname="delete", methodmodifiers="public synchronized") TYPE {
169    if (swigCPtr != 0) {
170      if (swigCMemOwnBase) {
171        swigCMemOwnBase = false;
172        $jnicall;
173      }
174      swigCPtr = 0;
175    }
176  }
177
178%typemap(javadestruct_derived, methodname="delete", methodmodifiers="public synchronized") TYPE {
179    if (swigCPtr != 0) {
180      if (swigCMemOwnDerived) {
181        swigCMemOwnDerived = false;
182        $jnicall;
183      }
184      swigCPtr = 0;
185    }
186    super.delete();
187  }
188
189// CONST version needed ???? also for C#
190%typemap(jtype, nopgcpp="1") SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > swigSharedPtrUpcast "long"
191%typemap(jtype, nopgcpp="1") SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > swigSharedPtrUpcast "long"
192
193
194%template() SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >;
195%enddef
196
197