#define COMPILING_RCPP
#define RCPP_USE_GLOBAL_ROSTREAM
#include <Rcpp.h>
using namespace Rcpp;
#include "internal.h"
#ifdef RCPP_HAS_DEMANGLING
#include <cxxabi.h>
#endif
namespace Rcpp {
Rostream<true>& Rcpp_cout_get() {
static Rostream<true> Rcpp_cout;
return Rcpp_cout;
}
Rostream<false>& Rcpp_cerr_get() {
static Rostream<false> Rcpp_cerr;
return Rcpp_cerr;
}
Rostream<true>& Rcout = Rcpp_cout_get();
Rostream<false>& Rcerr = Rcpp_cerr_get();
namespace internal {
int rngSynchronizationSuspended = 0;
unsigned long enterRNGScope() {
if (rngSynchronizationSuspended == 0)
GetRNGstate();
return 0;
}
unsigned long exitRNGScope() {
if (rngSynchronizationSuspended == 0)
PutRNGstate();
return 0;
}
unsigned long beginSuspendRNGSynchronization() {
++rngSynchronizationSuspended;
return rngSynchronizationSuspended;
}
unsigned long endSuspendRNGSynchronization() {
--rngSynchronizationSuspended;
return rngSynchronizationSuspended;
}
char* get_string_buffer() {
static char buffer[MAXELTSIZE];
return buffer;
}
}
const char * type2name(SEXP x) {
switch (TYPEOF(x)) {
case NILSXP: return "NILSXP";
case SYMSXP: return "SYMSXP";
case RAWSXP: return "RAWSXP";
case LISTSXP: return "LISTSXP";
case CLOSXP: return "CLOSXP";
case ENVSXP: return "ENVSXP";
case PROMSXP: return "PROMSXP";
case LANGSXP: return "LANGSXP";
case SPECIALSXP: return "SPECIALSXP";
case BUILTINSXP: return "BUILTINSXP";
case CHARSXP: return "CHARSXP";
case LGLSXP: return "LGLSXP";
case INTSXP: return "INTSXP";
case REALSXP: return "REALSXP";
case CPLXSXP: return "CPLXSXP";
case STRSXP: return "STRSXP";
case DOTSXP: return "DOTSXP";
case ANYSXP: return "ANYSXP";
case VECSXP: return "VECSXP";
case EXPRSXP: return "EXPRSXP";
case BCODESXP: return "BCODESXP";
case EXTPTRSXP: return "EXTPTRSXP";
case WEAKREFSXP: return "WEAKREFSXP";
#if R_VERSION >= R_Version(4,4,0)
case OBJSXP: return Rf_isS4(x) ? "S4SXP" : "OBJSXP";
#else
case S4SXP: return "S4SXP";
#endif
default:
return "<unknown>";
}
}
}
std::string demangle(const std::string& name) {
#ifdef RCPP_HAS_DEMANGLING
std::string real_class;
int status =-1;
char *dem = 0;
dem = abi::__cxa_demangle(name.c_str(), 0, 0, &status);
if (status == 0) {
real_class = dem;
free(dem);
} else {
real_class = name;
}
return real_class;
#else
return name;
#endif
}
const char* short_file_name(const char* file) {
static std::string f;
f = file;
size_t index = f.find("/include/");
if (index != std::string::npos) {
f = f.substr(index + 9);
}
return f.c_str();
}
SEXP as_character_externalptr(SEXP xp) {
char buffer[20];
snprintf(buffer, 20, "%p", (void*)R_ExternalPtrAddr(xp));
return Rcpp::wrap((const char*)buffer);
}
SEXP rcpp_capabilities() {
Shield<SEXP> cap(Rf_allocVector(LGLSXP, 13));
Shield<SEXP> names(Rf_allocVector(STRSXP, 13));
LOGICAL(cap)[0] = TRUE;
LOGICAL(cap)[1] = TRUE;
LOGICAL(cap)[2] = TRUE;
LOGICAL(cap)[3] = TRUE;
LOGICAL(cap)[4] = TRUE;
LOGICAL(cap)[5] = TRUE;
#ifdef RCPP_HAS_DEMANGLING
LOGICAL(cap)[6] = TRUE;
#else
LOGICAL(cap)[6] = FALSE;
#endif
LOGICAL(cap)[7] = FALSE;
LOGICAL(cap)[8] = TRUE;
LOGICAL(cap)[9] = TRUE;
LOGICAL(cap)[10] = TRUE;
LOGICAL(cap)[11] = TRUE;
#ifdef RCPP_NEW_DATE_DATETIME_VECTORS
LOGICAL(cap)[12] = TRUE;
#else
LOGICAL(cap)[12] = FALSE;
#endif
SET_STRING_ELT(names, 0, Rf_mkChar("variadic templates"));
SET_STRING_ELT(names, 1, Rf_mkChar("initializer lists"));
SET_STRING_ELT(names, 2, Rf_mkChar("exception handling"));
SET_STRING_ELT(names, 3, Rf_mkChar("tr1 unordered maps"));
SET_STRING_ELT(names, 4, Rf_mkChar("tr1 unordered sets"));
SET_STRING_ELT(names, 5, Rf_mkChar("Rcpp modules"));
SET_STRING_ELT(names, 6, Rf_mkChar("demangling"));
SET_STRING_ELT(names, 7, Rf_mkChar("classic api"));
SET_STRING_ELT(names, 8, Rf_mkChar("long long"));
SET_STRING_ELT(names, 9, Rf_mkChar("C++0x unordered maps"));
SET_STRING_ELT(names, 10, Rf_mkChar("C++0x unordered sets"));
SET_STRING_ELT(names, 11, Rf_mkChar("Full C++11 support"));
SET_STRING_ELT(names, 12, Rf_mkChar("new date(time) vectors"));
Rf_setAttrib(cap, R_NamesSymbol, names);
return cap;
}
SEXP rcpp_can_use_cxx0x() {
return Rf_ScalarLogical(TRUE);
}
SEXP rcpp_can_use_cxx11() {
return Rf_ScalarLogical(TRUE);
}
SEXP stack_trace(const char* , int ) {
return R_NilValue;
}
SEXP getRcppVersionStrings() {
Shield<SEXP> versionstring(Rf_allocVector(STRSXP,2));
SET_STRING_ELT(versionstring, 0, Rf_mkChar(RCPP_VERSION_STRING));
SET_STRING_ELT(versionstring, 1, Rf_mkChar(RCPP_DEV_VERSION_STRING));
return versionstring;
}