enable m2ts file extension
[enigma2.git] / lib / python / python.h
index d0fe92a..18fdac7 100644 (file)
@@ -4,9 +4,9 @@
        #define __lib_python_python_class_h
 #endif
 
+#include <Python.h>
 #include <string>
 #include <lib/base/object.h>
-#include <Python.h>
 
 #if !defined(SKIP_PART1) && !defined(SWIG)
 class ePyObject
@@ -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,23 +155,47 @@ 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
 
 #ifndef SKIP_PART2
-
-class TestObj
-{
-DECLARE_REF(TestObj);
-public:
-       TestObj();
-       ~TestObj();
-};
-TEMPLATE_TYPEDEF(ePtr<TestObj>, TestObjPtr);
-
 #ifndef SWIG
-extern PyObject *New_TestObj();
 #ifdef PYTHON_REFCOUNT_DEBUG
 inline void Impl_Py_DECREF(const char* file, int line, const ePyObject &obj)
 {
@@ -233,11 +268,6 @@ inline ePyObject Impl_PyLong_FromLongLong(const char* file, int line, long long
        return ePyObject(PyLong_FromLongLong(val), file, line);
 }
 
-inline ePyObject Impl_New_TestObj(const char* file, int line)
-{
-       return ePyObject(New_TestObj(), file, line);
-}
-
 inline ePyObject Impl_PyList_GET_ITEM(const char *file, int line, ePyObject list, unsigned int pos)
 {
        return ePyObject(PyList_GET_ITEM(list, pos), file, line);
@@ -319,11 +349,6 @@ inline ePyObject Impl_PyLong_FromLongLong(long long val)
        return PyLong_FromLongLong(val);
 }
 
-inline ePyObject Impl_New_TestObj()
-{
-       return New_TestObj();
-}
-
 inline ePyObject Impl_PyList_GET_ITEM(ePyObject list, unsigned int pos)
 {
        return PyList_GET_ITEM(list, pos);
@@ -335,10 +360,16 @@ inline ePyObject Impl_PyTuple_GET_ITEM(ePyObject list, unsigned int pos)
 }
 #endif
 
+inline void Impl_INCREF(PyObject *ob)
+{
+       Py_INCREF(ob);
+}
+
 inline void Impl_DECREF(PyObject *ob)
 {
        Py_DECREF(ob);
 }
+#define Org_Py_INCREF(obj) Impl_INCREF(obj)
 #define Org_Py_DECREF(obj) Impl_DECREF(obj)
 #undef Py_DECREF
 #undef Py_XDECREF
@@ -360,7 +391,6 @@ inline void Impl_DECREF(PyObject *ob)
 #define PyLong_FromLong(val) Impl_PyLong_FromLong(__FILE__, __LINE__, val)
 #define PyLong_FromUnsignedLong(val) Impl_PyLong_FromUnsignedLong(__FILE__, __LINE__, val)
 #define PyLong_FromLongLong(val) Impl_PyLong_FromLongLong(__FILE__, __LINE__, val)
-#define NEW_TestObj(...) Impl_New_TestObj(__FILE__, __LINE__)
 #define PyList_GET_ITEM(list, pos) Impl_PyList_GET_ITEM(__FILE__, __LINE__, list, pos)
 #define PyTuple_GET_ITEM(list, pos) Impl_PyTuple_GET_ITEM(__FILE__, __LINE__, list, pos)
 #else
@@ -377,7 +407,6 @@ inline void Impl_DECREF(PyObject *ob)
 #define PyLong_FromLong(val) Impl_PyLong_FromLong(val)
 #define PyLong_FromUnsignedLong(val) Impl_PyLong_FromUnsignedLong(val)
 #define PyLong_FromLongLong(val) Impl_PyLong_FromLongLong(val)
-#define NEW_TestObj(...) Impl_New_TestObj()
 #define PyList_GET_ITEM(list, pos) Impl_PyList_GET_ITEM(list, pos)
 #define PyTuple_GET_ITEM(list, pos) Impl_PyTuple_GET_ITEM(list, pos)
 #endif
@@ -387,6 +416,7 @@ class ePython
 public:
        ePython();
        ~ePython();
+       int execFile(const char *file);
        int execute(const std::string &pythonfile, const std::string &funcname);
        static int call(ePyObject pFunc, ePyObject args);
        static ePyObject resolve(const std::string &pythonfile, const std::string &funcname);
@@ -395,5 +425,4 @@ private:
 
 #endif // SWIG
 #endif // SKIP_PART2
-
 #endif // __lib_python_python_class_h