1#ifndef CPYCPPYY_DECLARECONVERTERS_H
2#define CPYCPPYY_DECLARECONVERTERS_H
20#define CPPYY_DECLARE_BASIC_CONVERTER(name) \
21class name##Converter : public Converter { \
23 virtual bool SetArg(PyObject*, Parameter&, CallContext* = nullptr); \
24 virtual PyObject* FromMemory(void*); \
25 virtual bool ToMemory(PyObject*, void*, PyObject* = nullptr); \
28class Const##name##RefConverter : public Converter { \
30 virtual bool SetArg(PyObject*, Parameter&, CallContext* = nullptr); \
31 virtual PyObject* FromMemory(void*); \
35#define CPPYY_DECLARE_BASIC_CONVERTER2(name, base) \
36class name##Converter : public base##Converter { \
38 virtual PyObject* FromMemory(void*); \
39 virtual bool ToMemory(PyObject*, void*, PyObject* = nullptr); \
42class Const##name##RefConverter : public Converter { \
44 virtual bool SetArg(PyObject*, Parameter&, CallContext* = nullptr); \
45 virtual PyObject* FromMemory(void*); \
48#define CPPYY_DECLARE_REFCONVERTER(name) \
49class name##RefConverter : public Converter { \
51 virtual bool SetArg(PyObject*, Parameter&, CallContext* = nullptr); \
52 virtual PyObject* FromMemory(void*); \
55#define CPPYY_DECLARE_ARRAY_CONVERTER(name) \
56class name##ArrayConverter : public Converter { \
58 name##ArrayConverter(cdims_t dims); \
59 name##ArrayConverter(const name##ArrayConverter&) = delete; \
60 name##ArrayConverter& operator=(const name##ArrayConverter&) = delete; \
61 virtual bool SetArg(PyObject*, Parameter&, CallContext* = nullptr); \
62 virtual PyObject* FromMemory(void*); \
63 virtual bool ToMemory(PyObject*, void*, PyObject* = nullptr); \
64 virtual bool HasState() { return true; } \
76class UCharAsIntConverter :
public UCharConverter {
78 using UCharConverter::UCharConverter;
123class CStringConverter :
public Converter {
125 CStringConverter(std::string::size_type maxSize = std::string::npos) : fMaxSize(maxSize) {}
129 virtual PyObject* FromMemory(
void* address);
131 virtual bool HasState() {
return true; }
135 std::string::size_type fMaxSize;
138class NonConstCStringConverter :
public CStringConverter {
140 using CStringConverter::CStringConverter;
144 virtual PyObject* FromMemory(
void* address);
147class WCStringConverter :
public Converter {
149 WCStringConverter(std::wstring::size_type maxSize = std::wstring::npos) :
150 fBuffer(nullptr), fMaxSize(maxSize) {}
151 WCStringConverter(
const WCStringConverter&) =
delete;
152 WCStringConverter&
operator=(
const WCStringConverter&) =
delete;
153 virtual ~WCStringConverter() {
free(fBuffer); }
157 virtual PyObject* FromMemory(
void* address);
159 virtual bool HasState() {
return true; }
163 std::wstring::size_type fMaxSize;
166class CString16Converter :
public Converter {
168 CString16Converter(std::wstring::size_type maxSize = std::wstring::npos) :
169 fBuffer(nullptr), fMaxSize(maxSize) {}
170 CString16Converter(
const CString16Converter&) =
delete;
171 CString16Converter&
operator=(
const CString16Converter&) =
delete;
172 virtual ~CString16Converter() {
free(fBuffer); }
176 virtual PyObject* FromMemory(
void* address);
178 virtual bool HasState() {
return true; }
182 std::wstring::size_type fMaxSize;
185class CString32Converter :
public Converter {
187 CString32Converter(std::wstring::size_type maxSize = std::wstring::npos) :
188 fBuffer(nullptr), fMaxSize(maxSize) {}
189 CString32Converter(
const CString32Converter&) =
delete;
190 CString32Converter&
operator=(
const CString32Converter&) =
delete;
191 virtual ~CString32Converter() {
free(fBuffer); }
195 virtual PyObject* FromMemory(
void* address);
197 virtual bool HasState() {
return true; }
201 std::wstring::size_type fMaxSize;
208#if __cplusplus > 201402L
227class CStringArrayConverter :
public SCharArrayConverter {
229 CStringArrayConverter(
cdims_t dims,
bool fixed) : SCharArrayConverter(dims) {
232 using SCharArrayConverter::SCharArrayConverter;
234 virtual PyObject* FromMemory(
void* address);
238 std::vector<const char*> fBuffer;
241class NonConstCStringArrayConverter :
public CStringArrayConverter {
243 using CStringArrayConverter::CStringArrayConverter;
244 virtual PyObject* FromMemory(
void* address);
248class NullptrConverter :
public Converter {
255 using StrictInstancePtrConverter::StrictInstancePtrConverter;
257 virtual PyObject* FromMemory(
void*);
261class InstanceRefConverter :
public Converter {
264 fClass(klass), fIsConst(isConst) {}
268 virtual PyObject* FromMemory(
void* address);
269 virtual bool HasState() {
return true; }
276class InstanceMoveConverter :
public InstanceRefConverter {
282template <
bool ISREFERENCE>
289 virtual PyObject* FromMemory(
void* address);
296 InstancePtrConverter<false>(klass, keepControl), fShape(dims) { }
297 InstanceArrayConverter(
const InstanceArrayConverter&) =
delete;
298 InstanceArrayConverter&
operator=(
const InstanceArrayConverter&) =
delete;
302 virtual PyObject* FromMemory(
void* address);
310class ComplexDConverter:
public InstanceConverter {
312 ComplexDConverter(
bool keepControl =
false);
316 virtual PyObject* FromMemory(
void* address);
318 virtual bool HasState() {
return true; }
321 std::complex<double> fBuffer;
327class STLIteratorConverter :
public Converter {
334class VoidPtrRefConverter :
public Converter {
339class VoidPtrPtrConverter :
public Converter {
341 VoidPtrPtrConverter(
cdims_t dims);
345 virtual PyObject* FromMemory(
void* address);
346 virtual bool HasState() {
return true; }
356#define CPPYY_DECLARE_STRING_CONVERTER(name, strtype) \
357class name##Converter : public InstanceConverter { \
359 name##Converter(bool keepControl = true); \
362 virtual bool SetArg(PyObject*, Parameter&, CallContext* = nullptr); \
363 virtual PyObject* FromMemory(void* address); \
364 virtual bool ToMemory(PyObject*, void*, PyObject* = nullptr); \
365 virtual bool HasState() { return true; } \
374#if __cplusplus > 201402L
378class STLStringMoveConverter :
public STLStringConverter {
380 using STLStringConverter::STLStringConverter;
388class FunctionPointerConverter :
public Converter {
390 FunctionPointerConverter(
const std::string& ret,
const std::string& sig) :
391 fRetType(ret), fSignature(sig) {}
395 virtual PyObject* FromMemory(
void* address);
397 virtual bool HasState() {
return true; }
400 std::string fRetType;
401 std::string fSignature;
405class StdFunctionConverter :
public FunctionPointerConverter {
407 StdFunctionConverter(Converter* cnv,
const std::string& ret,
const std::string& sig) :
408 FunctionPointerConverter(ret, sig), fConverter(cnv) {}
409 StdFunctionConverter(
const StdFunctionConverter&) =
delete;
410 StdFunctionConverter&
operator=(
const StdFunctionConverter&) =
delete;
411 virtual ~StdFunctionConverter() {
delete fConverter; }
415 virtual PyObject* FromMemory(
void* address);
419 Converter* fConverter;
424class SmartPtrConverter :
public Converter {
428 bool keepControl =
false,
430 : fSmartPtrType(smart), fUnderlyingType(underlying),
431 fKeepControl(keepControl), fIsRef(isRef) {}
435 virtual PyObject* FromMemory(
void* address);
437 virtual bool HasState() {
return true; }
440 virtual bool GetAddressSpecialCase(
PyObject*,
void*&) {
return false; }
450class InitializerListConverter :
public InstanceConverter {
452 InitializerListConverter(
Cppyy::TCppType_t klass, std::string
const& value_type);
453 InitializerListConverter(
const InitializerListConverter&) =
delete;
454 InitializerListConverter&
operator=(
const InitializerListConverter&) =
delete;
455 virtual ~InitializerListConverter();
459 virtual bool HasState() {
return true; }
465 void* fBuffer =
nullptr;
466 std::vector<Converter*> fConverters;
467 std::string fValueTypeName;
474class NotImplementedConverter :
public Converter {
#define CPPYY_DECLARE_ARRAY_CONVERTER(name)
#define CPPYY_DECLARE_STRING_CONVERTER(name, strtype)
#define CPPYY_DECLARE_BASIC_CONVERTER(name)
#define CPPYY_DECLARE_REFCONVERTER(name)
#define CPPYY_DECLARE_BASIC_CONVERTER2(name, base)
true
Register systematic variations for multiple existing columns using auto-generated tags.
RInterface & operator=(const RInterface &)=default
Copy-assignment operator for RInterface.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
InstancePtrConverter(Cppyy::TCppType_t klass, bool keepControl=false)
CPyCppyy::Parameter Parameter