add PyObject refcount debugging code
[vuplus_dvbapp] / lib / python / python.h
index bde1814..27d2a9b 100644 (file)
@@ -2,6 +2,59 @@
 #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;
+public:
+       ePyObject(void *ptr);
+       ePyObject(ePyObject &p);
+       ePyObject();
+       ePyObject &operator=(ePyObject &p);
+       ePyObject &operator=(void *p);
+       ~ePyObject();
+       void *get() { return m_object; }
+}; */
 
 class ePython
 {
@@ -9,8 +62,10 @@ public:
        ePython();
        ~ePython();
        int execute(const std::string &pythonfile, const std::string &funcname);
+       static int call(PyObject *pFunc, PyObject *args);
+       static PyObject *resolve(const std::string &pythonfile, const std::string &funcname);
 private:
-       
 };
+#endif // SWIG
 
 #endif