From 1403610518b32038d743c6398c0d6f45dca8b433 Mon Sep 17 00:00:00 2001 From: Richard Beare Date: Tue, 19 Apr 2016 13:25:59 +1000 Subject: [PATCH 1/3] Missing definitions for vector references --- Lib/r/std_vector.i | 54 +++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/Lib/r/std_vector.i b/Lib/r/std_vector.i index d8d82f26a..02ebd067f 100644 --- a/Lib/r/std_vector.i +++ b/Lib/r/std_vector.i @@ -848,9 +848,9 @@ %traits_type_name(std::vector) // reuse these for float -%typemap("rtype") std::vector = std::vector; -%typemap("rtypecheck") std::vector = std::vector; -%typemap("scoercein") std::vector = std::vector; +%typemap("rtype") std::vector, std::vector const, std::vector const& = std::vector; +%typemap("rtypecheck") std::vector, std::vector const, std::vector const& = std::vector; +%typemap("scoercein") std::vector, std::vector const, std::vector const& = std::vector; %typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector); @@ -928,44 +928,44 @@ std::vector< std::basic_string > *, // but we can't use %apply as it will copy the C side ones too // Also note that we don't seem to be able to use types like // int_least8_t here. -%typemap("rtype") std::vector = std::vector; -%typemap("rtype") std::vector = std::vector; -%typemap("rtype") std::vector = std::vector; -%typemap("rtype") std::vector = std::vector; +%typemap("rtype") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("rtype") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("rtype") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("rtype") std::vector, std::vector const, std::vector const & = std::vector; #if defined(SWIGWORDSIZE64) -%typemap("rtype") std::vector = std::vector; -%typemap("rtype") std::vector = std::vector; +%typemap("rtype") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("rtype") std::vector, std::vector const, std::vector const & = std::vector; #else -%typemap("rtype") std::vector = std::vector; -%typemap("rtype") std::vector = std::vector; +%typemap("rtype") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("rtype") std::vector, std::vector const, std::vector const & = std::vector; #endif -%typemap("scoercein") std::vector = std::vector; -%typemap("scoercein") std::vector = std::vector; -%typemap("scoercein") std::vector = std::vector; -%typemap("scoercein") std::vector = std::vector; +%typemap("scoercein") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("scoercein") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("scoercein") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("scoercein") std::vector, std::vector const, std::vector const & = std::vector; #if defined(SWIGWORDSIZE64) -%typemap("scoercein") std::vector = std::vector; -%typemap("scoercein") std::vector = std::vector; +%typemap("scoercein") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("scoercein") std::vector, std::vector const, std::vector const & = std::vector; #else -%typemap("scoercein") std::vector = std::vector; -%typemap("scoercein") std::vector = std::vector; +%typemap("scoercein") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("scoercein") std::vector, std::vector const, std::vector const & = std::vector; #endif -%typemap("rtypecheck") std::vector = std::vector; -%typemap("rtypecheck") std::vector = std::vector; -%typemap("rtypecheck") std::vector = std::vector; -%typemap("rtypecheck") std::vector = std::vector; +%typemap("rtypecheck") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("rtypecheck") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("rtypecheck") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("rtypecheck") std::vector, std::vector const, std::vector const & = std::vector; #if defined(SWIGWORDSIZE64) -%typemap("rtypecheck") std::vector = std::vector; -%typemap("rtypecheck") std::vector = std::vector; +%typemap("rtypecheck") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("rtypecheck") std::vector, std::vector const, std::vector const & = std::vector; #else -%typemap("rtypecheck") std::vector = std::vector; -%typemap("rtypecheck") std::vector = std::vector; +%typemap("rtypecheck") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("rtypecheck") std::vector, std::vector const, std::vector const & = std::vector; #endif /////////////////////////////////////////////////////////////// From 3f75b2917d7d7a6f9f7bf4851cb2424b0540ea17 Mon Sep 17 00:00:00 2001 From: Richard Beare Date: Tue, 19 Apr 2016 14:41:26 +1000 Subject: [PATCH 2/3] R delete an old trace statement --- Lib/r/std_vector.i | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Lib/r/std_vector.i b/Lib/r/std_vector.i index 02ebd067f..f896d9932 100644 --- a/Lib/r/std_vector.i +++ b/Lib/r/std_vector.i @@ -544,8 +544,7 @@ struct traits_asptr < std::vector > { static int asptr(SEXP obj, std::vector **val) { std::vector *p; - Rprintf("my asptr\n"); - int res = SWIG_R_ConvertPtr(obj, (void**)&p, type_info< std::vector >(), 0); + int res = SWIG_R_ConvertPtr(obj, (void**)&p, type_info< std::vector >(), 0); if (SWIG_IsOK(res)) { if (val) *val = p; } From 85f0930f731b2a6c15b94705e93c0c117e90f666 Mon Sep 17 00:00:00 2001 From: Richard Beare Date: Thu, 21 Apr 2016 18:11:56 +1000 Subject: [PATCH 3/3] cleaned up constants --- Lib/r/std_vector.i | 97 +++++++++++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 45 deletions(-) diff --git a/Lib/r/std_vector.i b/Lib/r/std_vector.i index f896d9932..4ec51dc91 100644 --- a/Lib/r/std_vector.i +++ b/Lib/r/std_vector.i @@ -838,35 +838,35 @@ %typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector) %traits_type_name(std::vector) -%typemap("rtypecheck") std::vector, std::vector const, std::vector const& +%typemap("rtypecheck") std::vector, std::vector *, std::vector & %{ is.numeric($arg) %} %typemap("rtype") std::vector "numeric" -%typemap("scoercein") std::vector, std::vector const, std::vector const& ""; +%typemap("scoercein") std::vector, std::vector *, std::vector & "$input = as.numeric($input);"; %typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector) %traits_type_name(std::vector) // reuse these for float -%typemap("rtype") std::vector, std::vector const, std::vector const& = std::vector; -%typemap("rtypecheck") std::vector, std::vector const, std::vector const& = std::vector; -%typemap("scoercein") std::vector, std::vector const, std::vector const& = std::vector; +%typemap("rtype") std::vector, std::vector *, std::vector & = std::vector; +%typemap("rtypecheck") std::vector, std::vector *, std::vector & = std::vector; +%typemap("scoercein") std::vector, std::vector *, std::vector & = std::vector; %typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector); %traits_type_name(std::vector); -%typemap("rtypecheck") std::vector , std::vector const, std::vector const& +%typemap("rtypecheck") std::vector, std::vector *, std::vector & %{ is.logical($arg) %} %typemap("rtype") std::vector "logical" -%typemap("scoercein") std::vector , std::vector const, std::vector const& "$input = as.logical($input);"; +%typemap("scoercein") std::vector , std::vector & "$input = as.logical($input);"; %typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector); %traits_type_name(std::vector); -%typemap("rtypecheck") std::vector, std::vector const, std::vector const & +%typemap("rtypecheck") std::vector, std::vector *, std::vector & %{ is.integer($arg) || is.numeric($arg) %} %typemap("rtype") std::vector "integer" -%typemap("scoercein") std::vector , std::vector const, std::vector const& "$input = as.integer($input);"; +%typemap("scoercein") std::vector , std::vector *, std::vector & "$input = as.integer($input);"; // strings %typemap("rtype") std::vector< std::basic_string >, @@ -927,76 +927,83 @@ std::vector< std::basic_string > *, // but we can't use %apply as it will copy the C side ones too // Also note that we don't seem to be able to use types like // int_least8_t here. -%typemap("rtype") std::vector, std::vector const, std::vector const & = std::vector; -%typemap("rtype") std::vector, std::vector const, std::vector const & = std::vector; -%typemap("rtype") std::vector, std::vector const, std::vector const & = std::vector; -%typemap("rtype") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("rtype") std::vector, std::vector *, std::vector & = std::vector; +%typemap("rtype") std::vector, std::vector *, std::vector & = std::vector; +%typemap("rtype") std::vector, std::vector *, std::vector & = std::vector; +%typemap("rtype") std::vector, std::vector *, std::vector & = std::vector; #if defined(SWIGWORDSIZE64) -%typemap("rtype") std::vector, std::vector const, std::vector const & = std::vector; -%typemap("rtype") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("rtype") std::vector, std::vector *, std::vector & = std::vector; +%typemap("rtype") std::vector, std::vector *, std::vector & = std::vector; #else -%typemap("rtype") std::vector, std::vector const, std::vector const & = std::vector; -%typemap("rtype") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("rtype") std::vector, std::vector *, std::vector & = std::vector; +%typemap("rtype") std::vector, std::vector *, std::vector & = std::vector; #endif -%typemap("scoercein") std::vector, std::vector const, std::vector const & = std::vector; -%typemap("scoercein") std::vector, std::vector const, std::vector const & = std::vector; -%typemap("scoercein") std::vector, std::vector const, std::vector const & = std::vector; -%typemap("scoercein") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("scoercein") std::vector, std::vector *, std::vector & = std::vector; +%typemap("scoercein") std::vector, std::vector *, std::vector & = std::vector; +%typemap("scoercein") std::vector, std::vector *, std::vector & = std::vector; +%typemap("scoercein") std::vector, std::vector *, std::vector & = std::vector; #if defined(SWIGWORDSIZE64) -%typemap("scoercein") std::vector, std::vector const, std::vector const & = std::vector; -%typemap("scoercein") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("scoercein") std::vector, std::vector *, std::vector & = std::vector; +%typemap("scoercein") std::vector, std::vector *, std::vector & = std::vector; #else -%typemap("scoercein") std::vector, std::vector const, std::vector const & = std::vector; -%typemap("scoercein") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("scoercein") std::vector, std::vector *, std::vector & = std::vector; +%typemap("scoercein") std::vector, std::vector *, std::vector & = std::vector; #endif -%typemap("rtypecheck") std::vector, std::vector const, std::vector const & = std::vector; -%typemap("rtypecheck") std::vector, std::vector const, std::vector const & = std::vector; -%typemap("rtypecheck") std::vector, std::vector const, std::vector const & = std::vector; -%typemap("rtypecheck") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("rtypecheck") std::vector, std::vector *, std::vector & = std::vector; +%typemap("rtypecheck") std::vector, std::vector *, std::vector & = std::vector; +%typemap("rtypecheck") std::vector, std::vector *, std::vector & = std::vector; +%typemap("rtypecheck") std::vector, std::vector *, std::vector & = std::vector; #if defined(SWIGWORDSIZE64) -%typemap("rtypecheck") std::vector, std::vector const, std::vector const & = std::vector; -%typemap("rtypecheck") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("rtypecheck") std::vector, std::vector *, std::vector & = std::vector; +%typemap("rtypecheck") std::vector, std::vector *, std::vector & = std::vector; #else -%typemap("rtypecheck") std::vector, std::vector const, std::vector const & = std::vector; -%typemap("rtypecheck") std::vector, std::vector const, std::vector const & = std::vector; +%typemap("rtypecheck") std::vector, std::vector *, std::vector & = std::vector; +%typemap("rtypecheck") std::vector, std::vector *, std::vector & = std::vector; #endif /////////////////////////////////////////////////////////////// %typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector >); %traits_type_name(std::vector< std::vector >); -%typemap("rtypecheck") std::vector >, std::vector > const, std::vector >const& +%typemap("rtypecheck") std::vector >, std::vector > *, std::vector > & %{ is.list($arg) && all(sapply($arg , is.integer) || sapply($arg, is.numeric)) %} -%typemap("rtype") std::vector > "list" -%typemap("scoercein") std::vector< std::vector >, std::vector > const, std::vector >const& "$input = lapply($input, as.integer);"; +%typemap("rtype") std::vector >, std::vector > *, std::vector > & "list" +%typemap("scoercein") std::vector< std::vector >, std::vector > *, std::vector > & "$input = lapply($input, as.integer);"; + +%typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector >); +%traits_type_name(std::vector< std::vector >); +%typemap("rtypecheck") std::vector >, std::vector > *, std::vector > & + %{ is.list($arg) && all(sapply($arg , is.integer) || sapply($arg, is.numeric)) %} +%typemap("rtype") std::vector >, std::vector > *, std::vector > & "list" +%typemap("scoercein") std::vector< std::vector >, std::vector > *, std::vector > & "$input = lapply($input, as.integer);"; %typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector >); %traits_type_name(std::vector< std::vector >); -%typemap("rtypecheck") std::vector >, std::vector > const, std::vector >const& +%typemap("rtypecheck") std::vector >, std::vector > *, std::vector > & %{ is.list($arg) && all(sapply($arg , is.integer) || sapply($arg, is.numeric)) %} -%typemap("rtype") std::vector > "list" -%typemap("scoercein") std::vector< std::vector >, std::vector > const, std::vector >const& "$input = lapply($input, as.numeric);"; +%typemap("rtype") std::vector >, std::vector > *, std::vector > "list" +%typemap("scoercein") std::vector< std::vector >, std::vector > *, std::vector > & "$input = lapply($input, as.numeric);"; %typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector >); %traits_type_name(std::vector< std::vector >); -%typemap("rtypecheck") std::vector >, std::vector > const, std::vector >const& +%typemap("rtypecheck") std::vector >, std::vector > *, std::vector > & %{ is.list($arg) && all(sapply($arg , is.integer) || sapply($arg, is.numeric)) %} -%typemap("rtype") std::vector > "list" -%typemap("scoercein") std::vector< std::vector >, std::vector > const, std::vector >const& +%typemap("rtype") std::vector >, std::vector > *, std::vector > & "list" +%typemap("scoercein") std::vector< std::vector >, std::vector > *, std::vector > & "$input = lapply($input, as.numeric);"; %typemap_traits_ptr(SWIG_TYPECHECK_VECTOR, std::vector >); %traits_type_name(std::vector< std::vector >); -%typemap("rtypecheck") std::vector >, std::vector > const, std::vector >const& +%typemap("rtypecheck") std::vector >, std::vector > *, std::vector > & %{ is.list($arg) && all(sapply($arg , is.integer) || sapply($arg, is.numeric)) %} -%typemap("rtype") std::vector > "list" -%typemap("scoercein") std::vector< std::vector >, std::vector > const, std::vector >const& "$input = lapply($input, as.logical);"; +%typemap("rtype") std::vector >, std::vector > *, std::vector > & "list" +%typemap("scoercein") std::vector< std::vector >, std::vector > *, std::vector > & "$input = lapply($input, as.logical);"; // we don't want these to be given R classes as they // have already been turned into R vectors.