X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2Fpython.h;h=18fdac78fe2def9040669138cc60020cce9ca3c2;hp=f56d49bbc489c311c1ab1239c01d11a2ec9d730a;hb=fe72b7929c2f0b5dbac3040b303d195923735fc8;hpb=da9872eac33f4f8a085261c3cbdcbf4c8d664f65 diff --git a/lib/python/python.h b/lib/python/python.h index f56d49b..18fdac7 100644 --- a/lib/python/python.h +++ b/lib/python/python.h @@ -24,6 +24,7 @@ public: #ifdef PYTHON_REFCOUNT_DEBUG inline ePyObject(PyObject *ob, const char *file, int line); #endif + inline ePyObject(PyVarObject *ob); inline ePyObject(PyDictObject *ob); inline ePyObject(PyTupleObject *ob); inline ePyObject(PyListObject *ob); @@ -32,11 +33,13 @@ public: operator bool() { return !!m_ob; } ePyObject &operator=(const ePyObject &); ePyObject &operator=(PyObject *); + ePyObject &operator=(PyVarObject *ob) { return operator=((PyObject*)ob); } ePyObject &operator=(PyDictObject *ob) { return operator=((PyObject*)ob); } ePyObject &operator=(PyTupleObject *ob) { return operator=((PyObject*)ob); } ePyObject &operator=(PyListObject *ob) { return operator=((PyObject*)ob); } ePyObject &operator=(PyStringObject *ob) { return operator=((PyObject*)ob); } operator PyObject*(); + operator PyVarObject*() { return (PyVarObject*)operator PyVarObject*(); } operator PyTupleObject*() { return (PyTupleObject*)operator PyObject*(); } operator PyListObject*() { return (PyListObject*)operator PyObject*(); } operator PyStringObject*() { return (PyStringObject*)operator PyObject*(); } @@ -84,6 +87,14 @@ inline ePyObject::ePyObject(PyObject *ob, const char* file, int line) } #endif +inline ePyObject::ePyObject(PyVarObject *ob) + :m_ob((PyObject*)ob) +#ifdef PYTHON_REFCOUNT_DEBUG + ,m_file(0), m_line(0), m_from(0), m_to(0), m_erased(false) +#endif +{ +} + inline ePyObject::ePyObject(PyDictObject *ob) :m_ob((PyObject*)ob) #ifdef PYTHON_REFCOUNT_DEBUG @@ -144,6 +155,41 @@ inline void ePyObject::decref() Py_DECREF(m_ob); } +class ePyObjectWrapper +{ + ePyObject m_obj; +public: + ePyObjectWrapper(const ePyObjectWrapper &wrapper) + :m_obj(wrapper.m_obj) + { + Py_INCREF(m_obj); + } + ePyObjectWrapper(const ePyObject &obj) + :m_obj(obj) + { + Py_INCREF(m_obj); + } + ~ePyObjectWrapper() + { + Py_DECREF(m_obj); + } + ePyObjectWrapper &operator=(const ePyObjectWrapper &wrapper) + { + Py_DECREF(m_obj); + m_obj = wrapper.m_obj; + Py_INCREF(m_obj); + return *this; + } + operator PyObject*() + { + return m_obj; + } + operator ePyObject() + { + return m_obj; + } +}; + #endif // ! PYTHON_REFCOUNT_DEBUG #endif // !SWIG && !SKIP_PART1 @@ -379,5 +425,4 @@ private: #endif // SWIG #endif // SKIP_PART2 - #endif // __lib_python_python_class_h