#ifndef __lib_python_connections_h #define __lib_python_connections_h #include /* avoid warnigs :) */ #include #undef _POSIX_C_SOURCE #define _POSIX_C_SOURCE 200112L #include #include class PSignal { 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 class PSignal0: public PSignal, public Signal0 { public: R operator()() { PyObject *pArgs = PyTuple_New(0); callPython(pArgs); Py_DECREF(pArgs); return Signal0::operator()(); } }; template 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); Py_DECREF(pArgs); return Signal1::operator()(a0); } }; template 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); Py_DECREF(pArgs); return Signal2::operator()(a0, a1); } }; #endif