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#include <cstddef>
11
12
13namespace CPyCppyy {
14
15namespace {
16
17#define CPPYY_DECL_EXEC(name) \
18class name##Executor : public Executor { \
19public: \
20 PyObject* Execute( \
21 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*) override; \
22}
23
24// executors for built-ins
25CPPYY_DECL_EXEC(Bool);
27CPPYY_DECL_EXEC(Char);
29CPPYY_DECL_EXEC(UChar);
36CPPYY_DECL_EXEC(Short);
38CPPYY_DECL_EXEC(Long);
39CPPYY_DECL_EXEC(ULong);
42CPPYY_DECL_EXEC(Float);
43CPPYY_DECL_EXEC(Double);
51
52// pointer/array executors
53#define CPPYY_ARRAY_DECL_EXEC(name) \
54class name##ArrayExecutor : public Executor { \
55 dims_t fShape; \
56public: \
57 name##ArrayExecutor(dims_t dims) : fShape(dims) {} \
58 PyObject* Execute( \
59 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*) override; \
60 bool HasState() override { return true; } \
61}
83
84// special cases
88
89class InstancePtrExecutor : public Executor {
90public:
91 InstancePtrExecutor(Cppyy::TCppType_t klass) : fClass(klass) {}
92 PyObject* Execute(
93 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*) override;
94 bool HasState() override { return true; }
95
96protected:
98};
99
100class InstanceExecutor : public Executor {
101public:
102 InstanceExecutor(Cppyy::TCppType_t klass);
103 PyObject* Execute(
104 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*) override;
105 bool HasState() override { return true; }
106
107protected:
109 uint32_t fFlags;
110};
111
112class IteratorExecutor : public InstanceExecutor {
113public:
114 IteratorExecutor(Cppyy::TCppType_t klass);
115};
116
117CPPYY_DECL_EXEC(Constructor);
119
120#define CPPYY_DECL_REFEXEC(name) \
121class name##RefExecutor : public RefExecutor { \
122public: \
123 PyObject* Execute( \
124 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*) override; \
125}
126
129CPPYY_DECL_REFEXEC(UChar);
132CPPYY_DECL_REFEXEC(Short);
133CPPYY_DECL_REFEXEC(UShort);
137CPPYY_DECL_REFEXEC(ULong);
140CPPYY_DECL_REFEXEC(Float);
141CPPYY_DECL_REFEXEC(Double);
145
146// special cases
147class InstanceRefExecutor : public RefExecutor {
148public:
149 InstanceRefExecutor(Cppyy::TCppType_t klass) : fClass(klass) {}
150 PyObject* Execute(
151 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*) override;
152
153protected:
155};
156
157class InstancePtrPtrExecutor : public InstanceRefExecutor {
158public:
159 using InstanceRefExecutor::InstanceRefExecutor;
160 PyObject* Execute(
161 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*) override;
162};
163
164class InstancePtrRefExecutor : public InstanceRefExecutor {
165public:
166 using InstanceRefExecutor::InstanceRefExecutor;
167 PyObject* Execute(
168 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*) override;
169};
170
171class InstanceArrayExecutor : public InstancePtrExecutor {
172public:
173 InstanceArrayExecutor(Cppyy::TCppType_t klass, dim_t array_size)
174 : InstancePtrExecutor(klass), fSize(array_size) {}
175 PyObject* Execute(
176 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*) override;
177
178protected:
180};
181
182class FunctionPointerExecutor : public Executor {
183public:
184 FunctionPointerExecutor(const std::string& ret, const std::string& sig) :
185 fRetType(ret), fSignature(sig) {}
186 PyObject* Execute(
187 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*) override;
188
189protected:
190 std::string fRetType;
191 std::string fSignature;
192};
193
194} // unnamed namespace
195
196} // namespace CPyCppyy
197
198#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:38
void * TCppObject_t
Definition cpp_cppyy.h:37
TCppScope_t TCppType_t
Definition cpp_cppyy.h:35