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}
84
85// special cases
89
90class InstancePtrExecutor : public Executor {
91public:
92 InstancePtrExecutor(Cppyy::TCppType_t klass) : fClass(klass) {}
93 PyObject* Execute(
94 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*) override;
95 bool HasState() override { return true; }
96
97protected:
99};
100
101class InstanceExecutor : public Executor {
102public:
103 InstanceExecutor(Cppyy::TCppType_t klass);
104 PyObject* Execute(
105 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*) override;
106 bool HasState() override { return true; }
107
108protected:
110 uint32_t fFlags;
111};
112
113class IteratorExecutor : public InstanceExecutor {
114public:
115 IteratorExecutor(Cppyy::TCppType_t klass);
116};
117
118CPPYY_DECL_EXEC(Constructor);
120
121#define CPPYY_DECL_REFEXEC(name) \
122class name##RefExecutor : public RefExecutor { \
123public: \
124 PyObject* Execute( \
125 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*) override; \
126}
127
130CPPYY_DECL_REFEXEC(UChar);
133CPPYY_DECL_REFEXEC(Short);
134CPPYY_DECL_REFEXEC(UShort);
138CPPYY_DECL_REFEXEC(ULong);
141CPPYY_DECL_REFEXEC(Float);
142CPPYY_DECL_REFEXEC(Double);
146
147// special cases
148class InstanceRefExecutor : public RefExecutor {
149public:
150 InstanceRefExecutor(Cppyy::TCppType_t klass) : fClass(klass) {}
151 PyObject* Execute(
152 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*) override;
153
154protected:
156};
157
158class InstancePtrPtrExecutor : public InstanceRefExecutor {
159public:
160 using InstanceRefExecutor::InstanceRefExecutor;
161 PyObject* Execute(
162 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*) override;
163};
164
165class InstancePtrRefExecutor : public InstanceRefExecutor {
166public:
167 using InstanceRefExecutor::InstanceRefExecutor;
168 PyObject* Execute(
169 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*) override;
170};
171
172class InstanceArrayExecutor : public InstancePtrExecutor {
173public:
174 InstanceArrayExecutor(Cppyy::TCppType_t klass, dim_t array_size)
175 : InstancePtrExecutor(klass), fSize(array_size) {}
176 PyObject* Execute(
177 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*) override;
178
179protected:
181};
182
183class FunctionPointerExecutor : public Executor {
184public:
185 FunctionPointerExecutor(const std::string& ret, const std::string& sig) :
186 fRetType(ret), fSignature(sig) {}
187 PyObject* Execute(
188 Cppyy::TCppMethod_t, Cppyy::TCppObject_t, CallContext*) override;
189
190protected:
191 std::string fRetType;
192 std::string fSignature;
193};
194
195} // unnamed namespace
196
197} // namespace CPyCppyy
198
199#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)
uint32_t fFlags
#define CPPYY_DECL_REFEXEC(name)
_object PyObject
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