1c9602284a7e0501778f4711d073c454e875de45fAlice Ching/* ----------------------------------------------------------------------------- 2c9602284a7e0501778f4711d073c454e875de45fAlice Ching * enumtypesafe.swg 3c9602284a7e0501778f4711d073c454e875de45fAlice Ching * 4c9602284a7e0501778f4711d073c454e875de45fAlice Ching * Include this file in order for C/C++ enums to be wrapped by the so called 5c9602284a7e0501778f4711d073c454e875de45fAlice Ching * typesafe enum pattern. Each enum has an equivalent C# class named after the 6c9602284a7e0501778f4711d073c454e875de45fAlice Ching * enum and each enum item is a static instance of this class. 7c9602284a7e0501778f4711d073c454e875de45fAlice Ching * ----------------------------------------------------------------------------- */ 8c9602284a7e0501778f4711d073c454e875de45fAlice Ching 9c9602284a7e0501778f4711d073c454e875de45fAlice Ching// const enum SWIGTYPE & typemaps 10c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(ctype) const enum SWIGTYPE & "int" 11c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(imtype) const enum SWIGTYPE & "int" 12c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(cstype) const enum SWIGTYPE & "$*csclassname" 13c9602284a7e0501778f4711d073c454e875de45fAlice Ching 14c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(in) const enum SWIGTYPE & ($*1_ltype temp) 15c9602284a7e0501778f4711d073c454e875de45fAlice Ching%{ temp = ($*1_ltype)$input; 16c9602284a7e0501778f4711d073c454e875de45fAlice Ching $1 = &temp; %} 17c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(out) const enum SWIGTYPE & %{ $result = *$1; %} 18c9602284a7e0501778f4711d073c454e875de45fAlice Ching 19c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const enum SWIGTYPE & 20c9602284a7e0501778f4711d073c454e875de45fAlice Ching%{ static $*1_ltype temp = ($*1_ltype)$input; 21c9602284a7e0501778f4711d073c454e875de45fAlice Ching $result = &temp; %} 22c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(directorin) const enum SWIGTYPE & "$input = $1;" 23c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(csdirectorin) const enum SWIGTYPE & "$*csclassname.swigToEnum($iminput)" 24c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(csdirectorout) const enum SWIGTYPE & "$cscall.swigValue" 25c9602284a7e0501778f4711d073c454e875de45fAlice Ching 26c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typecheck(SWIG_TYPECHECK_POINTER) const enum SWIGTYPE & "" 27c9602284a7e0501778f4711d073c454e875de45fAlice Ching 28c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(throws, canthrow=1) const enum SWIGTYPE & 29c9602284a7e0501778f4711d073c454e875de45fAlice Ching%{ (void)$1; 30c9602284a7e0501778f4711d073c454e875de45fAlice Ching SWIG_CSharpSetPendingException(SWIG_CSharpApplicationException, "C++ $1_type exception thrown"); 31c9602284a7e0501778f4711d073c454e875de45fAlice Ching return $null; %} 32c9602284a7e0501778f4711d073c454e875de45fAlice Ching 33c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(csin) const enum SWIGTYPE & "$csinput.swigValue" 34c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(csout, excode=SWIGEXCODE) const enum SWIGTYPE & { 35c9602284a7e0501778f4711d073c454e875de45fAlice Ching $*csclassname ret = $*csclassname.swigToEnum($imcall);$excode 36c9602284a7e0501778f4711d073c454e875de45fAlice Ching return ret; 37c9602284a7e0501778f4711d073c454e875de45fAlice Ching } 38c9602284a7e0501778f4711d073c454e875de45fAlice Ching 39c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(csvarout, excode=SWIGEXCODE2) const enum SWIGTYPE & %{ 40c9602284a7e0501778f4711d073c454e875de45fAlice Ching get { 41c9602284a7e0501778f4711d073c454e875de45fAlice Ching $*csclassname ret = $*csclassname.swigToEnum($imcall);$excode 42c9602284a7e0501778f4711d073c454e875de45fAlice Ching return ret; 43c9602284a7e0501778f4711d073c454e875de45fAlice Ching } %} 44c9602284a7e0501778f4711d073c454e875de45fAlice Ching 45c9602284a7e0501778f4711d073c454e875de45fAlice Ching 46c9602284a7e0501778f4711d073c454e875de45fAlice Ching// enum SWIGTYPE typemaps 47c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(ctype) enum SWIGTYPE "int" 48c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(imtype) enum SWIGTYPE "int" 49c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(cstype) enum SWIGTYPE "$csclassname" 50c9602284a7e0501778f4711d073c454e875de45fAlice Ching 51c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(in) enum SWIGTYPE %{ $1 = ($1_ltype)$input; %} 52c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(out) enum SWIGTYPE %{ $result = $1; %} 53c9602284a7e0501778f4711d073c454e875de45fAlice Ching 54c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(directorout) enum SWIGTYPE %{ $result = ($1_ltype)$input; %} 55c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(directorin) enum SWIGTYPE "$input = $1;" 56c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(csdirectorin) enum SWIGTYPE "$csclassname.swigToEnum($iminput)" 57c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(csdirectorout) enum SWIGTYPE "$cscall.swigValue" 58c9602284a7e0501778f4711d073c454e875de45fAlice Ching 59c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typecheck(SWIG_TYPECHECK_POINTER) enum SWIGTYPE "" 60c9602284a7e0501778f4711d073c454e875de45fAlice Ching 61c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(throws, canthrow=1) enum SWIGTYPE 62c9602284a7e0501778f4711d073c454e875de45fAlice Ching%{ (void)$1; 63c9602284a7e0501778f4711d073c454e875de45fAlice Ching SWIG_CSharpSetPendingException(SWIG_CSharpApplicationException, "C++ $1_type exception thrown"); 64c9602284a7e0501778f4711d073c454e875de45fAlice Ching return $null; %} 65c9602284a7e0501778f4711d073c454e875de45fAlice Ching 66c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(csin) enum SWIGTYPE "$csinput.swigValue" 67c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(csout, excode=SWIGEXCODE) enum SWIGTYPE { 68c9602284a7e0501778f4711d073c454e875de45fAlice Ching $csclassname ret = $csclassname.swigToEnum($imcall);$excode 69c9602284a7e0501778f4711d073c454e875de45fAlice Ching return ret; 70c9602284a7e0501778f4711d073c454e875de45fAlice Ching } 71c9602284a7e0501778f4711d073c454e875de45fAlice Ching 72c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(csvarout, excode=SWIGEXCODE2) enum SWIGTYPE %{ 73c9602284a7e0501778f4711d073c454e875de45fAlice Ching get { 74c9602284a7e0501778f4711d073c454e875de45fAlice Ching $csclassname ret = $csclassname.swigToEnum($imcall);$excode 75c9602284a7e0501778f4711d073c454e875de45fAlice Ching return ret; 76c9602284a7e0501778f4711d073c454e875de45fAlice Ching } %} 77c9602284a7e0501778f4711d073c454e875de45fAlice Ching 78c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(csbase) enum SWIGTYPE "" 79c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(csclassmodifiers) enum SWIGTYPE "public sealed class" 80c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(cscode) enum SWIGTYPE "" 81c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(csimports) enum SWIGTYPE "" 82c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(csinterfaces) enum SWIGTYPE "" 83c9602284a7e0501778f4711d073c454e875de45fAlice Ching 84c9602284a7e0501778f4711d073c454e875de45fAlice Ching/* 85c9602284a7e0501778f4711d073c454e875de45fAlice Ching * The swigToEnum method is used to find the C# enum from a C++ enum integer value. The default one here takes 86c9602284a7e0501778f4711d073c454e875de45fAlice Ching * advantage of the fact that most enums do not have initial values specified, so the lookup is fast. If initial 87c9602284a7e0501778f4711d073c454e875de45fAlice Ching * values are specified then a lengthy linear search through all possible enums might occur. Specific typemaps could be 88c9602284a7e0501778f4711d073c454e875de45fAlice Ching * written to possibly optimise this lookup by taking advantage of characteristics peculiar to the targeted enum. 89c9602284a7e0501778f4711d073c454e875de45fAlice Ching * The special variable, $enumvalues, is replaced with a comma separated list of all the enum values. 90c9602284a7e0501778f4711d073c454e875de45fAlice Ching */ 91c9602284a7e0501778f4711d073c454e875de45fAlice Ching%typemap(csbody) enum SWIGTYPE %{ 92c9602284a7e0501778f4711d073c454e875de45fAlice Ching public readonly int swigValue; 93c9602284a7e0501778f4711d073c454e875de45fAlice Ching 94c9602284a7e0501778f4711d073c454e875de45fAlice Ching public static $csclassname swigToEnum(int swigValue) { 95c9602284a7e0501778f4711d073c454e875de45fAlice Ching if (swigValue < swigValues.Length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue) 96c9602284a7e0501778f4711d073c454e875de45fAlice Ching return swigValues[swigValue]; 97c9602284a7e0501778f4711d073c454e875de45fAlice Ching for (int i = 0; i < swigValues.Length; i++) 98c9602284a7e0501778f4711d073c454e875de45fAlice Ching if (swigValues[i].swigValue == swigValue) 99c9602284a7e0501778f4711d073c454e875de45fAlice Ching return swigValues[i]; 100c9602284a7e0501778f4711d073c454e875de45fAlice Ching throw new System.ArgumentOutOfRangeException("No enum $csclassname with value " + swigValue); 101c9602284a7e0501778f4711d073c454e875de45fAlice Ching } 102c9602284a7e0501778f4711d073c454e875de45fAlice Ching 103c9602284a7e0501778f4711d073c454e875de45fAlice Ching public override string ToString() { 104c9602284a7e0501778f4711d073c454e875de45fAlice Ching return swigName; 105c9602284a7e0501778f4711d073c454e875de45fAlice Ching } 106c9602284a7e0501778f4711d073c454e875de45fAlice Ching 107c9602284a7e0501778f4711d073c454e875de45fAlice Ching private $csclassname(string swigName) { 108c9602284a7e0501778f4711d073c454e875de45fAlice Ching this.swigName = swigName; 109c9602284a7e0501778f4711d073c454e875de45fAlice Ching this.swigValue = swigNext++; 110c9602284a7e0501778f4711d073c454e875de45fAlice Ching } 111c9602284a7e0501778f4711d073c454e875de45fAlice Ching 112c9602284a7e0501778f4711d073c454e875de45fAlice Ching private $csclassname(string swigName, int swigValue) { 113c9602284a7e0501778f4711d073c454e875de45fAlice Ching this.swigName = swigName; 114c9602284a7e0501778f4711d073c454e875de45fAlice Ching this.swigValue = swigValue; 115c9602284a7e0501778f4711d073c454e875de45fAlice Ching swigNext = swigValue+1; 116c9602284a7e0501778f4711d073c454e875de45fAlice Ching } 117c9602284a7e0501778f4711d073c454e875de45fAlice Ching 118c9602284a7e0501778f4711d073c454e875de45fAlice Ching private $csclassname(string swigName, $csclassname swigEnum) { 119c9602284a7e0501778f4711d073c454e875de45fAlice Ching this.swigName = swigName; 120c9602284a7e0501778f4711d073c454e875de45fAlice Ching this.swigValue = swigEnum.swigValue; 121c9602284a7e0501778f4711d073c454e875de45fAlice Ching swigNext = this.swigValue+1; 122c9602284a7e0501778f4711d073c454e875de45fAlice Ching } 123c9602284a7e0501778f4711d073c454e875de45fAlice Ching 124c9602284a7e0501778f4711d073c454e875de45fAlice Ching private static $csclassname[] swigValues = { $enumvalues }; 125c9602284a7e0501778f4711d073c454e875de45fAlice Ching private static int swigNext = 0; 126c9602284a7e0501778f4711d073c454e875de45fAlice Ching private readonly string swigName; 127c9602284a7e0501778f4711d073c454e875de45fAlice Ching%} 128c9602284a7e0501778f4711d073c454e875de45fAlice Ching 129c9602284a7e0501778f4711d073c454e875de45fAlice Ching%csenum(typesafe); 130c9602284a7e0501778f4711d073c454e875de45fAlice Ching 131