PageRenderTime 44ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Lib/typemaps/valtypes.swg

#
Unknown | 215 lines | 183 code | 32 blank | 0 comment | 0 complexity | 25189812fbbbf8b92db188f8676e0544 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. /*---------------------------------------------------------------------
  2. * Value typemaps (Type, const Type&) for value types, such as
  3. * fundamental types (int, double), that define the AsVal/From
  4. * methods.
  5. *
  6. * To apply them, just use one of the following macros:
  7. *
  8. * %typemaps_from(FromMeth, FromFrag, Type)
  9. * %typemaps_asval(CheckCode, AsValMeth, AsValFrag, Type)
  10. * %typemaps_asvalfrom(CheckCode, AsValMeth, FromMeth, AsValFrag, FromFrag, Type)
  11. *
  12. * or the simpler and normalize form:
  13. *
  14. * %typemaps_asvalfromn(CheckCode, Type)
  15. *
  16. * Also, you can use the individual typemap definitions:
  17. *
  18. * %value_in_typemap(asval_meth,frag,Type)
  19. * %value_varin_typemap(asval_meth,frag,Type)
  20. * %value_typecheck_typemap(checkcode,asval_meth,frag,Type)
  21. * %value_directorout_typemap(asval_meth,frag,Type)
  22. *
  23. * %value_out_typemap(from_meth,frag,Type)
  24. * %value_varout_typemap(from_meth,frag,Type)
  25. * %value_constcode_typemap(from_meth,frag,Type)
  26. * %value_directorin_typemap(from_meth,frag,Type)
  27. * %value_throws_typemap(from_meth,frag,Type)
  28. *
  29. *---------------------------------------------------------------------*/
  30. /* in */
  31. %define %value_in_typemap(asval_meth,frag,Type...)
  32. %typemap(in,noblock=1,fragment=frag) Type (Type val, int ecode = 0) {
  33. ecode = asval_meth($input, &val);
  34. if (!SWIG_IsOK(ecode)) {
  35. %argument_fail(ecode, "$ltype", $symname, $argnum);
  36. }
  37. $1 = %static_cast(val,$ltype);
  38. }
  39. %typemap(freearg) Type "";
  40. %typemap(in,noblock=1,fragment=frag) const Type & ($*ltype temp, Type val, int ecode = 0) {
  41. ecode = asval_meth($input, &val);
  42. if (!SWIG_IsOK(ecode)) {
  43. %argument_fail(ecode, "$*ltype", $symname, $argnum);
  44. }
  45. temp = %static_cast(val, $*ltype);
  46. $1 = &temp;
  47. }
  48. %typemap(freearg) const Type& "";
  49. %enddef
  50. /* out */
  51. %define %value_out_typemap(from_meth,frag,Type...)
  52. %typemap(out,noblock=1,fragment=frag) Type, const Type {
  53. %set_output(from_meth(%static_cast($1,Type)));
  54. }
  55. %typemap(out,noblock=1,fragment=frag) const Type& {
  56. %set_output(from_meth(%static_cast(*$1,Type)));
  57. }
  58. %enddef
  59. /* varin */
  60. %define %value_varin_typemap(asval_meth,frag,Type...)
  61. %typemap(varin,fragment=frag) Type {
  62. Type val;
  63. int res = asval_meth($input, &val);
  64. if (!SWIG_IsOK(res)) {
  65. %variable_fail(res, "$type", "$name");
  66. }
  67. $1 = %static_cast(val,$ltype);
  68. }
  69. %enddef
  70. /* varout */
  71. %define %value_varout_typemap(from_meth,frag,Type...)
  72. %typemap(varout,noblock=1,fragment=frag) Type, const Type& {
  73. %set_varoutput(from_meth(%static_cast($1,Type)));
  74. }
  75. %enddef
  76. /* constant installation code */
  77. %define %value_constcode_typemap(from_meth,frag,Type...)
  78. %typemap(constcode,noblock=1,fragment=frag) Type {
  79. %set_constant("$symname", from_meth(%static_cast($value,Type)));
  80. }
  81. %enddef
  82. #if defined(SWIG_DIRECTOR_TYPEMAPS)
  83. /* directorin */
  84. %define %value_directorin_typemap(from_meth,frag,Type...)
  85. %typemap(directorin,noblock=1,fragment=frag) Type *DIRECTORIN {
  86. $input = from_meth(%static_cast(*$1,Type));
  87. }
  88. %typemap(directorin,noblock=1,fragment=frag) Type, const Type& {
  89. $input = from_meth(%static_cast($1,Type));
  90. }
  91. %enddef
  92. /* directorout */
  93. %define %value_directorout_typemap(asval_meth,frag,Type...)
  94. %typemap(directorargout,noblock=1,fragment=frag) Type *DIRECTOROUT(Type swig_val, int swig_res) {
  95. swig_res = asval_meth($result, &swig_val);
  96. if (!SWIG_IsOK(swig_res)) {
  97. %dirout_fail(swig_res, "$type");
  98. }
  99. *$1 = swig_val;
  100. }
  101. %typemap(directorout,noblock=1,fragment=frag) Type {
  102. Type swig_val;
  103. int swig_res = asval_meth($input, &swig_val);
  104. if (!SWIG_IsOK(swig_res)) {
  105. %dirout_fail(swig_res, "$type");
  106. }
  107. $result = %static_cast(swig_val,$type);
  108. }
  109. %typemap(directorout,noblock=1,fragment=frag,warning=SWIGWARN_TYPEMAP_DIRECTOROUT_PTR_MSG) const Type& {
  110. Type swig_val;
  111. int swig_res = asval_meth($input, &swig_val);
  112. if (!SWIG_IsOK(swig_res)) {
  113. %dirout_fail(swig_res, "$type");
  114. }
  115. $basetype *temp = new $basetype(($basetype)swig_val);
  116. swig_acquire_ownership(temp);
  117. $result = temp;
  118. }
  119. %typemap(directorfree,noblock=1) const Type & {
  120. if (director) {
  121. director->swig_release_ownership(%as_voidptr($input));
  122. }
  123. }
  124. %typemap(directorout,fragment=frag) Type &DIRECTOROUT = Type
  125. %enddef
  126. #else
  127. #define %value_directorin_typemap(from_meth,frag,Type...)
  128. #define %value_directorout_typemap(asval_meth,frag,Type...)
  129. #endif /* SWIG_DIRECTOR_TYPEMAPS */
  130. /* throws */
  131. %define %value_throws_typemap(from_meth,frag,Type...)
  132. %typemap(throws,noblock=1,fragment=frag) Type {
  133. %raise(from_meth(%static_cast($1,Type)), "$type", 0);
  134. }
  135. %enddef
  136. /* typecheck */
  137. %define %value_typecheck_typemap(check,asval_meth,frag,Type...)
  138. %typemap(typecheck,precedence=check,fragment=frag) Type, const Type& {
  139. int res = asval_meth($input, NULL);
  140. $1 = SWIG_CheckState(res);
  141. }
  142. %enddef
  143. /*---------------------------------------------------------------------
  144. * typemap definition for types with AsVal methods
  145. *---------------------------------------------------------------------*/
  146. %define %typemaps_asval(CheckCode, AsValMeth, AsValFrag, Type...)
  147. %value_in_typemap(%arg(AsValMeth), %arg(AsValFrag), Type);
  148. %value_varin_typemap(%arg(AsValMeth), %arg(AsValFrag), Type);
  149. %value_directorout_typemap(%arg(AsValMeth), %arg(AsValFrag), Type);
  150. %value_typecheck_typemap(%arg(CheckCode), %arg(AsValMeth), %arg(AsValFrag), Type);
  151. %value_input_typemap(%arg(CheckCode), %arg(AsValMeth), %arg(AsValFrag), Type);
  152. %enddef
  153. /*---------------------------------------------------------------------
  154. * typemap definition for types with from method
  155. *---------------------------------------------------------------------*/
  156. %define %typemaps_from(FromMeth, FromFrag, Type...)
  157. %value_out_typemap(%arg(FromMeth), %arg(FromFrag), Type);
  158. %value_varout_typemap(%arg(FromMeth), %arg(FromFrag), Type);
  159. %value_constcode_typemap(%arg(FromMeth), %arg(FromFrag), Type);
  160. %value_directorin_typemap(%arg(FromMeth), %arg(FromFrag), Type);
  161. %value_throws_typemap(%arg(FromMeth), %arg(FromFrag), Type);
  162. %value_output_typemap(%arg(FromMeth), %arg(FromFrag), Type);
  163. %enddef
  164. /*---------------------------------------------------------------------
  165. * typemap definition for types with alval/from method
  166. *---------------------------------------------------------------------*/
  167. %define %typemaps_asvalfrom(CheckCode, AsValMeth, FromMeth,
  168. AsValFrag, FromFrag, Type...)
  169. %typemaps_asval(%arg(CheckCode), %arg(AsValMeth), %arg(AsValFrag), Type);
  170. %typemaps_from(%arg(FromMeth), %arg(FromFrag), Type);
  171. %value_inout_typemap(Type);
  172. %enddef
  173. /*---------------------------------------------------------------------
  174. * typemap definition for types with for 'normalized' asval/from methods
  175. *---------------------------------------------------------------------*/
  176. %define %typemaps_asvalfromn(CheckCode, Type...)
  177. %typemaps_asvalfrom(%arg(CheckCode),
  178. SWIG_AsVal(Type),
  179. SWIG_From(Type),
  180. %arg(SWIG_AsVal_frag(Type)),
  181. %arg(SWIG_From_frag(Type)),
  182. Type);
  183. %enddef