Add back in %traits_enum removed in rev 12961 and probably fix iterating through std::vector wrappers of enumerations for R
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12988 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
442422fee0
commit
c3fdc9fc5e
2 changed files with 43 additions and 5 deletions
|
|
@ -54,7 +54,7 @@ Version 2.0.5 (in progress)
|
||||||
Apply patch #3468362 from Karl Wette to fix %include inside %define.
|
Apply patch #3468362 from Karl Wette to fix %include inside %define.
|
||||||
|
|
||||||
2012-03-13: wsfulton
|
2012-03-13: wsfulton
|
||||||
[Python, Ruby, Octave] Fix #3475492 - iterating through std::vector wrappers of enumerations.
|
[Python, Ruby, Octave, R] Fix #3475492 - iterating through std::vector wrappers of enumerations.
|
||||||
|
|
||||||
2012-02-27: xavier98 (patches from Karl Wette)
|
2012-02-27: xavier98 (patches from Karl Wette)
|
||||||
[Octave] Use -globals . to load global variables in module namespace
|
[Octave] Use -globals . to load global variables in module namespace
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,16 @@
|
||||||
%include <rstdcommon.swg>
|
%include <rstdcommon.swg>
|
||||||
%include <std/std_common.i>
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Generate the traits for a 'primitive' type, such as 'double',
|
||||||
|
for which the SWIG_AsVal and SWIG_From methods are already defined.
|
||||||
|
*/
|
||||||
|
|
||||||
%define %traits_ptypen(Type...)
|
%define %traits_ptypen(Type...)
|
||||||
%fragment(SWIG_Traits_frag(Type),"header",
|
%fragment(SWIG_Traits_frag(Type),"header",
|
||||||
fragment=SWIG_AsVal_frag(Type),
|
fragment=SWIG_AsVal_frag(Type),
|
||||||
fragment=SWIG_From_frag(Type),
|
fragment=SWIG_From_frag(Type),
|
||||||
fragment="StdTraits") {
|
fragment="StdTraits") {
|
||||||
namespace swig {
|
namespace swig {
|
||||||
template <> struct traits<Type > {
|
template <> struct traits<Type > {
|
||||||
typedef value_category category;
|
typedef value_category category;
|
||||||
|
|
@ -27,6 +32,39 @@ namespace swig {
|
||||||
}
|
}
|
||||||
%enddef
|
%enddef
|
||||||
|
|
||||||
|
/* Traits for enums. This is bit of a sneaky trick needed because a generic template specialization of enums
|
||||||
|
is not possible (unless using template meta-programming which SWIG doesn't support because of the explicit
|
||||||
|
instantiations required using %template). The STL containers define the 'front' method and the typemap
|
||||||
|
below is used whenever the front method is wrapped returning an enum. This typemap simply picks up the
|
||||||
|
standard enum typemap, but additionally drags in a fragment containing the traits_asval and traits_from
|
||||||
|
required in the generated code for enums. */
|
||||||
|
|
||||||
|
%define %traits_enum(Type...)
|
||||||
|
%fragment("SWIG_Traits_enum_"{Type},"header",
|
||||||
|
fragment=SWIG_AsVal_frag(int),
|
||||||
|
fragment=SWIG_From_frag(int),
|
||||||
|
fragment="StdTraits") {
|
||||||
|
namespace swig {
|
||||||
|
template <> struct traits_asval<Type > {
|
||||||
|
typedef Type value_type;
|
||||||
|
static int asval(SEXP obj, value_type *val) {
|
||||||
|
return SWIG_AsVal(int)(obj, (int *)val);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
template <> struct traits_from<Type > {
|
||||||
|
typedef Type value_type;
|
||||||
|
static SEXP from(const value_type& val) {
|
||||||
|
return SWIG_From(int)((int)val);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
%typemap(out, fragment="SWIG_Traits_enum_"{Type}) const enum SWIGTYPE& front %{$typemap(out, const enum SWIGTYPE&)%}
|
||||||
|
%enddef
|
||||||
|
|
||||||
|
|
||||||
|
%include <std/std_common.i>
|
||||||
|
|
||||||
//
|
//
|
||||||
// Generates the traits for all the known primitive
|
// Generates the traits for all the known primitive
|
||||||
// C++ types (int, double, ...)
|
// C++ types (int, double, ...)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue