add PyObject refcount debugging code
[vuplus_dvbapp] / lib / python / python.h
index e9a2b8d..27d2a9b 100644 (file)
@@ -2,7 +2,47 @@
 #define __lib_python_python_h
 
 #include <string>
+#include <lib/base/object.h>
+#include <Python.h>
 
+// useable for debugging python refcounting
+#undef Py_DECREF
+#undef Py_XDECREF
+#undef Py_INCREF
+#undef Py_XINCREF
+#define Py_XDECREF(obj) Impl_Py_XDECREF(__FILE__, __LINE__, obj)
+#define Py_DECREF(obj) Impl_Py_DECREF(__FILE__, __LINE__, obj)
+#define Py_XINCREF(obj) Impl_Py_XINCREF(__FILE__, __LINE__, obj)
+#define Py_INCREF(obj) Impl_Py_INCREF(__FILE__, __LINE__, obj)
+
+void Impl_Py_DECREF(const char* file, int line, PyObject *obj);
+
+inline void Impl_Py_XDECREF(const char* file, int line, PyObject *obj)
+{
+       if (obj)
+               Impl_Py_DECREF(file, line, obj);
+}
+
+void Impl_Py_INCREF(const char* file, int line, PyObject *obj);
+
+inline void Impl_Py_XINCREF(const char* file, int line, PyObject *obj)
+{
+       if (obj)
+               Impl_Py_INCREF(file, line, obj);
+}
+
+extern PyObject *New_TestObj();
+
+class TestObj
+{
+DECLARE_REF(TestObj);
+public:
+       TestObj();
+       ~TestObj();
+};
+TEMPLATE_TYPEDEF(ePtr<TestObj>, TestObjPtr);
+
+#ifndef SWIG
 /* class ePyObject
 {
        void *m_object;
@@ -16,8 +56,6 @@ public:
        void *get() { return m_object; }
 }; */
 
-typedef struct _object PyObject;
-
 class ePython
 {
 public:
@@ -28,5 +66,6 @@ public:
        static PyObject *resolve(const std::string &pythonfile, const std::string &funcname);
 private:
 };
+#endif // SWIG
 
 #endif