Logo ROOT   master
Reference Guide
Cppyy.h
Go to the documentation of this file.
1 #ifndef CPYCPPYY_CPPYY_H
2 #define CPYCPPYY_CPPYY_H
3 
4 // Standard
5 #include <set>
6 #include <string>
7 #include <vector>
8 #include <stddef.h>
9 #include <stdint.h>
10 
11 // import/export (after precommondefs.h from PyPy)
12 #ifdef _MSC_VER
13 #define CPPYY_IMPORT extern __declspec(dllimport)
14 #else
15 #define CPPYY_IMPORT extern
16 #endif
17 
18 
19 namespace Cppyy {
20 
21  typedef size_t TCppScope_t;
22  typedef TCppScope_t TCppType_t;
23  typedef void* TCppEnum_t;
24  typedef void* TCppObject_t;
25  typedef intptr_t TCppMethod_t;
26 
27  typedef size_t TCppIndex_t;
28  typedef void* TCppFuncAddr_t;
29 
30 // direct interpreter access -------------------------------------------------
32  bool Compile(const std::string& code);
33 
34 // name to opaque C++ scope representation -----------------------------------
36  std::string ResolveName(const std::string& cppitem_name);
38  std::string ResolveEnum(const std::string& enum_type);
40  TCppScope_t GetScope(const std::string& scope_name);
44  size_t SizeOf(TCppType_t klass);
46  size_t SizeOf(const std::string& type_name);
47 
49  bool IsBuiltin(const std::string& type_name);
51  bool IsComplete(const std::string& type_name);
52 
54  TCppScope_t gGlobalScope; // for fast access
55 
56 // memory management ---------------------------------------------------------
65 
66 // method/function dispatching -----------------------------------------------
68  void CallV(TCppMethod_t method, TCppObject_t self, size_t nargs, void* args);
70  unsigned char CallB(TCppMethod_t method, TCppObject_t self, size_t nargs, void* args);
72  char CallC(TCppMethod_t method, TCppObject_t self, size_t nargs, void* args);
74  short CallH(TCppMethod_t method, TCppObject_t self, size_t nargs, void* args);
76  int CallI(TCppMethod_t method, TCppObject_t self, size_t nargs, void* args);
78  long CallL(TCppMethod_t method, TCppObject_t self, size_t nargs, void* args);
80  Long64_t CallLL(TCppMethod_t method, TCppObject_t self, size_t nargs, void* args);
82  float CallF(TCppMethod_t method, TCppObject_t self, size_t nargs, void* args);
84  double CallD(TCppMethod_t method, TCppObject_t self, size_t nargs, void* args);
86  LongDouble_t CallLD(TCppMethod_t method, TCppObject_t self, size_t nargs, void* args);
88  void* CallR(TCppMethod_t method, TCppObject_t self, size_t nargs, void* args);
90  char* CallS(TCppMethod_t method, TCppObject_t self, size_t nargs, void* args, size_t* length);
92  TCppObject_t CallConstructor(TCppMethod_t method, TCppType_t type, size_t nargs, void* args);
96  TCppObject_t CallO(TCppMethod_t method, TCppObject_t self, size_t nargs, void* args, TCppType_t result_type);
97 
99  TCppFuncAddr_t GetFunctionAddress(TCppMethod_t method, bool check_enabled=true);
100 
101 // handling of function argument buffer --------------------------------------
103  void* AllocateFunctionArgs(size_t nargs);
105  void DeallocateFunctionArgs(void* args);
107  size_t GetFunctionArgSizeof();
109  size_t GetFunctionArgTypeoffset();
110 
111 // scope reflection information ----------------------------------------------
113  bool IsNamespace(TCppScope_t scope);
115  bool IsTemplate(const std::string& template_name);
117  bool IsAbstract(TCppType_t type);
119  bool IsEnum(const std::string& type_name);
120 
122  void GetAllCppNames(TCppScope_t scope, std::set<std::string>& cppnames);
123 
124 // namespace reflection information ------------------------------------------
126  std::vector<TCppScope_t> GetUsingNamespaces(TCppScope_t);
127 
128 // class reflection information ----------------------------------------------
130  std::string GetFinalName(TCppType_t type);
132  std::string GetScopedFinalName(TCppType_t type);
140  std::string GetBaseName(TCppType_t type, TCppIndex_t ibase);
142  bool IsSubtype(TCppType_t derived, TCppType_t base);
144  bool IsSmartPtr(TCppType_t type);
146  bool GetSmartPtrInfo(const std::string&, TCppType_t* raw, TCppMethod_t* deref);
148  void AddSmartPtrType(const std::string&);
149 
150 // calculate offsets between declared and actual type, up-cast: direction > 0; down-cast: direction < 0
152  ptrdiff_t GetBaseOffset(
153  TCppType_t derived, TCppType_t base, TCppObject_t address, int direction, bool rerror = false);
154 
155 // method/function reflection information ------------------------------------
159  std::vector<TCppIndex_t> GetMethodIndicesFromName(TCppScope_t scope, const std::string& name);
160 
163 
165  std::string GetMethodName(TCppMethod_t);
167  std::string GetMethodFullName(TCppMethod_t);
169  std::string GetMethodMangledName(TCppMethod_t);
171  std::string GetMethodResultType(TCppMethod_t);
177  std::string GetMethodArgName(TCppMethod_t, TCppIndex_t iarg);
179  std::string GetMethodArgType(TCppMethod_t, TCppIndex_t iarg);
181  std::string GetMethodArgDefault(TCppMethod_t, TCppIndex_t iarg);
183  std::string GetMethodSignature(TCppMethod_t, bool show_formalargs, TCppIndex_t maxargs = (TCppIndex_t)-1);
185  std::string GetMethodPrototype(TCppScope_t scope, TCppMethod_t, bool show_formalargs);
188 
192  std::string GetTemplatedMethodName(TCppScope_t scope, TCppIndex_t imeth);
196  bool ExistsMethodTemplate(TCppScope_t scope, const std::string& name);
198  bool IsMethodTemplate(TCppScope_t scope, TCppIndex_t imeth);
201  TCppScope_t scope, const std::string& name, const std::string& proto);
202 
205  TCppType_t scope, const std::string& lc, const std::string& rc, const std::string& op);
206 
207 // method properties ---------------------------------------------------------
209  bool IsPublicMethod(TCppMethod_t method);
211  bool IsConstructor(TCppMethod_t method);
213  bool IsDestructor(TCppMethod_t method);
215  bool IsStaticMethod(TCppMethod_t method);
216 
217 // data member reflection information ----------------------------------------
221  std::string GetDatamemberName(TCppScope_t scope, TCppIndex_t idata);
223  std::string GetDatamemberType(TCppScope_t scope, TCppIndex_t idata);
225  intptr_t GetDatamemberOffset(TCppScope_t scope, TCppIndex_t idata);
227  TCppIndex_t GetDatamemberIndex(TCppScope_t scope, const std::string& name);
228 
229 // data member properties ----------------------------------------------------
231  bool IsPublicData(TCppScope_t scope, TCppIndex_t idata);
233  bool IsStaticData(TCppScope_t scope, TCppIndex_t idata);
235  bool IsConstData(TCppScope_t scope, TCppIndex_t idata);
237  bool IsEnumData(TCppScope_t scope, TCppIndex_t idata);
239  int GetDimensionSize(TCppScope_t scope, TCppIndex_t idata, int dimension);
240 
241 // enum properties -----------------------------------------------------------
243  TCppEnum_t GetEnum(TCppScope_t scope, const std::string& enum_name);
247  std::string GetEnumDataName(TCppEnum_t, TCppIndex_t idata);
249  long long GetEnumDataValue(TCppEnum_t, TCppIndex_t idata);
250 
251 } // namespace Cppyy
252 
253 #endif // !CPYCPPYY_CPPYY_H
RPY_EXPORTED TCppIndex_t GetMethodReqArgs(TCppMethod_t)
TCppScope_t TCppType_t
Definition: cpp_cppyy.h:19
RPY_EXPORTED std::string GetMethodSignature(TCppMethod_t, bool show_formalargs, TCppIndex_t maxargs=(TCppIndex_t) -1)
RPY_EXPORTED bool HasComplexHierarchy(TCppType_t type)
RPY_EXPORTED size_t SizeOf(TCppType_t klass)
RPY_EXPORTED std::string GetScopedFinalName(TCppType_t type)
RPY_EXPORTED TCppType_t GetActualClass(TCppType_t klass, TCppObject_t obj)
size_t TCppScope_t
Definition: cpp_cppyy.h:18
RPY_EXPORTED bool IsEnum(const std::string &type_name)
RPY_EXPORTED bool IsStaticMethod(TCppMethod_t method)
RPY_EXPORTED char * CallS(TCppMethod_t method, TCppObject_t self, size_t nargs, void *args, size_t *length)
void * TCppEnum_t
Definition: cpp_cppyy.h:20
RPY_EXPORTED std::string GetDatamemberName(TCppScope_t scope, TCppIndex_t idata)
RPY_EXPORTED TCppObject_t CallConstructor(TCppMethod_t method, TCppType_t type, size_t nargs, void *args)
RPY_EXPORTED std::string GetBaseName(TCppType_t type, TCppIndex_t ibase)
RPY_EXPORTED std::vector< TCppIndex_t > GetMethodIndicesFromName(TCppScope_t scope, const std::string &name)
RPY_EXPORTED unsigned char CallB(TCppMethod_t method, TCppObject_t self, size_t nargs, void *args)
RPY_EXPORTED TCppIndex_t GetNumEnumData(TCppEnum_t)
RPY_EXPORTED std::string GetDatamemberType(TCppScope_t scope, TCppIndex_t idata)
RPY_EXPORTED bool Compile(const std::string &code)
RPY_EXPORTED bool ExistsMethodTemplate(TCppScope_t scope, const std::string &name)
RPY_EXPORTED TCppObject_t Allocate(TCppType_t type)
RPY_EXPORTED TCppEnum_t GetEnum(TCppScope_t scope, const std::string &enum_name)
RPY_EXPORTED TCppObject_t CallO(TCppMethod_t method, TCppObject_t self, size_t nargs, void *args, TCppType_t result_type)
RPY_EXPORTED TCppObject_t Construct(TCppType_t type)
RPY_EXPORTED void GetAllCppNames(TCppScope_t scope, std::set< std::string > &cppnames)
RPY_EXPORTED void Destruct(TCppType_t type, TCppObject_t instance)
RPY_EXPORTED TCppMethod_t GetMethod(TCppScope_t scope, TCppIndex_t imeth)
RPY_EXPORTED TCppIndex_t GetNumDatamembers(TCppScope_t scope)
RPY_EXPORTED bool IsComplete(const std::string &type_name)
RPY_EXPORTED TCppScope_t gGlobalScope
Definition: cpp_cppyy.h:51
RPY_EXPORTED void AddSmartPtrType(const std::string &)
RPY_EXPORTED std::string GetMethodPrototype(TCppScope_t scope, TCppMethod_t, bool show_formalargs)
RPY_EXPORTED void Deallocate(TCppType_t type, TCppObject_t instance)
RPY_EXPORTED std::string GetTemplatedMethodName(TCppScope_t scope, TCppIndex_t imeth)
RPY_EXPORTED TCppIndex_t GetNumTemplatedMethods(TCppScope_t scope)
RPY_EXPORTED Long64_t CallLL(TCppMethod_t method, TCppObject_t self, size_t nargs, void *args)
RPY_EXPORTED bool IsPublicData(TCppScope_t scope, TCppIndex_t idata)
size_t TCppIndex_t
Definition: cpp_cppyy.h:24
RPY_EXPORTED bool IsConstructor(TCppMethod_t method)
RPY_EXPORTED std::string GetMethodMangledName(TCppMethod_t)
RPY_EXPORTED size_t GetFunctionArgTypeoffset()
RPY_EXPORTED void * AllocateFunctionArgs(size_t nargs)
RPY_EXPORTED bool IsConstMethod(TCppMethod_t)
RPY_EXPORTED TCppIndex_t GetDatamemberIndex(TCppScope_t scope, const std::string &name)
RPY_EXPORTED short CallH(TCppMethod_t method, TCppObject_t self, size_t nargs, void *args)
RPY_EXPORTED void CallV(TCppMethod_t method, TCppObject_t self, size_t nargs, void *args)
RPY_EXPORTED ptrdiff_t GetBaseOffset(TCppType_t derived, TCppType_t base, TCppObject_t address, int direction, bool rerror=false)
RPY_EXPORTED float CallF(TCppMethod_t method, TCppObject_t self, size_t nargs, void *args)
RPY_EXPORTED std::string GetMethodFullName(TCppMethod_t)
RPY_EXPORTED std::string ResolveName(const std::string &cppitem_name)
RPY_EXPORTED TCppIndex_t GetMethodNumArgs(TCppMethod_t)
RPY_EXPORTED bool IsAbstract(TCppType_t type)
void * TCppFuncAddr_t
Definition: cpp_cppyy.h:25
RPY_EXPORTED std::string GetMethodName(TCppMethod_t)
RPY_EXPORTED bool IsStaticData(TCppScope_t scope, TCppIndex_t idata)
long double LongDouble_t
Definition: cpp_cppyy.h:15
RPY_EXPORTED bool IsEnumData(TCppScope_t scope, TCppIndex_t idata)
intptr_t TCppMethod_t
Definition: cpp_cppyy.h:22
RPY_EXPORTED void DeallocateFunctionArgs(void *args)
RPY_EXPORTED bool IsMethodTemplate(TCppScope_t scope, TCppIndex_t imeth)
RPY_EXPORTED long long GetEnumDataValue(TCppEnum_t, TCppIndex_t idata)
static Roo_reg_AGKInteg1D instance
#define CPPYY_IMPORT
Definition: Cppyy.h:15
RPY_EXPORTED TCppIndex_t GetNumMethods(TCppScope_t scope)
RPY_EXPORTED TCppIndex_t GetGlobalOperator(TCppType_t scope, const std::string &lc, const std::string &rc, const std::string &op)
RPY_EXPORTED bool GetSmartPtrInfo(const std::string &, TCppType_t *raw, TCppMethod_t *deref)
RPY_EXPORTED std::string GetMethodArgType(TCppMethod_t, TCppIndex_t iarg)
RPY_EXPORTED std::string GetEnumDataName(TCppEnum_t, TCppIndex_t idata)
RPY_EXPORTED double CallD(TCppMethod_t method, TCppObject_t self, size_t nargs, void *args)
RPY_EXPORTED std::string GetMethodResultType(TCppMethod_t)
RPY_EXPORTED TCppIndex_t GetNumBases(TCppType_t type)
RPY_EXPORTED char CallC(TCppMethod_t method, TCppObject_t self, size_t nargs, void *args)
int type
Definition: TGX11.cxx:120
RPY_EXPORTED TCppFuncAddr_t GetFunctionAddress(TCppMethod_t method, bool check_enabled=true)
RPY_EXPORTED bool IsNamespace(TCppScope_t scope)
RPY_EXPORTED int CallI(TCppMethod_t method, TCppObject_t self, size_t nargs, void *args)
RPY_EXPORTED void * CallR(TCppMethod_t method, TCppObject_t self, size_t nargs, void *args)
RPY_EXPORTED std::string ResolveEnum(const std::string &enum_type)
RPY_EXPORTED bool IsTemplatedConstructor(TCppScope_t scope, TCppIndex_t imeth)
void * TCppObject_t
Definition: cpp_cppyy.h:21
RPY_EXPORTED bool IsTemplate(const std::string &template_name)
RPY_EXPORTED TCppMethod_t GetMethodTemplate(TCppScope_t scope, const std::string &name, const std::string &proto)
RPY_EXPORTED bool IsBuiltin(const std::string &type_name)
RPY_EXPORTED bool IsConstData(TCppScope_t scope, TCppIndex_t idata)
RPY_EXPORTED TCppScope_t GetScope(const std::string &scope_name)
const char * proto
Definition: civetweb.c:16604
RPY_EXPORTED void CallDestructor(TCppType_t type, TCppObject_t self)
RPY_EXPORTED bool IsSubtype(TCppType_t derived, TCppType_t base)
RPY_EXPORTED int GetDimensionSize(TCppScope_t scope, TCppIndex_t idata, int dimension)
RPY_EXPORTED std::string GetMethodArgName(TCppMethod_t, TCppIndex_t iarg)
RPY_EXPORTED std::vector< TCppScope_t > GetUsingNamespaces(TCppScope_t)
RPY_EXPORTED long CallL(TCppMethod_t method, TCppObject_t self, size_t nargs, void *args)
RPY_EXPORTED std::string GetMethodArgDefault(TCppMethod_t, TCppIndex_t iarg)
RPY_EXPORTED std::string GetFinalName(TCppType_t type)
RPY_EXPORTED size_t GetFunctionArgSizeof()
RPY_EXPORTED intptr_t GetDatamemberOffset(TCppScope_t scope, TCppIndex_t idata)
char name[80]
Definition: TGX11.cxx:109
RPY_EXPORTED bool IsDestructor(TCppMethod_t method)
RPY_EXPORTED bool IsPublicMethod(TCppMethod_t method)
RPY_EXPORTED bool HasVirtualDestructor(TCppType_t type)
RPY_EXPORTED LongDouble_t CallLD(TCppMethod_t method, TCppObject_t self, size_t nargs, void *args)
RPY_EXPORTED bool IsSmartPtr(TCppType_t type)
long long Long64_t
Definition: cpp_cppyy.h:13