PageRenderTime 38ms CodeModel.GetById 29ms app.highlight 4ms RepoModel.GetById 1ms app.codeStats 0ms

/trunk/Lib/typemaps/valtypes.swg

#
Unknown | 215 lines | 183 code | 32 blank | 0 comment | 0 complexity | 25189812fbbbf8b92db188f8676e0544 MD5 | raw file
  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
 31/* in */
 32
 33%define %value_in_typemap(asval_meth,frag,Type...)
 34  %typemap(in,noblock=1,fragment=frag) Type (Type val, int ecode = 0) {
 35    ecode = asval_meth($input, &val);
 36    if (!SWIG_IsOK(ecode)) {
 37      %argument_fail(ecode, "$ltype", $symname, $argnum);
 38    } 
 39    $1 = %static_cast(val,$ltype);
 40  }
 41  %typemap(freearg) Type "";
 42  %typemap(in,noblock=1,fragment=frag) const Type & ($*ltype temp, Type val, int ecode = 0) {  
 43    ecode = asval_meth($input, &val);
 44    if (!SWIG_IsOK(ecode)) {
 45      %argument_fail(ecode, "$*ltype", $symname, $argnum);
 46    } 
 47    temp = %static_cast(val, $*ltype);
 48    $1 = &temp;
 49  }
 50  %typemap(freearg) const Type& "";
 51%enddef
 52
 53/* out */
 54
 55%define %value_out_typemap(from_meth,frag,Type...)
 56  %typemap(out,noblock=1,fragment=frag) Type, const Type {
 57    %set_output(from_meth(%static_cast($1,Type))); 
 58  }
 59  %typemap(out,noblock=1,fragment=frag) const Type& {
 60    %set_output(from_meth(%static_cast(*$1,Type))); 
 61  }
 62%enddef
 63
 64/* varin */
 65
 66%define %value_varin_typemap(asval_meth,frag,Type...)
 67  %typemap(varin,fragment=frag) Type {
 68    Type val;
 69    int res = asval_meth($input, &val);
 70    if (!SWIG_IsOK(res)) {
 71      %variable_fail(res, "$type", "$name");
 72    }
 73    $1 = %static_cast(val,$ltype);
 74  }
 75%enddef
 76
 77/* varout */
 78
 79%define %value_varout_typemap(from_meth,frag,Type...)
 80  %typemap(varout,noblock=1,fragment=frag) Type, const Type&  {
 81    %set_varoutput(from_meth(%static_cast($1,Type)));
 82  }
 83%enddef
 84
 85/* constant installation code */
 86
 87%define %value_constcode_typemap(from_meth,frag,Type...)
 88  %typemap(constcode,noblock=1,fragment=frag) Type {
 89    %set_constant("$symname", from_meth(%static_cast($value,Type)));
 90  }
 91%enddef
 92
 93
 94#if defined(SWIG_DIRECTOR_TYPEMAPS)
 95
 96/* directorin */
 97
 98%define %value_directorin_typemap(from_meth,frag,Type...)
 99  %typemap(directorin,noblock=1,fragment=frag) Type *DIRECTORIN {
100    $input = from_meth(%static_cast(*$1,Type)); 
101  }
102  %typemap(directorin,noblock=1,fragment=frag) Type, const Type& {
103    $input = from_meth(%static_cast($1,Type)); 
104  }
105%enddef
106
107/* directorout */
108
109%define %value_directorout_typemap(asval_meth,frag,Type...)
110  %typemap(directorargout,noblock=1,fragment=frag) Type *DIRECTOROUT(Type swig_val, int swig_res) {
111    swig_res = asval_meth($result, &swig_val);
112    if (!SWIG_IsOK(swig_res)) {
113      %dirout_fail(swig_res, "$type");
114    } 
115    *$1 = swig_val;
116  }
117  %typemap(directorout,noblock=1,fragment=frag) Type {
118    Type swig_val;
119    int swig_res = asval_meth($input, &swig_val);
120    if (!SWIG_IsOK(swig_res)) {
121      %dirout_fail(swig_res, "$type");
122    }
123    $result = %static_cast(swig_val,$type);
124  }
125  %typemap(directorout,noblock=1,fragment=frag,warning=SWIGWARN_TYPEMAP_DIRECTOROUT_PTR_MSG) const Type& {  
126    Type swig_val;
127    int swig_res = asval_meth($input, &swig_val);
128    if (!SWIG_IsOK(swig_res)) {
129      %dirout_fail(swig_res, "$type");
130    } 
131    $basetype *temp = new $basetype(($basetype)swig_val);
132    swig_acquire_ownership(temp);
133    $result = temp;
134  }
135  %typemap(directorfree,noblock=1) const Type & {
136    if (director) {
137      director->swig_release_ownership(%as_voidptr($input));
138    }
139  }
140  %typemap(directorout,fragment=frag) Type &DIRECTOROUT = Type
141%enddef
142
143#else
144
145#define %value_directorin_typemap(from_meth,frag,Type...)
146#define %value_directorout_typemap(asval_meth,frag,Type...)
147
148#endif /* SWIG_DIRECTOR_TYPEMAPS */
149
150
151/* throws */
152
153%define %value_throws_typemap(from_meth,frag,Type...)
154  %typemap(throws,noblock=1,fragment=frag) Type {
155    %raise(from_meth(%static_cast($1,Type)), "$type", 0);
156  }
157%enddef
158
159/* typecheck */
160
161%define %value_typecheck_typemap(check,asval_meth,frag,Type...)
162  %typemap(typecheck,precedence=check,fragment=frag) Type, const Type& {
163    int res = asval_meth($input, NULL);
164    $1 = SWIG_CheckState(res);
165  }
166%enddef
167
168/*---------------------------------------------------------------------
169 * typemap definition for types with AsVal methods
170 *---------------------------------------------------------------------*/
171%define %typemaps_asval(CheckCode, AsValMeth, AsValFrag, Type...)
172  %value_in_typemap(%arg(AsValMeth), %arg(AsValFrag), Type);
173  %value_varin_typemap(%arg(AsValMeth), %arg(AsValFrag), Type);
174  %value_directorout_typemap(%arg(AsValMeth), %arg(AsValFrag), Type);
175  %value_typecheck_typemap(%arg(CheckCode), %arg(AsValMeth), %arg(AsValFrag), Type);
176  %value_input_typemap(%arg(CheckCode), %arg(AsValMeth), %arg(AsValFrag), Type);
177%enddef
178
179
180/*---------------------------------------------------------------------
181 * typemap definition for types with from method
182 *---------------------------------------------------------------------*/
183%define %typemaps_from(FromMeth, FromFrag, Type...)
184  %value_out_typemap(%arg(FromMeth), %arg(FromFrag), Type);
185  %value_varout_typemap(%arg(FromMeth), %arg(FromFrag), Type);
186  %value_constcode_typemap(%arg(FromMeth), %arg(FromFrag), Type);
187  %value_directorin_typemap(%arg(FromMeth), %arg(FromFrag), Type);
188  %value_throws_typemap(%arg(FromMeth), %arg(FromFrag), Type);
189  %value_output_typemap(%arg(FromMeth), %arg(FromFrag), Type);
190%enddef
191
192
193/*---------------------------------------------------------------------
194 * typemap definition for types with alval/from method
195 *---------------------------------------------------------------------*/
196
197%define %typemaps_asvalfrom(CheckCode, AsValMeth, FromMeth,
198			   AsValFrag, FromFrag, Type...)
199  %typemaps_asval(%arg(CheckCode), %arg(AsValMeth), %arg(AsValFrag), Type);
200  %typemaps_from(%arg(FromMeth), %arg(FromFrag), Type);
201  %value_inout_typemap(Type);
202%enddef
203
204
205/*---------------------------------------------------------------------
206 * typemap definition for types  with for 'normalized' asval/from methods
207 *---------------------------------------------------------------------*/
208%define %typemaps_asvalfromn(CheckCode, Type...)
209  %typemaps_asvalfrom(%arg(CheckCode),
210		     SWIG_AsVal(Type), 
211		     SWIG_From(Type), 
212		     %arg(SWIG_AsVal_frag(Type)),
213		     %arg(SWIG_From_frag(Type)), 
214		     Type);
215%enddef