diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2005-01-24 18:16:22 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2005-01-24 18:16:22 +0000 |
| commit | 5bdcf268b3fe57526f35e7097c79f441bae7a5d3 (patch) | |
| tree | e817eaf6f3f97289303cdfd977d2717799c5a478 /lib/python/connections.h | |
| parent | 4c9d04cb33fb06dfa075b431e36e7ea938a5f963 (diff) | |
| download | enigma2-5bdcf268b3fe57526f35e7097c79f441bae7a5d3.tar.gz enigma2-5bdcf268b3fe57526f35e7097c79f441bae7a5d3.zip | |
add python connections
Diffstat (limited to 'lib/python/connections.h')
| -rw-r--r-- | lib/python/connections.h | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/lib/python/connections.h b/lib/python/connections.h new file mode 100644 index 00000000..9b4abdd2 --- /dev/null +++ b/lib/python/connections.h @@ -0,0 +1,90 @@ +#ifndef __lib_python_connections_h +#define __lib_python_connections_h + +#include <libsig_comp.h> + + /* avoid warnigs :) */ +#include <features.h> +#undef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 200112L +#include <Python.h> +#include <lib/python/python.h> + +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<size; ++i) + { + PyObject *b = PyList_GetItem(m_list, i); + ePython::call(b, tuple); + } + } + + + PyObject *get() { Py_INCREF(m_list); return m_list; } +}; + +inline PyObject *PyFrom(int v) +{ + return PyInt_FromLong(v); +} + +template <class R> +class PSignal0: public PSignal, public Signal0<R> +{ +public: + R operator()() + { + PyObject *pArgs = PyTuple_New(0); + callPython(pArgs); + Py_DECREF(pArgs); + return Signal0<R>::operator()(); + } +}; + +template <class R, class V0> +class PSignal1: public PSignal, public Signal1<R,V0> +{ +public: + R operator()(V0 a0) + { + PyObject *pArgs = PyTuple_New(1); + PyTuple_SetItem(pArgs, 0, PyFrom(a0)); + callPython(pArgs); + Py_DECREF(pArgs); + return Signal1<R,V0>::operator()(a0); + } +}; + +template <class R, class V0, class V1> +class PSignal2: public PSignal, public Signal2<R,V0,V1> +{ +public: + R operator()(V0 a0, V1 a1) + { + PyObject *pArgs = PyTuple_New(2); + PyTuple_SetItem(pArgs, 0, PyFrom(a0)); + PyTuple_SetItem(pArgs, 1, PyFrom(a1)); + callPython(pArgs); + Py_DECREF(pArgs); + return Signal2<R,V0,V1>::operator()(a0, a1); + } +}; + +#endif |
