Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
DeclareExecutors.h
Go to the documentation of this file.
1#ifndef CPYCPPYY_DECLAREEXECUTORS_H
2#define CPYCPPYY_DECLAREEXECUTORS_H
3
4// Bindings
5#include "Executors.h"
6#include "CallContext.h"
7#include "Dimensions.h"
8
9// Standard
10#if __cplusplus > 201402L
11#include <cstddef>
12#endif
13
14
15namespace CPyCppyy {
16
17namespace {
18
19#define CPPYY_DECL_EXEC(name) \
20class name##Executor : public Executor { \
21public: \
22 virtual PyObject* Execute( \
23 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*); \
24}
25
26// executors for built-ins
27CPPYY_DECL_EXEC(Bool);
28CPPYY_DECL_EXEC(BoolConstRef);
29CPPYY_DECL_EXEC(Char);
30CPPYY_DECL_EXEC(CharConstRef);
31CPPYY_DECL_EXEC(UChar);
32CPPYY_DECL_EXEC(UCharConstRef);
33CPPYY_DECL_EXEC(WChar);
34CPPYY_DECL_EXEC(Char16);
35CPPYY_DECL_EXEC(Char32);
36CPPYY_DECL_EXEC(Int8);
37CPPYY_DECL_EXEC(UInt8);
38CPPYY_DECL_EXEC(Short);
40CPPYY_DECL_EXEC(Long);
41CPPYY_DECL_EXEC(ULong);
42CPPYY_DECL_EXEC(LongLong);
43CPPYY_DECL_EXEC(ULongLong);
44CPPYY_DECL_EXEC(Float);
45CPPYY_DECL_EXEC(Double);
46CPPYY_DECL_EXEC(LongDouble);
47CPPYY_DECL_EXEC(Void);
48CPPYY_DECL_EXEC(CString);
49CPPYY_DECL_EXEC(CStringRef);
50CPPYY_DECL_EXEC(WCString);
51CPPYY_DECL_EXEC(CString16);
52CPPYY_DECL_EXEC(CString32);
53
54// pointer/array executors
55#define CPPYY_ARRAY_DECL_EXEC(name) \
56class name##ArrayExecutor : public Executor { \
57 dims_t fShape; \
58public: \
59 name##ArrayExecutor(dims_t dims) : fShape(dims) {} \
60 virtual PyObject* Execute( \
61 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*); \
62 virtual bool HasState() { return true; } \
63}
68#if __cplusplus > 201402L
70#endif
83CPPYY_ARRAY_DECL_EXEC(ComplexF);
84CPPYY_ARRAY_DECL_EXEC(ComplexD);
85CPPYY_ARRAY_DECL_EXEC(ComplexI);
86CPPYY_ARRAY_DECL_EXEC(ComplexL);
87
88// special cases
89CPPYY_DECL_EXEC(ComplexD);
90CPPYY_DECL_EXEC(STLString);
91CPPYY_DECL_EXEC(STLWString);
92
93class InstancePtrExecutor : public Executor {
94public:
95 InstancePtrExecutor(Cppyy::TCppType_t klass) : fClass(klass) {}
96 virtual PyObject* Execute(
98 virtual bool HasState() { return true; }
99
100protected:
102};
103
104class InstanceExecutor : public Executor {
105public:
106 InstanceExecutor(Cppyy::TCppType_t klass);
107 virtual PyObject* Execute(
109 virtual bool HasState() { return true; }
110
111protected:
113 uint32_t fFlags;
114};
115
116class IteratorExecutor : public InstanceExecutor {
117public:
118 IteratorExecutor(Cppyy::TCppType_t klass);
119};
120
121CPPYY_DECL_EXEC(Constructor);
123
124#define CPPYY_DECL_REFEXEC(name) \
125class name##RefExecutor : public RefExecutor { \
126public: \
127 virtual PyObject* Execute( \
128 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*); \
129}
130
133CPPYY_DECL_REFEXEC(UChar);
135CPPYY_DECL_REFEXEC(UInt8);
136CPPYY_DECL_REFEXEC(Short);
137CPPYY_DECL_REFEXEC(UShort);
141CPPYY_DECL_REFEXEC(ULong);
142CPPYY_DECL_REFEXEC(LongLong);
143CPPYY_DECL_REFEXEC(ULongLong);
144CPPYY_DECL_REFEXEC(Float);
145CPPYY_DECL_REFEXEC(Double);
146CPPYY_DECL_REFEXEC(LongDouble);
147CPPYY_DECL_REFEXEC(ComplexD);
148CPPYY_DECL_REFEXEC(STLString);
149
150// special cases
151class InstanceRefExecutor : public RefExecutor {
152public:
153 InstanceRefExecutor(Cppyy::TCppType_t klass) : fClass(klass) {}
154 virtual PyObject* Execute(
156
157protected:
159};
160
161class InstancePtrPtrExecutor : public InstanceRefExecutor {
162public:
163 using InstanceRefExecutor::InstanceRefExecutor;
164 virtual PyObject* Execute(
166};
167
168class InstancePtrRefExecutor : public InstanceRefExecutor {
169public:
170 using InstanceRefExecutor::InstanceRefExecutor;
171 virtual PyObject* Execute(
173};
174
175class InstanceArrayExecutor : public InstancePtrExecutor {
176public:
177 InstanceArrayExecutor(Cppyy::TCppType_t klass, dim_t array_size)
178 : InstancePtrExecutor(klass), fSize(array_size) {}
179 virtual PyObject* Execute(
181
182protected:
184};
185
186class FunctionPointerExecutor : public Executor {
187public:
188 FunctionPointerExecutor(const std::string& ret, const std::string& sig) :
189 fRetType(ret), fSignature(sig) {}
190 virtual PyObject* Execute(
192
193protected:
194 std::string fRetType;
195 std::string fSignature;
196};
197
198} // unnamed namespace
199
200} // namespace CPyCppyy
201
202#endif // !CPYCPPYY_DECLAREEXECUTORS_H
std::string fRetType
Cppyy::TCppType_t fClass
std::string fSignature
#define CPPYY_ARRAY_DECL_EXEC(name)
dim_t fSize
#define CPPYY_DECL_EXEC(name)
#define CPPYY_DECL_REFEXEC(name)
_object PyObject
std::ios_base::fmtflags fFlags
Py_ssize_t array_size(const std::string &name)
Py_ssize_t dim_t
Definition API.h:90
intptr_t TCppMethod_t
Definition cpp_cppyy.h:22
void * TCppObject_t
Definition cpp_cppyy.h:21
TCppScope_t TCppType_t
Definition cpp_cppyy.h:19