diff options
Diffstat (limited to 'share/swig/2.0.11/typemaps/enumint.swg')
-rw-r--r-- | share/swig/2.0.11/typemaps/enumint.swg | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/share/swig/2.0.11/typemaps/enumint.swg b/share/swig/2.0.11/typemaps/enumint.swg new file mode 100644 index 0000000..854d6f3 --- /dev/null +++ b/share/swig/2.0.11/typemaps/enumint.swg @@ -0,0 +1,28 @@ +/* ------------------------------------------------------------ + * Enums mapped as integer values + * ------------------------------------------------------------ */ + +%apply int { enum SWIGTYPE }; +%apply const int& { const enum SWIGTYPE& }; + +%typemap(in,fragment=SWIG_AsVal_frag(int),noblock=1) const enum SWIGTYPE& (int val, int ecode, $basetype temp) { + ecode = SWIG_AsVal(int)($input, &val); + if (!SWIG_IsOK(ecode)) { + %argument_fail(ecode, "$type", $symname, $argnum); + } else { + temp = %static_cast(val,$basetype); + $1 = &temp; + } +} + +%typemap(varin,fragment=SWIG_AsVal_frag(int),noblock=1) enum SWIGTYPE { + if (sizeof(int) != sizeof($1)) { + %variable_fail(SWIG_AttributeError,"$type", "arch, read-only $name"); + } else { + int ecode = SWIG_AsVal(int)($input, %reinterpret_cast(&$1,int*)); + if (!SWIG_IsOK(ecode)) { + %variable_fail(ecode, "$type", "$name"); + } + } +} + |