[Rcpp-devel] 64-bit ints on Windows 64-bit via size_t, unsigned long long, or unsigned __int64
Walter Mascarenhas
walter.mascarenhas at gmail.com
Wed Jul 11 21:46:09 CEST 2012
Sorry if this sounds too naive (I now little about R,),
but what is wrong with using the types
uint64_t, int64_t etc
which are defined in the c++ standard header <cstdint>?
walter.
On Wed, Jul 11, 2012 at 4:34 PM, Bob Carpenter <carp at alias-i.com> wrote:
> Jiqiang created a standalone example that illustrates
> our problem with wrapping size_t into Rcpp on Win64.
> The simple example is as follows (full running dump
> from R/Rcpp below):
>
> size_t b = 100;
> Rcpp::List lst(a);
> lst["b"] = b;
> return lst;
>
> We found this discussion:
>
> http://stackoverflow.com/**questions/8931123/return-wrap-**
> of-size-t-in-rcpp<http://stackoverflow.com/questions/8931123/return-wrap-of-size-t-in-rcpp>
>
> where Romain suggests just avoiding size_t and long long
> altogether. We're willing to fly in the face of all the
> other advice we've ever gotten (which is to use "size_t" for
> portability), but we don't know how to specify the type of
> size_t in Win64 given that Romain doesn't want us to use
> "size_t" or "unsigned long long". Unfortunately, "unsigned long"
> is only 32 bits on Windows.
>
> I'm following Dirk's final comment on Stack Overflow
> and "taking it to the [rcpp] list".
>
> How should we specify the type of size_t in
> Windows 64 bit given that we can't say "size_t" or "unsigned
> long long"? The only other option seems to be "unsigned __int64".
> Here's the full table of types from the horse's mouth:
>
> http://msdn.microsoft.com/en-**us/library/s3f49ktz(v=VS.80).**aspx<http://msdn.microsoft.com/en-us/library/s3f49ktz(v=VS.80).aspx>
>
> - Bob Carpenter & Jiqiang Guo
> Columbia Uni., Dept. of Statistics
>
>
> P.S. Here's the full dump:
>
> > library(Rcpp)
> > library(inline)
> >
> > sessionInfo()
> R version 2.15.1 (2012-06-22)
> Platform: x86_64-pc-mingw32/x64 (64-bit)
>
> locale:
> [1] LC_COLLATE=English_United States.1252
> [2] LC_CTYPE=English_United States.1252
> [3] LC_MONETARY=English_United States.1252
> [4] LC_NUMERIC=C
> [5] LC_TIME=English_United States.1252
>
> attached base packages:
> [1] stats graphics grDevices utils datasets methods base
>
> other attached packages:
> [1] inline_0.3.8 Rcpp_0.9.13
> >
> > src <- '
> + size_t b = 100;
> + Rcpp::List lst(a);
> + lst["b"] = b;
> + return lst;
> + '
> >
> > fx <- cxxfunction(signature(a = 'list'), body = src, includes = '',
> + plugin = 'Rcpp', verbose = !TRUE)
> In file included from C:/Program Files/R/R-2.15.1/library/Rcpp/**
> include/RcppCommon.h:326:0,
> from C:/Program Files/R/R-2.15.1/library/Rcpp/**
> include/Rcpp.h:27,
> from file8c8759b1a9b.cpp:4:
> C:/Program Files/R/R-2.15.1/library/Rcpp/**include/Rcpp/internal/wrap.h:
> In function 'SEXPREC* Rcpp::internal::wrap_dispatch_**unknown_iterable(const
> T&, Rcpp::traits::false_type) [with T = long long unsigned int, SEXP =
> SEXPREC*, Rcpp::traits::false_type = Rcpp::traits::integral_**constant<bool,
> false>]':
> C:/Program Files/R/R-2.15.1/library/Rcpp/**include/Rcpp/internal/wrap.h:**638:98:
> instantiated from 'SEXPREC* Rcpp::internal::wrap_dispatch_**unknown(const
> T&, Rcpp::traits::false_type) [with T = long long unsigned int, SEXP =
> SEXPREC*, Rcpp::traits::false_type = Rcpp::traits::integral_**constant<bool,
> false>]'
> C:/Program Files/R/R-2.15.1/library/Rcpp/**include/Rcpp/internal/wrap.h:**654:96:
> instantiated from 'SEXPREC* Rcpp::internal::wrap_dispatch_**eigen(const
> T&, Rcpp::traits::false_type) [with T = long long unsigned int, SEXP =
> SEXPREC*, Rcpp::traits::false_type = Rcpp::traits::integral_**constant<bool,
> false>]'
> C:/Program Files/R/R-2.15.1/library/Rcpp/**include/Rcpp/internal/wrap.h:**669:80:
> instantiated from 'SEXPREC* Rcpp::internal::wrap_dispatch_**unknown_importable(const
> T&, Rcpp::traits::false_type) [with T = long long unsigned int, SEXP =
> SEXPREC*, Rcpp::traits::false_type = Rcpp::traits::integral_**constant<bool,
> false>]'
> C:/Program Files/R/R-2.15.1/library/Rcpp/**include/Rcpp/internal/wrap.h:**687:99:
> instantiated from 'SEXPREC* Rcpp::internal::wrap_dispatch(**const T&,
> Rcpp::traits::wrap_type_**unknown_tag) [with T = long long unsigned int,
> SEXP = SEXPREC*]'
> C:/Program Files/R/R-2.15.1/library/Rcpp/**include/Rcpp/internal/wrap.h:**791:104:
> instantiated from 'SEXPREC* Rcpp::wrap(const T&) [with T = long long
> unsigned int, SEXP = SEXPREC*]'
> C:/Program Files/R/R-2.15.1/library/Rcpp/**include/Rcpp/vector/proxy.h:**155:4:
> instantiated from 'Rcpp::internal::generic_name_**proxy<RTYPE>&
> Rcpp::internal::generic_name_**proxy<RTYPE>::operator=(const T&) [with T
> = long long unsigned int, int RTYPE = 19, Rcpp::internal::generic_name_**proxy<RTYPE>
> = Rcpp::internal::generic_name_**proxy<19>]'
> file8c8759b1a9b.cpp:33:14: instantiated from here
> C:/Program Files/R/R-2.15.1/library/Rcpp/**include/Rcpp/internal/wrap.h:**433:11:
> error: invalid conversion from 'long long unsigned int' to 'SEXP'
> [-fpermissive]
> make: *** [file8c8759b1a9b.o] Error 1
>
> ERROR(s) during compilation: source code errors or compiler configuration
> errors!
>
> Program source:
> 1:
> 2: // includes from the plugin
> 3:
> 4: #include <Rcpp.h>
> 5:
> 6:
> 7: #ifndef BEGIN_RCPP
> 8: #define BEGIN_RCPP
> 9: #endif
> 10:
> 11: #ifndef END_RCPP
> 12: #define END_RCPP
> 13: #endif
> 14:
> 15: using namespace Rcpp;
> 16:
> 17:
> 18: // user includes
> 19:
> 20:
> 21: // declarations
> 22: extern "C" {
> 23: SEXP file8c8759b1a9b( SEXP a) ;
> 24: }
> 25:
> 26: // definition
> 27:
> 28: SEXP file8c8759b1a9b( SEXP a ){
> 29: BEGIN_RCPP
> 30:
> 31: size_t b = 100;
> 32: Rcpp::List lst(a);
> 33: lst["b"] = b;
> 34: return lst;
> 35:
> 36: END_RCPP
> 37: }
> 38:
> 39:
> Error in compileCode(f, code, language = language, verbose = verbose) :
> Compilation ERROR, function(s)/method(s) not created! In file included
> from C:/Program Files/R/R-2.15.1/library/Rcpp/**
> include/RcppCommon.h:326:0,
> from C:/Program Files/R/R-2.15.1/library/Rcpp/**
> include/Rcpp.h:27,
> from file8c8759b1a9b.cpp:4:
> C:/Program Files/R/R-2.15.1/library/Rcpp/**include/Rcpp/internal/wrap.h:
> In function 'SEXPREC* Rcpp::internal::wrap_dispatch_**unknown_iterable(const
> T&, Rcpp::traits::false_type) [with T = long long unsigned int, SEXP =
> SEXPREC*, Rcpp::traits::false_type = Rcpp::traits::integral_**constant<bool,
> false>]':
> C:/Program Files/R/R-2.15.1/library/Rcpp/**include/Rcpp/internal/wrap.h:**638:98:
> instantiated from 'SEXPREC* Rcpp::internal::wrap_dispatch_**unknown(const
> T&, Rcpp::traits::false_type) [with T = long long unsigned int, SEXP =
> SEXPREC*, Rcpp::traits::false_type = Rcpp::traits::integral_**constant<bool,
> false>]'
> C:/Program Files/R/R-2.15.1/library/Rcpp/**include/Rcpp/internal/wrap.h:**654:96:
> instantiated from 'SEXPREC* R
> Calls: cxxfunction -> compileCode
> In addition: Warning message:
> running command 'C:/PROGRA~1/R/R-215~1.1/bin/**x64/R CMD SHLIB
> file8c8759b1a9b.cpp 2> file8c8759b1a9b.cpp.err.txt' had status 1
> Execution halted
>
> ______________________________**_________________
> Rcpp-devel mailing list
> Rcpp-devel at lists.r-forge.r-**project.org<Rcpp-devel at lists.r-forge.r-project.org>
> https://lists.r-forge.r-**project.org/cgi-bin/mailman/**
> listinfo/rcpp-devel<https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20120711/eb323f6a/attachment.html>
More information about the Rcpp-devel
mailing list