%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 global::System.ApplicationException("number too small!"); $imcall;$excode } %} %inline %{ int myInt = 0; %} // Illegal special variable crash %typemap(cstype) WasCrashing "$csclassname /*cstype $*csclassname*/" // $*csclassname was causing crash %inline %{ struct WasCrashing {}; void hoop(WasCrashing was) {} %} // Enum underlying type %typemap(csbase) BigNumbers "uint" %inline %{ enum BigNumbers { big=0x80000000, bigger }; %} // Member variable qualification %typemap(cstype) bool "badtype1" %typemap(cstype) bool mvar "badtype2" %typemap(cstype) bool svar "badtype4" %typemap(cstype) bool gvar "badtype5" %typemap(cstype) bool MVar::mvar "bool" %typemap(cstype) bool MVar::svar "bool" %typemap(cstype) bool Glob::gvar "bool" %inline %{ struct MVar { bool mvar; static bool svar; }; namespace Glob { bool gvar; } bool MVar::svar = false; %}