From 5bdcf268b3fe57526f35e7097c79f441bae7a5d3 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 24 Jan 2005 18:16:22 +0000 Subject: [PATCH] add python connections --- lib/python/connections.cpp | 9 ++++ lib/python/connections.h | 90 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 lib/python/connections.cpp create mode 100644 lib/python/connections.h diff --git a/lib/python/connections.cpp b/lib/python/connections.cpp new file mode 100644 index 00000000..c24c9399 --- /dev/null +++ b/lib/python/connections.cpp @@ -0,0 +1,9 @@ +#include + +PSignal1 testsignal; + +void connect(Slot1 &slot, PyObject *fnc) +{ + printf("CONNECT !\n"); +} + 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 + + /* 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_SetItem(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_SetItem(pArgs, 0, PyFrom(a0)); + PyTuple_SetItem(pArgs, 1, PyFrom(a1)); + callPython(pArgs); + Py_DECREF(pArgs); + return Signal2::operator()(a0, a1); + } +}; + +#endif -- 2.30.2