Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
DeclareExecutors.h
Go to the documentation of this file.
1#ifndef CPYRT_DECLAREEXECUTORS_H
2#define CPYRT_DECLAREEXECUTORS_H
3
4#include "Python.h"
5#include "cppjit_interop.h"
6
7// Bindings
8#include "CallContext.h"
9#include "Dimensions.h"
10#include "Executors.h"
11
12// Standard
13#include <cstddef>
14
15namespace cppjit::cpyrt {
16
17namespace {
18
19#define CPPJIT_DECL_EXEC(name) \
20 class name##Executor : public Executor { \
21 public: \
22 PyObject* Execute(interop::TCppMethod_t, interop::TCppObject_t, \
23 CallContext*) override; \
24 }
25
26// executors for built-ins
28CPPJIT_DECL_EXEC(BoolConstRef);
30CPPJIT_DECL_EXEC(CharConstRef);
31CPPJIT_DECL_EXEC(UChar);
32CPPJIT_DECL_EXEC(UCharConstRef);
33CPPJIT_DECL_EXEC(WChar);
34CPPJIT_DECL_EXEC(Char16);
35CPPJIT_DECL_EXEC(Char32);
37CPPJIT_DECL_EXEC(Int8ConstRef);
38CPPJIT_DECL_EXEC(UInt8);
39CPPJIT_DECL_EXEC(UInt8ConstRef);
40CPPJIT_DECL_EXEC(Short);
43CPPJIT_DECL_EXEC(ULong);
44CPPJIT_DECL_EXEC(LongLong);
45CPPJIT_DECL_EXEC(ULongLong);
46CPPJIT_DECL_EXEC(Float);
47CPPJIT_DECL_EXEC(Double);
48CPPJIT_DECL_EXEC(LongDouble);
50CPPJIT_DECL_EXEC(CString);
51CPPJIT_DECL_EXEC(CStringRef);
52CPPJIT_DECL_EXEC(WCString);
53CPPJIT_DECL_EXEC(CString16);
54CPPJIT_DECL_EXEC(CString32);
55
56// pointer/array executors
57#define CPPJIT_ARRAY_DECL_EXEC(name) \
58 class name##ArrayExecutor : public Executor { \
59 dims_t fShape; \
60 \
61 public: \
62 name##ArrayExecutor(dims_t dims) : fShape(dims) {} \
63 PyObject* Execute(interop::TCppMethod_t, interop::TCppObject_t, \
64 CallContext*) override; \
65 bool HasState() override { return true; } \
66 }
89
90// special cases
91CPPJIT_DECL_EXEC(ComplexD);
92CPPJIT_DECL_EXEC(STLString);
93CPPJIT_DECL_EXEC(STLWString);
94
95class InstancePtrExecutor : public Executor {
96public:
97 InstancePtrExecutor(interop::TCppScope_t klass) : fClass(klass) {}
99 CallContext*) override;
100 bool HasState() override { return true; }
101
102protected:
104};
105
106class InstanceExecutor : public Executor {
107public:
108 InstanceExecutor(interop::TCppScope_t klass);
110 CallContext*) override;
111 bool HasState() override { return true; }
112
113protected:
115 uint32_t fFlags;
116};
117
118class IteratorExecutor : public InstanceExecutor {
119public:
120 IteratorExecutor(interop::TCppScope_t klass);
121};
122
123CPPJIT_DECL_EXEC(Constructor);
125
126#define CPPJIT_DECL_REFEXEC(name) \
127 class name##RefExecutor : public RefExecutor { \
128 public: \
129 PyObject* Execute(interop::TCppMethod_t, interop::TCppObject_t, \
130 CallContext*) override; \
131 }
132
139CPPJIT_DECL_REFEXEC(UShort);
144CPPJIT_DECL_REFEXEC(LongLong);
145CPPJIT_DECL_REFEXEC(ULongLong);
147CPPJIT_DECL_REFEXEC(Double);
148CPPJIT_DECL_REFEXEC(LongDouble);
149CPPJIT_DECL_REFEXEC(ComplexD);
150CPPJIT_DECL_REFEXEC(STLString);
151
152// special cases
153class InstanceRefExecutor : public RefExecutor {
154public:
155 InstanceRefExecutor(interop::TCppScope_t klass) : fClass(klass) {}
157 CallContext*) override;
158
159protected:
161};
162
163class InstancePtrPtrExecutor : public InstanceRefExecutor {
164public:
165 using InstanceRefExecutor::InstanceRefExecutor;
167 CallContext*) override;
168};
169
170class InstancePtrRefExecutor : public InstanceRefExecutor {
171public:
172 using InstanceRefExecutor::InstanceRefExecutor;
174 CallContext*) override;
175};
176
177class InstanceArrayExecutor : public InstancePtrExecutor {
178public:
179 InstanceArrayExecutor(interop::TCppScope_t klass, dim_t array_size)
180 : InstancePtrExecutor(klass), fSize(array_size) {}
182 CallContext*) override;
183
184protected:
186};
187
188class FunctionPointerExecutor : public Executor {
189public:
190 FunctionPointerExecutor(const std::string& ret, const std::string& sig)
191 : fRetType(ret), fSignature(sig) {}
193 CallContext*) override;
194
195protected:
196 std::string fRetType;
197 std::string fSignature;
198};
199
200} // unnamed namespace
201
202} // namespace cppjit::cpyrt
203
204#endif // !CPYRT_DECLAREEXECUTORS_H
std::string fRetType
interop::TCppScope_t fClass
std::string fSignature
#define CPPJIT_ARRAY_DECL_EXEC(name)
dim_t fSize
#define CPPJIT_DECL_REFEXEC(name)
#define CPPJIT_DECL_EXEC(name)
uint32_t fFlags
_object PyObject
Py_ssize_t array_size(const std::string &name)
Py_ssize_t dim_t
Definition API.h:100
Cpp::ObjectRef TCppObject_t
Definition API.h:43
Cpp::FuncRef TCppMethod_t
Definition API.h:44
Cpp::DeclRef TCppScope_t
Definition API.h:41