get physical address from framebuffer device
[enigma2.git] / lib / python / connections.h
index 9da6a002660ab1c72eeb356d9e02ce59ed7f5147..ad76198a7ca1d35e29826a2f98a434288fb333ff 100644 (file)
@@ -7,36 +7,21 @@
 #include <features.h>
 #undef _POSIX_C_SOURCE
 #define _POSIX_C_SOURCE 200112L
+
 #include <lib/python/python.h>
 
 class PSignal
 {
+protected:
+       ePyObject m_list;
 public:
-       PyObject *m_list;
-public:
-       PSignal()
-       {
-               m_list = PyList_New(0);
-               Py_INCREF(m_list);
-       }
-       ~PSignal()
-       {
-               Py_DECREF(m_list);
-       }
-       
-       void callPython(PyObject *tuple)
-       {
-               int size = PyList_Size(m_list);
-               int i;
-               for (i=0; i<size; ++i)
-               {
-                       PyObject *b = PyList_GET_ITEM(m_list, i);
-                       ePython::call(b, tuple);
-               }
-       }
-       
-       
-       PyObject *get() { Py_INCREF(m_list); return m_list; }
+       PSignal();
+       ~PSignal();
+       void callPython(SWIG_PYOBJECT(ePyObject) tuple);
+#ifndef SWIG
+       PyObject *getSteal(bool clear=false);
+#endif
+       PyObject *get();
 };
 
 inline PyObject *PyFrom(int v)
@@ -55,9 +40,12 @@ class PSignal0: public PSignal, public Signal0<R>
 public:
        R operator()()
        {
-               PyObject *pArgs = PyTuple_New(0);
-               callPython(pArgs);
-               Py_DECREF(pArgs);
+               if (m_list)
+               {
+                       PyObject *pArgs = PyTuple_New(0);
+                       callPython(pArgs);
+                       Org_Py_DECREF(pArgs);
+               }
                return Signal0<R>::operator()();
        }
 };
@@ -68,10 +56,13 @@ class PSignal1: public PSignal, public Signal1<R,V0>
 public:
        R operator()(V0 a0)
        {
-               PyObject *pArgs = PyTuple_New(1);
-               PyTuple_SET_ITEM(pArgs, 0, PyFrom(a0));
-               callPython(pArgs);
-               Py_DECREF(pArgs);
+               if (m_list)
+               {
+                       PyObject *pArgs = PyTuple_New(1);
+                       PyTuple_SET_ITEM(pArgs, 0, PyFrom(a0));
+                       callPython(pArgs);
+                       Org_Py_DECREF(pArgs);
+               }
                return Signal1<R,V0>::operator()(a0);
        }
 };
@@ -82,11 +73,14 @@ class PSignal2: public PSignal, public Signal2<R,V0,V1>
 public:
        R operator()(V0 a0, V1 a1)
        {
-               PyObject *pArgs = PyTuple_New(2);
-               PyTuple_SET_ITEM(pArgs, 0, PyFrom(a0));
-               PyTuple_SET_ITEM(pArgs, 1, PyFrom(a1));
-               callPython(pArgs);
-               Py_DECREF(pArgs);
+               if (m_list)
+               {
+                       PyObject *pArgs = PyTuple_New(2);
+                       PyTuple_SET_ITEM(pArgs, 0, PyFrom(a0));
+                       PyTuple_SET_ITEM(pArgs, 1, PyFrom(a1));
+                       callPython(pArgs);
+                       Org_Py_DECREF(pArgs);
+               }
                return Signal2<R,V0,V1>::operator()(a0, a1);
        }
 };