Using C++11 enum classes with just a forward reference.

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2009-matevz@13013 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2012-04-23 22:15:37 +00:00
commit 38f6156a93
5 changed files with 35 additions and 16 deletions

View file

@ -67,6 +67,12 @@ enum class Enum10 : TType<int>::type_name {
Val1, Val2, Val3 = 300, Val4 Val1, Val2, Val3 = 300, Val4
}; };
// forward declaration, no definition of enum
enum class Enum11 : int;
struct UseEnum11 {
Enum11 myenum11;
};
/* /*
TODO TODO
enum class MyClass {AAA, BBB, CCC}; enum class MyClass {AAA, BBB, CCC};

View file

@ -13,7 +13,7 @@
%typemap(in) const enum SWIGTYPE & ($*1_ltype temp) %typemap(in) const enum SWIGTYPE & ($*1_ltype temp)
%{ temp = ($*1_ltype)$input; %{ temp = ($*1_ltype)$input;
$1 = &temp; %} $1 = &temp; %}
%typemap(out) const enum SWIGTYPE & %{ $result = *$1; %} %typemap(out) const enum SWIGTYPE & %{ $result = (int)*$1; %}
%typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const enum SWIGTYPE & %typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const enum SWIGTYPE &
%{ static $*1_ltype temp = ($*1_ltype)$input; %{ static $*1_ltype temp = ($*1_ltype)$input;
@ -48,7 +48,7 @@
%typemap(cstype) enum SWIGTYPE "$csclassname" %typemap(cstype) enum SWIGTYPE "$csclassname"
%typemap(in) enum SWIGTYPE %{ $1 = ($1_ltype)$input; %} %typemap(in) enum SWIGTYPE %{ $1 = ($1_ltype)$input; %}
%typemap(out) enum SWIGTYPE %{ $result = $1; %} %typemap(out) enum SWIGTYPE %{ $result = (int)$1; %}
%typemap(directorout) enum SWIGTYPE %{ $result = ($1_ltype)$input; %} %typemap(directorout) enum SWIGTYPE %{ $result = ($1_ltype)$input; %}
%typemap(directorin) enum SWIGTYPE "$input = $1;" %typemap(directorin) enum SWIGTYPE "$input = $1;"

View file

@ -15,7 +15,7 @@
%typemap(in) const enum SWIGTYPE & ($*1_ltype temp) %typemap(in) const enum SWIGTYPE & ($*1_ltype temp)
%{ temp = ($*1_ltype)$input; %{ temp = ($*1_ltype)$input;
$1 = &temp; %} $1 = &temp; %}
%typemap(out) const enum SWIGTYPE & %{ $result = *$1; %} %typemap(out) const enum SWIGTYPE & %{ $result = (int)*$1; %}
%typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const enum SWIGTYPE & %typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const enum SWIGTYPE &
%{ static $*1_ltype temp = ($*1_ltype)$input; %{ static $*1_ltype temp = ($*1_ltype)$input;
@ -50,7 +50,7 @@
%typemap(cstype) enum SWIGTYPE "int" %typemap(cstype) enum SWIGTYPE "int"
%typemap(in) enum SWIGTYPE %{ $1 = ($1_ltype)$input; %} %typemap(in) enum SWIGTYPE %{ $1 = ($1_ltype)$input; %}
%typemap(out) enum SWIGTYPE %{ $result = $1; %} %typemap(out) enum SWIGTYPE %{ $result = (int)$1; %}
%typemap(directorout) enum SWIGTYPE %{ $result = ($1_ltype)$input; %} %typemap(directorout) enum SWIGTYPE %{ $result = ($1_ltype)$input; %}
%typemap(directorin) enum SWIGTYPE "$input = $1;" %typemap(directorin) enum SWIGTYPE "$input = $1;"

View file

@ -14,7 +14,7 @@
%typemap(in) const enum SWIGTYPE & ($*1_ltype temp) %typemap(in) const enum SWIGTYPE & ($*1_ltype temp)
%{ temp = ($*1_ltype)$input; %{ temp = ($*1_ltype)$input;
$1 = &temp; %} $1 = &temp; %}
%typemap(out) const enum SWIGTYPE & %{ $result = *$1; %} %typemap(out) const enum SWIGTYPE & %{ $result = (int)*$1; %}
%typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const enum SWIGTYPE & %typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const enum SWIGTYPE &
%{ static $*1_ltype temp = ($*1_ltype)$input; %{ static $*1_ltype temp = ($*1_ltype)$input;
@ -49,7 +49,7 @@
%typemap(cstype) enum SWIGTYPE "$csclassname" %typemap(cstype) enum SWIGTYPE "$csclassname"
%typemap(in) enum SWIGTYPE %{ $1 = ($1_ltype)$input; %} %typemap(in) enum SWIGTYPE %{ $1 = ($1_ltype)$input; %}
%typemap(out) enum SWIGTYPE %{ $result = $1; %} %typemap(out) enum SWIGTYPE %{ $result = (int)$1; %}
%typemap(directorout) enum SWIGTYPE %{ $result = ($1_ltype)$input; %} %typemap(directorout) enum SWIGTYPE %{ $result = ($1_ltype)$input; %}
%typemap(directorin) enum SWIGTYPE "$input = $1;" %typemap(directorin) enum SWIGTYPE "$input = $1;"

View file

@ -189,12 +189,16 @@
signed char, signed char,
unsigned char, unsigned char,
bool, bool,
size_t, size_t
enum SWIGTYPE
{ {
ZVAL_LONG(return_value,$1); ZVAL_LONG(return_value,$1);
} }
%typemap(out) enum SWIGTYPE
{
ZVAL_LONG(return_value, (long)$1);
}
%typemap(out) long long %typemap(out) long long
%{ %{
if ((long long)LONG_MIN <= $1 && $1 <= (long long)LONG_MAX) { if ((long long)LONG_MIN <= $1 && $1 <= (long long)LONG_MAX) {
@ -227,12 +231,16 @@
const signed char &, const signed char &,
const unsigned char &, const unsigned char &,
const bool &, const bool &,
const size_t &, const size_t &
const enum SWIGTYPE &
{ {
ZVAL_LONG(return_value,*$1); ZVAL_LONG(return_value,*$1);
} }
%typemap(out) const enum SWIGTYPE &
{
ZVAL_LONG(return_value, (long)*$1);
}
%typemap(out) const long long & %typemap(out) const long long &
%{ %{
if ((long long)LONG_MIN <= *$1 && *$1 <= (long long)LONG_MAX) { if ((long long)LONG_MIN <= *$1 && *$1 <= (long long)LONG_MAX) {
@ -270,6 +278,11 @@
ZVAL_LONG($input,$1_name); ZVAL_LONG($input,$1_name);
} }
%typemap(directorin) enum SWIGTYPE
{
ZVAL_LONG($input, (long)$1_name);
}
%typemap(out) bool %typemap(out) bool
{ {
ZVAL_BOOL(return_value,($1)?1:0); ZVAL_BOOL(return_value,($1)?1:0);