Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

229 lines
9.5 KiB

  1. %include <shared_ptr.i>
  2. %define SWIG_SHARED_PTR_TYPEMAPS(PROXYCLASS, CONST, TYPE...)
  3. %naturalvar TYPE;
  4. %naturalvar SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >;
  5. // destructor mods
  6. %feature("unref") TYPE
  7. //"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"
  8. "(void)arg1; delete smartarg1;"
  9. // plain value
  10. %typemap(in, canthrow=1) CONST TYPE ($&1_type argp = 0) %{
  11. argp = ((SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *)$input) ? ((SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *)$input)->get() : 0;
  12. if (!argp) {
  13. SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null $1_type", 0);
  14. return $null;
  15. }
  16. $1 = *argp; %}
  17. %typemap(out) CONST TYPE
  18. %{ $result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(new $1_ltype(($1_ltype &)$1)); %}
  19. // plain pointer
  20. %typemap(in, canthrow=1) CONST TYPE * (SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartarg = 0) %{
  21. smartarg = (SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *)$input;
  22. $1 = (TYPE *)(smartarg ? smartarg->get() : 0); %}
  23. %typemap(out, fragment="SWIG_null_deleter") CONST TYPE * %{
  24. $result = $1 ? new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_$owner) : 0;
  25. %}
  26. // plain reference
  27. %typemap(in, canthrow=1) CONST TYPE & %{
  28. $1 = ($1_ltype)(((SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *)$input) ? ((SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *)$input)->get() : 0);
  29. if(!$1) {
  30. SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "$1_type reference is null", 0);
  31. return $null;
  32. } %}
  33. %typemap(out, fragment="SWIG_null_deleter") CONST TYPE &
  34. %{ $result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_$owner); %}
  35. // plain pointer by reference
  36. %typemap(in) CONST TYPE *& ($*1_ltype temp = 0)
  37. %{ temp = (((SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *)$input) ? ((SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *)$input)->get() : 0);
  38. $1 = &temp; %}
  39. %typemap(out, fragment="SWIG_null_deleter") CONST TYPE *&
  40. %{ $result = new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(*$1 SWIG_NO_NULL_DELETER_$owner); %}
  41. // shared_ptr by value
  42. %typemap(in) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >
  43. %{ if ($input) $1 = *($&1_ltype)$input; %}
  44. %typemap(out) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >
  45. %{ $result = $1 ? new $1_ltype($1) : 0; %}
  46. // shared_ptr by reference
  47. %typemap(in, canthrow=1) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > & ($*1_ltype tempnull)
  48. %{ $1 = $input ? ($1_ltype)$input : &tempnull; %}
  49. %typemap(out) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > &
  50. %{ $result = *$1 ? new $*1_ltype(*$1) : 0; %}
  51. // shared_ptr by pointer
  52. %typemap(in) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > * ($*1_ltype tempnull)
  53. %{ $1 = $input ? ($1_ltype)$input : &tempnull; %}
  54. %typemap(out, fragment="SWIG_null_deleter") SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *
  55. %{ $result = ($1 && *$1) ? new $*1_ltype(*($1_ltype)$1) : 0;
  56. if ($owner) delete $1; %}
  57. // shared_ptr by pointer reference
  58. %typemap(in) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& (SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > tempnull, $*1_ltype temp = 0)
  59. %{ temp = $input ? *($1_ltype)&$input : &tempnull;
  60. $1 = &temp; %}
  61. %typemap(out) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *&
  62. %{ *($1_ltype)&$result = (*$1 && **$1) ? new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >(**$1) : 0; %}
  63. // various missing typemaps - If ever used (unlikely) ensure compilation error rather than runtime bug
  64. %typemap(in) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{
  65. #error "typemaps for $1_type not available"
  66. %}
  67. %typemap(out) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{
  68. #error "typemaps for $1_type not available"
  69. %}
  70. %typemap (ctype) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >,
  71. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > &,
  72. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *,
  73. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& "void *"
  74. %typemap (imtype, out="IntPtr") SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >,
  75. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > &,
  76. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *,
  77. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& "HandleRef"
  78. %typemap (cstype) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >,
  79. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > &,
  80. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *,
  81. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& "PROXYCLASS"
  82. %typemap(csin) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >,
  83. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > &,
  84. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *,
  85. SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& "PROXYCLASS.getCPtr($csinput)"
  86. %typemap(csout, excode=SWIGEXCODE) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > {
  87. IntPtr cPtr = $imcall;
  88. PROXYCLASS ret = (cPtr == IntPtr.Zero) ? null : new PROXYCLASS(cPtr, true);$excode
  89. return ret;
  90. }
  91. %typemap(csout, excode=SWIGEXCODE) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > & {
  92. IntPtr cPtr = $imcall;
  93. PROXYCLASS ret = (cPtr == IntPtr.Zero) ? null : new PROXYCLASS(cPtr, true);$excode
  94. return ret;
  95. }
  96. %typemap(csout, excode=SWIGEXCODE) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > * {
  97. IntPtr cPtr = $imcall;
  98. PROXYCLASS ret = (cPtr == IntPtr.Zero) ? null : new PROXYCLASS(cPtr, true);$excode
  99. return ret;
  100. }
  101. %typemap(csout, excode=SWIGEXCODE) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *& {
  102. IntPtr cPtr = $imcall;
  103. PROXYCLASS ret = (cPtr == IntPtr.Zero) ? null : new PROXYCLASS(cPtr, true);$excode
  104. return ret;
  105. }
  106. %typemap(csout, excode=SWIGEXCODE) CONST TYPE {
  107. PROXYCLASS ret = new PROXYCLASS($imcall, true);$excode
  108. return ret;
  109. }
  110. %typemap(csout, excode=SWIGEXCODE) CONST TYPE & {
  111. PROXYCLASS ret = new PROXYCLASS($imcall, true);$excode
  112. return ret;
  113. }
  114. %typemap(csout, excode=SWIGEXCODE) CONST TYPE * {
  115. IntPtr cPtr = $imcall;
  116. PROXYCLASS ret = (cPtr == IntPtr.Zero) ? null : new PROXYCLASS(cPtr, true);$excode
  117. return ret;
  118. }
  119. %typemap(csout, excode=SWIGEXCODE) CONST TYPE *& {
  120. IntPtr cPtr = $imcall;
  121. PROXYCLASS ret = (cPtr == IntPtr.Zero) ? null : new PROXYCLASS(cPtr, true);$excode
  122. return ret;
  123. }
  124. %typemap(csvarout, excode=SWIGEXCODE2) CONST TYPE & %{
  125. get {
  126. $csclassname ret = new $csclassname($imcall, true);$excode
  127. return ret;
  128. } %}
  129. %typemap(csvarout, excode=SWIGEXCODE2) CONST TYPE * %{
  130. get {
  131. IntPtr cPtr = $imcall;
  132. $csclassname ret = (cPtr == IntPtr.Zero) ? null : new $csclassname(cPtr, true);$excode
  133. return ret;
  134. } %}
  135. %typemap(csvarout, excode=SWIGEXCODE2) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > & %{
  136. get {
  137. IntPtr cPtr = $imcall;
  138. PROXYCLASS ret = (cPtr == IntPtr.Zero) ? null : new PROXYCLASS(cPtr, true);$excode
  139. return ret;
  140. } %}
  141. %typemap(csvarout, excode=SWIGEXCODE2) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > * %{
  142. get {
  143. IntPtr cPtr = $imcall;
  144. PROXYCLASS ret = (cPtr == IntPtr.Zero) ? null : new PROXYCLASS(cPtr, true);$excode
  145. return ret;
  146. } %}
  147. // Proxy classes (base classes, ie, not derived classes)
  148. %typemap(csbody) TYPE %{
  149. private HandleRef swigCPtr;
  150. private bool swigCMemOwnBase;
  151. internal $csclassname(IntPtr cPtr, bool cMemoryOwn) {
  152. swigCMemOwnBase = cMemoryOwn;
  153. swigCPtr = new HandleRef(this, cPtr);
  154. }
  155. internal static HandleRef getCPtr($csclassname obj) {
  156. return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
  157. }
  158. %}
  159. // Derived proxy classes
  160. %typemap(csbody_derived) TYPE %{
  161. private HandleRef swigCPtr;
  162. private bool swigCMemOwnDerived;
  163. internal $csclassname(IntPtr cPtr, bool cMemoryOwn) : base($imclassname.$csclassname_SWIGSharedPtrUpcast(cPtr), true) {
  164. swigCMemOwnDerived = cMemoryOwn;
  165. swigCPtr = new HandleRef(this, cPtr);
  166. }
  167. internal static HandleRef getCPtr($csclassname obj) {
  168. return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
  169. }
  170. %}
  171. %typemap(csdestruct, methodname="Dispose", methodmodifiers="public") TYPE {
  172. lock(this) {
  173. if(swigCPtr.Handle != IntPtr.Zero && swigCMemOwnBase) {
  174. swigCMemOwnBase = false;
  175. $imcall;
  176. }
  177. swigCPtr = new HandleRef(null, IntPtr.Zero);
  178. GC.SuppressFinalize(this);
  179. }
  180. }
  181. %typemap(csdestruct_derived, methodname="Dispose", methodmodifiers="public") TYPE {
  182. lock(this) {
  183. if(swigCPtr.Handle != IntPtr.Zero && swigCMemOwnDerived) {
  184. swigCMemOwnDerived = false;
  185. $imcall;
  186. }
  187. swigCPtr = new HandleRef(null, IntPtr.Zero);
  188. GC.SuppressFinalize(this);
  189. base.Dispose();
  190. }
  191. }
  192. %typemap(imtype) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > swigSharedPtrUpcast "IntPtr"
  193. %typemap(csin) SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > swigSharedPtrUpcast "PROXYCLASS.getCPtr($csinput).Handle"
  194. %template() SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >;
  195. %enddef