| %module csharp_typemaps |
| |
| // Test the C# types customisation by modifying the default char * typemaps to return a single char |
| |
| %typemap(ctype, out="char /*ctype out override*/") char * "char *" |
| %typemap(imtype, out="char /*imtype out override*/") char * "string" |
| %typemap(cstype, out="char /*cstype out override*/") char * "string" |
| |
| %typemap(out) char * %{ |
| // return the 0th element rather than the whole string |
| $result = SWIG_csharp_string_callback($1)[0]; |
| %} |
| |
| %typemap(csout, excode=SWIGEXCODE) char * { |
| char ret = $imcall;$excode |
| return ret; |
| } |
| |
| %typemap(csvarout, excode=SWIGEXCODE2) char * %{ |
| get { |
| char ret = $imcall;$excode |
| return ret; |
| } %} |
| |
| %inline %{ |
| namespace Space { |
| class Things { |
| public: |
| char* start(char *val) { return val; } |
| static char* stop(char *val) { return val; } |
| }; |
| char* partyon(char *val) { return val; } |
| } |
| %} |
| |
| |
| // Test variables when ref is used in the cstype typemap - the variable name should come from the out attribute if specified |
| %typemap(cstype) MKVector, const MKVector& "MKVector" |
| %typemap(cstype, out="MKVector") MKVector &, MKVector * "ref MKVector" |
| |
| %inline %{ |
| struct MKVector { |
| }; |
| struct MKRenderGameVector { |
| MKVector memberValue; |
| static MKVector staticValue; |
| }; |
| MKVector MKRenderGameVector::staticValue; |
| MKVector globalValue; |
| %} |
| |
| |
| // Number and Obj are for the eager garbage collector runtime test |
| %inline %{ |
| struct Number { |
| Number(double value) : Value(value) {} |
| double Value; |
| }; |
| |
| class Obj { |
| public: |
| Number triple(Number n) { |
| n.Value *= 3; |
| return n; |
| } |
| Number times6(const Number& num) { |
| Number n(num); |
| n.Value *= 6; |
| return n; |
| } |
| Number times9(const Number* num) { |
| Number n(*num); |
| n.Value *= 9; |
| return n; |
| } |
| }; |
| Number quadruple(Number n) { |
| n.Value *= 4; |
| return n; |
| }; |
| Number times8(const Number& num) { |
| Number n(num); |
| n.Value *= 8; |
| return n; |
| }; |
| Number times12(const Number* num) { |
| Number n(*num); |
| n.Value *= 12; |
| return n; |
| }; |
| %} |
| |
| // Test $csinput expansion |
| %typemap(csvarin, excode=SWIGEXCODE2) int %{ |
| set { |
| if ($csinput < 0) |
| throw new ApplicationException("number too small!"); |
| $imcall;$excode |
| } %} |
| |
| %inline %{ |
| int myInt = 0; |
| %} |