1#ifndef CPYRT_DECLARECONVERTERS_H
2#define CPYRT_DECLARECONVERTERS_H
17#define CPPJIT_DECLARE_BASIC_CONVERTER(name) \
18 class name##Converter : public Converter { \
20 bool SetArg(PyObject*, Parameter&, CallContext* = nullptr) override; \
21 PyObject* FromMemory(void*) override; \
22 bool ToMemory(PyObject*, void*, PyObject* = nullptr) override; \
23 std::string GetFailureMsg() override { return "[" #name "Converter]"; } \
26 class Const##name##RefConverter : public Converter { \
28 bool SetArg(PyObject*, Parameter&, CallContext* = nullptr) override; \
29 PyObject* FromMemory(void*) override; \
30 std::string GetFailureMsg() override { \
31 return "[Const" #name "RefConverter]"; \
35#define CPPJIT_DECLARE_BASIC_CONVERTER2(name, base) \
36 class name##Converter : public base##Converter { \
38 PyObject* FromMemory(void*) override; \
39 bool ToMemory(PyObject*, void*, PyObject* = nullptr) override; \
40 std::string GetFailureMsg() override { return "[" #name "Converter]"; } \
43 class Const##name##RefConverter : public Converter { \
45 bool SetArg(PyObject*, Parameter&, CallContext* = nullptr) override; \
46 PyObject* FromMemory(void*) override; \
47 std::string GetFailureMsg() override { \
48 return "[Const" #name "RefConverter]"; \
52#define CPPJIT_DECLARE_REFCONVERTER(name) \
53 class name##RefConverter : public Converter { \
55 bool SetArg(PyObject*, Parameter&, CallContext* = nullptr) override; \
56 PyObject* FromMemory(void*) override; \
57 std::string GetFailureMsg() override { return "[" #name "RefConverter]"; } \
60#define CPPJIT_DECLARE_ARRAY_CONVERTER(name) \
61 class name##ArrayConverter : public Converter { \
63 name##ArrayConverter(cdims_t dims); \
64 name##ArrayConverter(const name##ArrayConverter&) = delete; \
65 name##ArrayConverter& operator=(const name##ArrayConverter&) = delete; \
66 bool SetArg(PyObject*, Parameter&, CallContext* = nullptr) override; \
67 PyObject* FromMemory(void*) override; \
68 bool ToMemory(PyObject*, void*, PyObject* = nullptr) override; \
69 bool HasState() override { return true; } \
70 std::string GetFailureMsg() override { \
71 return "[" #name "ArrayConverter]"; \
83class SCharAsIntConverter :
public CharConverter {
85 using CharConverter::CharConverter;
86 PyObject* FromMemory(
void*)
override;
89class UCharAsIntConverter :
public UCharConverter {
91 using UCharConverter::UCharConverter;
92 PyObject* FromMemory(
void*)
override;
141class EnumConverter :
public Converter {
143 EnumConverter(Converter* base,
const std::string& enum_name)
145 ~EnumConverter()
override;
149 PyObject* FromMemory(
void* address)
override;
152 bool HasState()
override {
return true; }
153 std::string GetFailureMsg()
override;
160class VoidConverter :
public Converter {
165class CStringConverter :
public Converter {
167 CStringConverter(std::string::size_type maxSize = std::string::npos)
172 PyObject* FromMemory(
void* address)
override;
174 bool HasState()
override {
return true; }
175 std::string GetFailureMsg()
override {
return "[CStringConverter]"; }
182class NonConstCStringConverter :
public CStringConverter {
184 using CStringConverter::CStringConverter;
188 PyObject* FromMemory(
void* address)
override;
189 std::string GetFailureMsg()
override {
return "[NonConstCStringConverter]"; }
192class WCStringConverter :
public Converter {
194 WCStringConverter(std::wstring::size_type maxSize = std::wstring::npos)
196 WCStringConverter(
const WCStringConverter&) =
delete;
197 WCStringConverter& operator=(
const WCStringConverter&) =
delete;
198 virtual ~WCStringConverter() {
free(fBuffer); }
202 PyObject* FromMemory(
void* address)
override;
204 bool HasState()
override {
return true; }
205 std::string GetFailureMsg()
override {
return "[WCStringConverter]"; };
212class CString16Converter :
public Converter {
214 CString16Converter(std::wstring::size_type maxSize = std::wstring::npos)
216 CString16Converter(
const CString16Converter&) =
delete;
217 CString16Converter& operator=(
const CString16Converter&) =
delete;
218 virtual ~CString16Converter() {
free(fBuffer); }
222 PyObject* FromMemory(
void* address)
override;
224 bool HasState()
override {
return true; }
225 std::string GetFailureMsg()
override {
return "[CString16Converter]"; };
232class CString32Converter :
public Converter {
234 CString32Converter(std::wstring::size_type maxSize = std::wstring::npos)
236 CString32Converter(
const CString32Converter&) =
delete;
237 CString32Converter& operator=(
const CString32Converter&) =
delete;
238 virtual ~CString32Converter() {
free(fBuffer); }
242 PyObject* FromMemory(
void* address)
override;
244 bool HasState()
override {
return true; }
245 std::string GetFailureMsg()
override {
return "[CString32Converter]"; };
277class CStringArrayConverter :
public SCharArrayConverter {
279 CStringArrayConverter(
cdims_t dims,
bool fixed) : SCharArrayConverter(dims) {
282 using SCharArrayConverter::SCharArrayConverter;
284 PyObject* FromMemory(
void* address)
override;
286 std::string GetFailureMsg()
override {
return "[CStringArrayConverter]"; };
289 std::vector<const char*>
fBuffer;
292class NonConstCStringArrayConverter :
public CStringArrayConverter {
294 using CStringArrayConverter::CStringArrayConverter;
295 PyObject* FromMemory(
void* address)
override;
296 std::string GetFailureMsg()
override {
297 return "[NonConstCStringArrayConverter]";
302class NullptrConverter :
public Converter {
307class InstanceConverter :
public StrictInstancePtrConverter {
309 using StrictInstancePtrConverter::StrictInstancePtrConverter;
311 PyObject* FromMemory(
void*)
override;
313 std::string GetFailureMsg()
override {
return "[InstanceConverter]"; };
316class InstanceRefConverter :
public Converter {
323 PyObject* FromMemory(
void* address)
override;
324 bool HasState()
override {
return true; }
325 std::string GetFailureMsg()
override {
return "[InstanceRefConverter]"; };
332class InstanceMoveConverter :
public InstanceRefConverter {
335 : InstanceRefConverter(klass,
true) {}
337 std::string GetFailureMsg()
override {
return "[InstanceMoveConverter]"; };
340template <
bool ISREFERENCE>
341class InstancePtrPtrConverter :
public InstancePtrConverter<false> {
347 PyObject* FromMemory(
void* address)
override;
349 std::string GetFailureMsg()
override {
return "[InstancePtrPtrConverter]"; };
352class InstanceArrayConverter :
public InstancePtrConverter<false> {
355 bool keepControl =
false)
356 : InstancePtrConverter<false>(klass, keepControl),
fShape(dims) {}
357 InstanceArrayConverter(
const InstanceArrayConverter&) =
delete;
358 InstanceArrayConverter& operator=(
const InstanceArrayConverter&) =
delete;
362 PyObject* FromMemory(
void* address)
override;
364 std::string GetFailureMsg()
override {
return "[InstanceArrayConverter]"; };
370class ComplexDConverter :
public InstanceConverter {
372 ComplexDConverter(
bool keepControl =
false);
376 PyObject* FromMemory(
void* address)
override;
378 bool HasState()
override {
return true; }
379 std::string GetFailureMsg()
override {
return "[ComplexDConverter]"; };
387class STLIteratorConverter :
public Converter {
390 std::string GetFailureMsg()
override {
return "[STLIteratorConverter]"; };
394class VoidPtrRefConverter :
public Converter {
397 std::string GetFailureMsg()
override {
return "[VoidPtrRefConverter]"; };
400class VoidPtrPtrConverter :
public Converter {
402 VoidPtrPtrConverter(
cdims_t dims,
403 const std::string& failureMsg = std::string());
405 PyObject* FromMemory(
void* address)
override;
406 bool HasState()
override {
return true; }
407 std::string GetFailureMsg()
override {
419#define CPPJIT_DECLARE_STRING_CONVERTER(name, strtype) \
420 class name##Converter : public InstanceConverter { \
422 name##Converter(bool keepControl = true); \
425 bool SetArg(PyObject*, Parameter&, CallContext* = nullptr) override; \
426 PyObject* FromMemory(void* address) override; \
427 bool ToMemory(PyObject*, void*, PyObject* = nullptr) override; \
428 bool HasState() override { return true; } \
429 std::string GetFailureMsg() override { return "[" #name "Converter]"; }; \
439class STLStringMoveConverter :
public STLStringConverter {
441 using STLStringConverter::STLStringConverter;
445 std::string GetFailureMsg()
override {
return "[STLStringMoveConverter]"; };
449class FunctionPointerConverter :
public Converter {
456 PyObject* FromMemory(
void* address)
override;
458 bool HasState()
override {
return true; }
459 std::string GetFailureMsg()
override {
return "[FunctionPointerConverter]"; };
467class StdFunctionConverter :
public FunctionPointerConverter {
470 const std::string& ret,
const std::string& sig)
475 StdFunctionConverter(
const StdFunctionConverter&) =
delete;
476 StdFunctionConverter& operator=(
const StdFunctionConverter&) =
delete;
477 virtual ~StdFunctionConverter() {
delete fConverter; }
481 PyObject* FromMemory(
void* address)
override;
483 std::string GetFailureMsg()
override {
return "[StdFunctionConverter]"; };
492class SmartPtrConverter :
public Converter {
495 bool keepControl =
false,
bool isRef =
false)
501 PyObject* FromMemory(
void* address)
override;
503 bool HasState()
override {
return true; }
504 std::string GetFailureMsg()
override {
return "[SmartPtrConverter]"; };
507 virtual bool GetAddressSpecialCase(
PyObject*,
void*&) {
return false; }
516class InitializerListConverter :
public InstanceConverter {
519 std::string
const& value_type);
520 InitializerListConverter(
const InitializerListConverter&) =
delete;
521 InitializerListConverter& operator=(
const InitializerListConverter&) =
delete;
522 virtual ~InitializerListConverter();
526 bool HasState()
override {
return true; }
527 std::string GetFailureMsg()
override {
return "[FunctionPointerConverter]"; };
interop::TCppScope_t fValueType
interop::TCppScope_t fUnderlyingType
#define CPPJIT_DECLARE_REFCONVERTER(name)
const std::string fFailureMsg
cppjit::interop::TCppType_t fFnType
interop::TCppScope_t fSmartPtrType
std::string fValueTypeName
#define CPPJIT_DECLARE_BASIC_CONVERTER(name)
#define CPPJIT_DECLARE_BASIC_CONVERTER2(name, base)
interop::TCppScope_t fClass
#define CPPJIT_DECLARE_ARRAY_CONVERTER(name)
#define CPPJIT_DECLARE_STRING_CONVERTER(name, strtype)
std::string::size_type fMaxSize
std::vector< Converter * > fConverters
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
InstancePtrConverter(interop::TCppScope_t klass, bool keepControl=false, const std::string &failureMsg=std::string())
TCppType_t GetFnTypeFromStdFn(TCppType_t fn_type)