X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2Fconnections.h;h=374749abb9505200a3ff7a37745536ac27987c72;hp=d24bb42f9660506d1c19453dc1538600a3e88543;hb=a1c8dbaceeb6df080f092e6caa6747ae19799a3c;hpb=6dcb75c26bbfec04b381bb99d75404f9fe50635d diff --git a/lib/python/connections.h b/lib/python/connections.h index d24bb42..374749a 100644 --- a/lib/python/connections.h +++ b/lib/python/connections.h @@ -3,20 +3,19 @@ #include - /* avoid warnigs :) */ -#include -#undef _POSIX_C_SOURCE -#define _POSIX_C_SOURCE 200112L - #include class PSignal { +protected: ePyObject m_list; public: PSignal(); ~PSignal(); void callPython(SWIG_PYOBJECT(ePyObject) tuple); +#ifndef SWIG + PyObject *getSteal(bool clear=false); +#endif PyObject *get(); }; @@ -36,9 +35,12 @@ class PSignal0: public PSignal, public Signal0 public: R operator()() { - PyObject *pArgs = PyTuple_New(0); - callPython(pArgs); - Org_Py_DECREF(pArgs); + if (m_list) + { + PyObject *pArgs = PyTuple_New(0); + callPython(pArgs); + Org_Py_DECREF(pArgs); + } return Signal0::operator()(); } }; @@ -49,10 +51,13 @@ class PSignal1: public PSignal, public Signal1 public: R operator()(V0 a0) { - PyObject *pArgs = PyTuple_New(1); - PyTuple_SET_ITEM(pArgs, 0, PyFrom(a0)); - callPython(pArgs); - Org_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::operator()(a0); } }; @@ -63,13 +68,35 @@ class PSignal2: public PSignal, public Signal2 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); - Org_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::operator()(a0, a1); } }; +template +class PSignal3: public PSignal, public Signal3 +{ +public: + R operator()(V0 a0, V1 a1, V2 a2) + { + if (m_list) + { + PyObject *pArgs = PyTuple_New(3); + PyTuple_SET_ITEM(pArgs, 0, PyFrom(a0)); + PyTuple_SET_ITEM(pArgs, 1, PyFrom(a1)); + PyTuple_SET_ITEM(pArgs, 2, PyFrom(a2)); + callPython(pArgs); + Org_Py_DECREF(pArgs); + } + return Signal3::operator()(a0, a1, a2); + } +}; + #endif