/trunk/Lib/java/enumtypesafe.swg
Unknown | 118 lines | 96 code | 22 blank | 0 comment | 0 complexity | e4825ee367ba7124f08dc5a5d39eefa1 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
- /* -----------------------------------------------------------------------------
- * enumtypesafe.swg
- *
- * Include this file in order for C/C++ enums to be wrapped by the so called
- * typesafe enum pattern. Each enum has an equivalent Java class named after the
- * enum and each enum item is a static instance of this class.
- * ----------------------------------------------------------------------------- */
- // const enum SWIGTYPE & typemaps
- %typemap(jni) const enum SWIGTYPE & "jint"
- %typemap(jtype) const enum SWIGTYPE & "int"
- %typemap(jstype) const enum SWIGTYPE & "$*javaclassname"
- %typemap(in) const enum SWIGTYPE & ($*1_ltype temp)
- %{ temp = ($*1_ltype)$input;
- $1 = &temp; %}
- %typemap(out) const enum SWIGTYPE & %{ $result = (jint)*$1; %}
- %typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const enum SWIGTYPE &
- %{ static $*1_ltype temp = ($*1_ltype)$input;
- $result = &temp; %}
- %typemap(directorin, descriptor="L$packagepath/$*javaclassname;") const enum SWIGTYPE & "$input = (jint)$1;"
- %typemap(javadirectorin) const enum SWIGTYPE & "$*javaclassname.swigToEnum($jniinput)"
- %typemap(javadirectorout) const enum SWIGTYPE & "($javacall).swigValue()"
- %typecheck(SWIG_TYPECHECK_POINTER) const enum SWIGTYPE & ""
- %typemap(throws) const enum SWIGTYPE &
- %{ (void)$1;
- SWIG_JavaThrowException(jenv, SWIG_JavaRuntimeException, "C++ $1_type exception thrown"); %}
- %typemap(javain) const enum SWIGTYPE & "$javainput.swigValue()"
- %typemap(javaout) const enum SWIGTYPE & {
- return $*javaclassname.swigToEnum($jnicall);
- }
- // enum SWIGTYPE typemaps
- %typemap(jni) enum SWIGTYPE "jint"
- %typemap(jtype) enum SWIGTYPE "int"
- %typemap(jstype) enum SWIGTYPE "$javaclassname"
- %typemap(in) enum SWIGTYPE %{ $1 = ($1_ltype)$input; %}
- %typemap(out) enum SWIGTYPE %{ $result = (jint)$1; %}
- %typemap(directorout) enum SWIGTYPE %{ $result = ($1_ltype)$input; %}
- %typemap(directorin, descriptor="L$packagepath/$javaclassname;") enum SWIGTYPE "$input = (jint) $1;"
- %typemap(javadirectorin) enum SWIGTYPE "$javaclassname.swigToEnum($jniinput)"
- %typemap(javadirectorout) enum SWIGTYPE "($javacall).swigValue()"
- %typecheck(SWIG_TYPECHECK_POINTER) enum SWIGTYPE ""
- %typemap(throws) enum SWIGTYPE
- %{ (void)$1;
- SWIG_JavaThrowException(jenv, SWIG_JavaRuntimeException, "C++ $1_type exception thrown"); %}
- %typemap(javain) enum SWIGTYPE "$javainput.swigValue()"
- %typemap(javaout) enum SWIGTYPE {
- return $javaclassname.swigToEnum($jnicall);
- }
- // '$static' will be replaced with either 'static' or nothing depending on whether the enum is an inner Java class or not
- %typemap(javaclassmodifiers) enum SWIGTYPE "public final $static class"
- %typemap(javabase) enum SWIGTYPE ""
- %typemap(javacode) enum SWIGTYPE ""
- %typemap(javaimports) enum SWIGTYPE ""
- %typemap(javainterfaces) enum SWIGTYPE ""
- %typemap(javabody) enum SWIGTYPE ""
- /*
- * The swigToEnum method is used to find the Java enum from a C++ enum integer value. The default one here takes
- * advantage of the fact that most enums do not have initial values specified, so the lookup is fast. If initial
- * values are specified then a lengthy linear search through all possible enums might occur. Specific typemaps could be
- * written to possibly optimise this lookup by taking advantage of characteristics peculiar to the targeted enum.
- * The special variable, $enumvalues, is replaced with a comma separated list of all the enum values.
- */
- %typemap(javabody) enum SWIGTYPE %{
- public final int swigValue() {
- return swigValue;
- }
- public String toString() {
- return swigName;
- }
- public static $javaclassname swigToEnum(int swigValue) {
- if (swigValue < swigValues.length && swigValue >= 0 && swigValues[swigValue].swigValue == swigValue)
- return swigValues[swigValue];
- for (int i = 0; i < swigValues.length; i++)
- if (swigValues[i].swigValue == swigValue)
- return swigValues[i];
- throw new IllegalArgumentException("No enum " + $javaclassname.class + " with value " + swigValue);
- }
- private $javaclassname(String swigName) {
- this.swigName = swigName;
- this.swigValue = swigNext++;
- }
- private $javaclassname(String swigName, int swigValue) {
- this.swigName = swigName;
- this.swigValue = swigValue;
- swigNext = swigValue+1;
- }
- private $javaclassname(String swigName, $javaclassname swigEnum) {
- this.swigName = swigName;
- this.swigValue = swigEnum.swigValue;
- swigNext = this.swigValue+1;
- }
- private static $javaclassname[] swigValues = { $enumvalues };
- private static int swigNext = 0;
- private final int swigValue;
- private final String swigName;
- %}
- %javaenum(typesafe);