From e960a8a5c391663678e937f9a3904cd9526eb0ab Mon Sep 17 00:00:00 2001
From: Mansard <nmansard@laas.fr>
Date: Mon, 24 Jan 2011 11:30:40 +0100
Subject: [PATCH] Added the unplug python function as a member of the
 signal-base class.

---
 src/dynamic-graph-py.cc          |  3 +++
 src/dynamic_graph/signal_base.py |  6 ++++++
 src/signal-base-py.cc            | 19 +++++++++++++++++++
 3 files changed, 28 insertions(+)

diff --git a/src/dynamic-graph-py.cc b/src/dynamic-graph-py.cc
index 083f35f..3ba6c14 100644
--- a/src/dynamic-graph-py.cc
+++ b/src/dynamic-graph-py.cc
@@ -34,6 +34,7 @@ namespace dynamicgraph {
       extern PyObject* getValue(PyObject* self, PyObject* args);
       extern PyObject* setValue(PyObject* self, PyObject* args);
       extern PyObject* recompute(PyObject* self, PyObject* args);
+      extern PyObject* unplug(PyObject* self, PyObject* args);
     }
     namespace entity {
       extern PyObject* create(PyObject* self, PyObject* args);
@@ -155,6 +156,8 @@ static PyMethodDef dynamicGraphMethods[] = {
    METH_VARARGS, "Set the value of a signal"},
   {"signal_base_recompute", dynamicgraph::python::signalBase::recompute,
    METH_VARARGS, "Recompute the signal at given time"},
+  {"signal_base_unplug", dynamicgraph::python::signalBase::unplug,
+   METH_VARARGS, "Unplug the signal"},
   // 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 c483610..e1c57f6 100644
--- a/src/dynamic_graph/signal_base.py
+++ b/src/dynamic_graph/signal_base.py
@@ -211,9 +211,15 @@ class SignalBase (object) :
         Force signal to recompute the value at given time.
         """
         return wrap.signal_base_recompute(self.obj, time)
+    def unplug(self):
+        """
+        Unplug a PTR signal.
+        """
+        return wrap.signal_base_unplug(self.obj)
 
     def __str__(self):
         """
         Print signal in a string
         """
         return wrap.signal_base_display(self.obj)
+
diff --git a/src/signal-base-py.cc b/src/signal-base-py.cc
index e0d6d8a..7936987 100644
--- a/src/signal-base-py.cc
+++ b/src/signal-base-py.cc
@@ -202,6 +202,25 @@ namespace dynamicgraph {
 	}
 	return Py_BuildValue("");
       }
+
+      PyObject* unplug(PyObject* /*self*/, 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;
+	try {
+	  signal->unplug();
+	} catch (const std::exception& exc) {
+	  PyErr_SetString(error, exc.what());
+	}
+	return Py_BuildValue("");
+      }
     }
   }
 }
-- 
GitLab