30#if defined(__GNUC__) && (__GNUC__ >= 5 || (__GNUC__ >= 4 && ((__GNUC_MINOR__ == 2 && __GNUC_PATCHLEVEL__ >= 1) || (__GNUC_MINOR__ >= 3)))) && !__INTEL_COMPILER
31#pragma GCC diagnostic ignored "-Wstrict-aliasing"
39#if PY_VERSION_HEX < 0x03090000
43 ob->ob_refcnt = (PY_UINT32_T)refcnt;
45 ob->ob_refcnt = refcnt;
50struct InitCPyCppyy_NoneType_t {
51 InitCPyCppyy_NoneType_t() {
66 CPyCppyy_NoneType.tp_richcompare = (richcmpfunc)&InitCPyCppyy_NoneType_t::RichCompare;
67#if PY_VERSION_HEX < 0x03000000
78 static void DeAlloc(
PyObject* pyobj) {
Py_TYPE(pyobj)->tp_free(pyobj); }
79 static int PtrHash(
PyObject* pyobj) {
return (
int)ptrdiff_t(pyobj); }
82 return PyObject_RichCompare(other, Py_None, opid);
86#if PY_VERSION_HEX < 0x03000000
87 return PyObject_Compare(other, Py_None);
90 return !PyObject_RichCompareBool(other, Py_None, Py_EQ);
106 static InitCPyCppyy_NoneType_t initCPyCppyy_NoneType;
131 CppToPyMap_t::iterator ppo = cppobjs->find(cppobj);
133 if (ppo != cppobjs->end()) {
153 std::cerr <<
"in CPyCppyy::MemoryRegulater, unexpected object of type: "
154 <<
Py_TYPE(pyobj)->tp_name << std::endl;
164 PyObject_ClearWeakRefs((
PyObject*)pyobj);
165 Py_SET_REFCNT((
PyObject*)pyobj, refcnt);
190 if (!(pyobj && cppobj))
195 if (!res.second)
return res.first;
204 const auto& res = cppobjs->insert(std::make_pair(cppobj, (
PyObject*)pyobj));
207 (*cppobjs)[cppobj] = (
PyObject*)pyobj;
218 if (!(pyobj && pyclass))
227 if (!res.second)
return res.first;
235 if (cppobjs->erase(cppobj)) {
247 if (!(cppobj && pyclass))
254 CppToPyMap_t::iterator ppo = cppobjs->find(cppobj);
255 if (ppo != cppobjs->end()) {
256 Py_INCREF(ppo->second);
static Py_ssize_t AlwaysNullLength(PyObject *)
static PyMappingMethods CPyCppyy_NoneType_mapping
static PyTypeObject CPyCppyy_NoneType
Int_t Compare(const void *item1, const void *item2)
Cppyy::TCppType_t ObjectIsA(bool check_smart=true) const
static MemHook_t unregisterHook
static bool RecursiveRemove(Cppyy::TCppObject_t cppobj, Cppyy::TCppType_t klass)
static PyObject * RetrievePyObject(Cppyy::TCppObject_t cppobj, PyObject *pyclass)
static bool RegisterPyObject(CPPInstance *pyobj, void *cppobj)
static MemHook_t registerHook
static void SetUnregisterHook(MemHook_t h)
static void SetRegisterHook(MemHook_t h)
static bool UnregisterPyObject(CPPInstance *pyobj, PyObject *pyclass)
std::map< Cppyy::TCppObject_t, PyObject * > CppToPyMap_t
Type object to hold class reference (this is only semantically a presentation of CPPScope instances,...
PyObject * GetScopeProxy(Cppyy::TCppScope_t)
bool CPPScope_Check(T *object)
void op_dealloc_nofree(CPPInstance *)
std::function< std::pair< bool, bool >(Cppyy::TCppObject_t, Cppyy::TCppType_t)> MemHook_t