25#include <Rcpp/internal/call.h>
31 template <
typename FROM,
typename TO>
59 operator T*(){
return ptr ; }
69 operator T*(){
return ptr ; }
76 template <
typename Class>
79 Function maker = Environment::Rcpp_namespace()[
"cpp_object_maker"] ;
89#if defined(HAS_VARIADIC_TEMPLATES)
92 inline void signature(std::string&
s,
const char* name) {
98 (
void)std::initializer_list<int>{
114 inline int nargs() {
return sizeof...(T); }
115 inline bool is_void() {
return std::is_void<RESULT_TYPE>::value; }
116 inline void signature(std::string&
s,
const char* name) { Rcpp::signature<
RESULT_TYPE, T...>(
s, name); }
136 #include <Rcpp/module/Module_generated_get_signature.h>
138 #include <Rcpp/module/Module_generated_CppFunction.h>
145 template <
typename Class>
156 virtual void signature(std::string&
s,
const char* name ){
s = name ; }
159 template <
typename Class,
typename Parent>
180#if defined(HAS_VARIADIC_TEMPLATES)
181 template <
typename... T>
185 int n =
sizeof...(T);
188 (
void)std::initializer_list<int>{
192 template <
typename Class>
196 virtual int nargs() = 0 ;
197 virtual void signature(std::string&
s,
const std::string& class_name) = 0 ;
200 template <
typename Class,
typename... T>
204 return get_new_impl(
args, nargs, traits::make_index_sequence<
sizeof...(T)>());
206 virtual int nargs(){
return sizeof...(T) ; }
207 virtual void signature(std::string&
s,
const std::string& class_name ){
218 template <
typename Class>
222 virtual int nargs() = 0 ;
223 virtual void signature(std::string&
s,
const std::string& class_name) = 0 ;
226 template <
typename Class,
typename... T>
231 return get_new(
args, traits::make_index_sequence<
sizeof...(T)>() ) ;
233 virtual int nargs(){
return sizeof...(T) ; }
234 virtual void signature(std::string&
s,
const std::string& class_name ){
242 Class* (*ptr_fun)(T...) ;
245 inline bool yes(
SEXP* ,
int ){
255#include <Rcpp/module/Module_generated_ctor_signature.h>
256#include <Rcpp/module/Module_generated_Constructor.h>
257#include <Rcpp/module/Module_generated_Factory.h>
258#include <Rcpp/module/Module_generated_class_signature.h>
264 template <
typename Class>
279 inline void signature(std::string& buffer,
const std::string& class_name){
280 ctor->signature(buffer, class_name) ;
284 template <
typename Class>
299 inline void signature(std::string& buffer,
const std::string& class_name){
300 fact->signature(buffer, class_name) ;
305 template <
typename Class>
324 template <
typename Class>
332 RCPP_DEBUG(
"S4_CppConstructor( SignedConstructor<Class>* m, SEXP class_xp, const std::string& class_name, std::string& buffer" ) ;
337 field(
"signature" ) = buffer ;
345 template <
typename Class>
354 int n =
static_cast<int>(m->size()) ;
359 for(
int i=0; i<n; i++){
361 nargs[i] =
met->nargs() ;
365 met->signature(buffer, name) ;
371 field(
"size" ) = n ;
376 field(
"nargs" ) = nargs ;
384#if defined(HAS_VARIADIC_TEMPLATES)
401 inline int nargs() {
return sizeof...(T); }
402 inline bool is_void() {
return std::is_void<RESULT_TYPE>::value; }
403 inline bool is_const() {
return IsConst; }
404 inline void signature(std::string&
s,
const char* name) { Rcpp::signature<
RESULT_TYPE,T...>(
s, name); }
431 inline int nargs() {
return sizeof...(T); }
432 inline bool is_void() {
return std::is_void<RESULT_TYPE>::value; }
433 inline bool is_const() {
return IsConst; }
434 inline void signature(std::string&
s,
const char* name) { Rcpp::signature<
RESULT_TYPE,T...>(
s, name); }
445 #include <Rcpp/module/Module_generated_CppMethod.h>
446 #include <Rcpp/module/Module_generated_Pointer_CppMethod.h>
449 template <
typename Class>
456 virtual SEXP get(
Class* ) {
throw std::range_error(
"cannot retrieve property"); }
457 virtual void set(
Class*,
SEXP) {
throw std::range_error(
"cannot set property"); }
464 template <
typename Class,
typename Parent>
483 template <
typename Class>
490 template <
typename Class>
504 template <
typename Class>
510 RCPP_DEBUG(
"S4_field( CppProperty<Class>* p, const XP_Class& class_xp )" )
526 template <
typename Enum,
typename Parent>
536 module->add_enum( parent_typeinfo_name, name, values ) ;
540 values.insert(
PAIR( name_,
static_cast<int>( value_ ) ) ) ;
547 typedef std::map< std::string, int >
MAP ;
555#if defined(HAS_VARIADIC_TEMPLATES)
558 void function(
const char* name_,
RESULT_TYPE (*fun)(T... t),
const char* docstring = 0) {
575 #include <Rcpp/module/Module_generated_function.h>
580 template <
typename FROM,
typename TO>
583 function(
fun_name.c_str(), fun, docstring ) ;
595 slot(
"module" ) =
XP( p,
false ) ;
596 slot(
"pointer" ) =
clxp ;
600 slot(
".Data" ) = buffer ;
602 slot(
"fields" ) =
cl->fields(
clxp ) ;
604 slot(
"methods" ) =
cl->getMethods(
clxp, buffer ) ;
605 slot(
"constructors") =
cl->getConstructors(
clxp, buffer ) ;
606 slot(
"docstring" ) =
cl->docstring ;
607 slot(
"typeid" ) =
cl->get_typeinfo_name() ;
608 slot(
"enums" ) =
cl->enums ;
609 slot(
"parents" ) =
cl->parents ;
621 slot(
"module" ) =
XP( p,
false ) ;
623 slot(
"pointer" ) = xp ;
630#define RCPP_MODULE_BOOT(name) _rcpp_module_boot_##name
632#define RCPP_MODULE(name) \
633 void _rcpp_module_##name##_init() ; \
634 static Rcpp::Module _rcpp_module_##name( # name ) ; \
635 extern "C" SEXP _rcpp_module_boot_##name(){ \
636 ::setCurrentScope( & _rcpp_module_##name ) ; \
637 _rcpp_module_##name##_init( ) ; \
638 Rcpp::XPtr<Rcpp::Module> mod_xp(& _rcpp_module_##name , false); \
639 ::setCurrentScope( 0 ) ; \
642 void _rcpp_module_##name##_init()
646#define VARIABLE_IS_NOT_USED __attribute__ ((unused))
648#define VARIABLE_IS_NOT_USED
656#define GET_MODULE_SYM ( moduleSym == NULL ? moduleSym = Rf_install("Module") : moduleSym )
659#define LOAD_RCPP_MODULE(NAME) \
660 Shield<SEXP> __load_module_call__( Rf_lang2( GET_MODULE_SYM, _rcpp_module_boot_##NAME() ) ); \
661 Rcpp_fast_eval( __load_module_call__, R_GlobalEnv );
#define VARIABLE_IS_NOT_USED
static VARIABLE_IS_NOT_USED SEXP moduleSym
self & field(const char *name_, T Class::*ptr, const char *docstring=0)
Rcpp::XPtr< Rcpp::Module > XP
CppClass(Module *p, class_Base *cl, std::string &buffer)
XPtr< class_Base > XP_Class
virtual void run(Class *)
CppInheritedMethod(ParentMethod *parent_method_pointer_)
ParentMethod * parent_method_pointer
SEXP operator()(Class *object, SEXP *args)
CppMethod< Parent > ParentMethod
void signature(std::string &s, const char *name)
CppProperty< Class > Base
void set(Class *obj, SEXP s)
CppInheritedProperty(CppProperty< Parent > *parent_property_)
CppProperty< Parent > * parent_property
virtual void signature(std::string &s, const char *name)
virtual SEXP operator()(Class *, SEXP *)
CppObject(Module *p, class_Base *clazz, SEXP xp)
Rcpp::XPtr< Rcpp::Module > XP
CppProperty(const char *doc=0)
virtual SEXP get(Class *)
virtual bool is_readonly()
virtual std::string get_class()
virtual void set(Class *, SEXP)
FunctionFinalizer(Pointer p)
virtual void run(Class *object)
Reference::Storage Storage
XPtr< class_Base > XP_Class
S4_CppConstructor(SignedConstructor< Class > *m, const XP_Class &class_xp, const std::string &class_name, std::string &buffer)
S4_CppOverloadedMethods(vec_signed_method *m, const XP_Class &class_xp, const char *name, std::string &buffer)
std::vector< signed_method_class * > vec_signed_method
SignedMethod< Class > signed_method_class
Rcpp::XPtr< class_Base > XP_Class
XPtr< class_Base > XP_Class
S4_field(CppProperty< Class > *p, const XP_Class &class_xp)
void signature(std::string &buffer, const std::string &class_name)
Constructor_Base< Class > * ctor
SignedConstructor(Constructor_Base< Class > *ctor_, ValidConstructor valid_, const char *doc)
void signature(std::string &buffer, const std::string &class_name)
SignedFactory(Factory_Base< Class > *fact_, ValidConstructor valid_, const char *doc)
Factory_Base< Class > * fact
void signature(std::string &s, const char *name)
SignedMethod(METHOD *m, ValidMethod valid_, const char *doc)
CppMethod< Class > METHOD
self & value(const char *name_, Enum value_)
std::map< std::string, int > MAP
std::string parent_typeinfo_name
enum_< Enum, Parent > self
#define RCPP_CTOR_ASSIGN_WITH_BASE(__CLASS__)
T as(SEXP x, ::Rcpp::traits::r_type_primitive_tag)
SEXP make_new_object(Class *ptr)
std::string get_converter_name(const char *from, const char *to)
Function_Impl< PreserveStorage > Function
bool(* ValidConstructor)(SEXP *, int)
void converter(const char *from, const char *to, TO(*fun)(FROM), const char *docstring=0)
bool(* ValidMethod)(SEXP *, int)
Reference_Impl< PreserveStorage > Reference
S4_Impl< PreserveStorage > S4
attribute_hidden Rcpp::Module * getCurrentScope()
remove_const< typenameremove_reference< T >::type >::type type