From b1859161de54b8e3e38f489d40fc382c47968fbb Mon Sep 17 00:00:00 2001 From: Florent Lamiraux <florent@laas.fr> Date: Thu, 11 Jul 2013 14:28:03 +0200 Subject: [PATCH] Enhance SignalBase API - add isPlugged and getPlugged methods, - add property getter name. --- src/dynamic-graph-py.cc | 6 ++++ src/dynamic_graph/signal_base.py | 17 +++++++++++ src/signal-base-py.cc | 51 ++++++++++++++++++++++++++++++-- 3 files changed, 71 insertions(+), 3 deletions(-) diff --git a/src/dynamic-graph-py.cc b/src/dynamic-graph-py.cc index acaaf29..2b0ac14 100644 --- a/src/dynamic-graph-py.cc +++ b/src/dynamic-graph-py.cc @@ -40,6 +40,8 @@ namespace dynamicgraph { extern PyObject* setValue(PyObject* self, PyObject* args); extern PyObject* recompute(PyObject* self, PyObject* args); extern PyObject* unplug(PyObject* self, PyObject* args); + extern PyObject* isPlugged(PyObject* self, PyObject* args); + extern PyObject* getPlugged(PyObject* self, PyObject* args); } namespace entity { extern PyObject* create(PyObject* self, PyObject* args); @@ -166,6 +168,10 @@ static PyMethodDef dynamicGraphMethods[] = { METH_VARARGS, "Recompute the signal at given time"}, {"signal_base_unplug", dynamicgraph::python::signalBase::unplug, METH_VARARGS, "Unplug the signal"}, + {"signal_base_isPlugged", dynamicgraph::python::signalBase::isPlugged, + METH_VARARGS, "Whether the signal is plugged"}, + {"signal_base_getPlugged", dynamicgraph::python::signalBase::getPlugged, + METH_VARARGS, "To which signal the signal is plugged"}, // Entity {"create_entity", dynamicgraph::python::entity::create, METH_VARARGS, "create an Entity C++ object"}, diff --git a/src/dynamic_graph/signal_base.py b/src/dynamic_graph/signal_base.py index a191001..c0dbfa2 100644 --- a/src/dynamic_graph/signal_base.py +++ b/src/dynamic_graph/signal_base.py @@ -225,6 +225,13 @@ class SignalBase (object) : """ return wrap.signal_base_get_name(self.obj) + @property + def name (self) : + """ + Get name of signal + """ + return wrap.signal_base_get_name(self.obj) + def getClassName(self): """ Get class name of signal @@ -241,6 +248,16 @@ class SignalBase (object) : Unplug a PTR signal. """ return wrap.signal_base_unplug(self.obj) + def isPlugged(self): + """ + Return whether a signal is plugged. + """ + return wrap.signal_base_isPlugged(self.obj) + def getPlugged(self): + """ + Return the plugged signal. + """ + return SignalBase (obj = wrap.signal_base_getPlugged(self.obj)) def __str__(self): """ diff --git a/src/signal-base-py.cc b/src/signal-base-py.cc index 2a4aaf2..925dc96 100644 --- a/src/signal-base-py.cc +++ b/src/signal-base-py.cc @@ -319,6 +319,51 @@ namespace dynamicgraph { } CATCH_ALL_EXCEPTIONS (); return Py_BuildValue(""); } - } - } -} + + PyObject* isPlugged (PyObject*, PyObject* args) + { + void * pointer = NULL; + PyObject* object = NULL; + if (!PyArg_ParseTuple(args,"O", &object)) + return NULL; + if (!PyCObject_Check(object)) + return NULL; + + pointer = PyCObject_AsVoidPtr(object); + SignalBase<int>* signal = (SignalBase<int>*)pointer; + bool plugged = false; + try { + plugged = signal->isPluged(); + } CATCH_ALL_EXCEPTIONS (); + if (plugged) return PyBool_FromLong(1); else return PyBool_FromLong(0); + + } + + PyObject* getPlugged (PyObject*, PyObject* args) + { + void * pointer = NULL; + PyObject* object = NULL; + if (!PyArg_ParseTuple(args,"O", &object)) + return NULL; + if (!PyCObject_Check(object)) + return NULL; + + pointer = PyCObject_AsVoidPtr(object); + SignalBase<int>* signal = (SignalBase<int>*)pointer; + SignalBase<int>* otherSignal = 0; + try { + bool plugged = signal->isPluged (); + otherSignal = signal->getPluged(); + if (!plugged || otherSignal == 0) { + std::string msg = std::string ("Signal ") + signal->getName() + + std::string (" is not plugged."); + throw std::runtime_error (msg); + } + } CATCH_ALL_EXCEPTIONS (); + // Return the pointer to the signal without destructor since the signal + // is not owned by the calling object. + return PyCObject_FromVoidPtr((void*)otherSignal, NULL); + } + } // namespace signalBase + } // namespace python +} // namespace dynamicgraph -- GitLab