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