43#ifndef LASS_GUARDIAN_OF_INCLUSION_UTIL_PYOBJECT_PLUS_H
44#define LASS_GUARDIAN_OF_INCLUSION_UTIL_PYOBJECT_PLUS_H
57#define PY_HEADER( t_parentClass ) \
59 typedef t_parentClass _lassPyParentType; \
60 static ::lass::python::impl::ClassDefinition _lassPyClassDef; \
61 ::lass::python::impl::ClassDefinition* _lassPyGetClassDef() const override { return &_lassPyClassDef; } \
75 PyObject* pyBuildSimpleObject(T& iV)
77 LockGIL LASS_UNUSED(lock);
78 return PyExportTraits<T>::build(iV);
84 PyObject* pyBuildSimpleObject(
const T& iV)
86 LockGIL LASS_UNUSED(lock);
87 return PyExportTraits<T>::build(iV);
92 template<
typename T,
typename Deleter>
93 PyObject* pyBuildSimpleObject(std::unique_ptr<T, Deleter>&& iV)
95 LockGIL LASS_UNUSED(lock);
96 return PyExportTraits< std::unique_ptr<T, Deleter> >::build(std::move(iV));
102 int pyGetSimpleObject(PyObject* iV, T& oV)
104 LockGIL LASS_UNUSED(lock);
105 return PyExportTraits<T>::get(iV,oV);
125 template <
typename EnumType,
typename IntegerType = std::underlying_type_t<EnumType>>
128 constexpr static const char* py_typing =
"int";
130 static PyObject* build(
const EnumType iv)
132 return pyBuildSimpleObject(
static_cast<IntegerType
>(iv));
134 static int get(PyObject* iv, EnumType& ov)
137 if (pyGetSimpleObject(iv, temp) != 0)
141 ov =
static_cast<EnumType
>(temp);
154 class LASS_PYTHON_DLL PyObjectPlus :
161 typedef void TCppClass;
164 virtual ~PyObjectPlus();
167 PyObjectPlus(
const PyObjectPlus& other);
168 PyObjectPlus& operator=(
const PyObjectPlus& other);
175 template <
typename T>
struct IsPyObject: meta::IsDerived<T, PyObject> {};
179 LASS_PYTHON_DLL
bool LASS_CALL checkSequenceSize(PyObject* iValue, Py_ssize_t iExpectedSize);
180 LASS_PYTHON_DLL
TPyObjPtr LASS_CALL checkedFastSequence(PyObject* obj);
181 LASS_PYTHON_DLL
TPyObjPtr LASS_CALL checkedFastSequence(PyObject* obj, Py_ssize_t expectedSize);
182 LASS_PYTHON_DLL
TPyObjPtr LASS_CALL checkedFastSequence(PyObject* obj, Py_ssize_t minimumSize, Py_ssize_t maximumSize);
183 LASS_PYTHON_DLL PyObject* LASS_CALL establishMagicalBackLinks(PyObject* result, PyObject* self);
static void _lassPyClassRegisterHook()
This function can be used to execute some code at injection time.
Definition of a Python class.
PyObjectPtr< PyObject >::Type TPyObjPtr
PyObjectPtr to a PyObject.
Library for Assembled Shared Sources.
meta function to detect if a type is a PyObject-derived type
Helper to specialise PyExportTraits for enumerations.