From 25d016aa1c2de063bd13c322185ce90afa80d956 Mon Sep 17 00:00:00 2001 From: Mansard <nmansard@laas.fr> Date: Tue, 25 Jan 2011 17:30:36 +0100 Subject: [PATCH] Added the display method, py-bound in __str__. --- src/dynamic-graph-py.cc | 3 +++ src/dynamic_graph/entity.py | 3 +++ src/entity-py.cc | 21 +++++++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/src/dynamic-graph-py.cc b/src/dynamic-graph-py.cc index 3ba6c14..bf70bba 100644 --- a/src/dynamic-graph-py.cc +++ b/src/dynamic-graph-py.cc @@ -38,6 +38,7 @@ namespace dynamicgraph { } namespace entity { extern PyObject* create(PyObject* self, PyObject* args); + extern PyObject* display(PyObject* self, PyObject* args); extern PyObject* getName(PyObject* self, PyObject* args); extern PyObject* getSignal(PyObject* self, PyObject* args); extern PyObject* listSignals(PyObject* self, PyObject* args); @@ -161,6 +162,8 @@ static PyMethodDef dynamicGraphMethods[] = { // Entity {"create_entity", dynamicgraph::python::entity::create, METH_VARARGS, "create an Entity C++ object"}, + {"display_entity", dynamicgraph::python::entity::display, METH_VARARGS, + "print an Entity C++ object"}, {"entity_get_name", dynamicgraph::python::entity::getName, METH_VARARGS, "get the name of an Entity"}, {"entity_get_signal", dynamicgraph::python::entity::getSignal, METH_VARARGS, diff --git a/src/dynamic_graph/entity.py b/src/dynamic_graph/entity.py index baebb3e..17ae642 100644 --- a/src/dynamic_graph/entity.py +++ b/src/dynamic_graph/entity.py @@ -72,6 +72,9 @@ class Entity (object) : def name(self) : return wrap.entity_get_name(self.obj) + def __str__(self) : + return wrap.display_entity(self.obj) + def signal (self, name) : """ Get a signal of the entity from signal name diff --git a/src/entity-py.cc b/src/entity-py.cc index af85ed1..a0895a3 100644 --- a/src/entity-py.cc +++ b/src/entity-py.cc @@ -505,6 +505,27 @@ namespace dynamicgraph { std::string docstring = command->getDocstring(); return Py_BuildValue("s", docstring.c_str()); } + + PyObject* display(PyObject* /*self*/, PyObject* args) + { + /* Retrieve the entity instance. */ + PyObject* object = NULL; + if (!PyArg_ParseTuple(args, "O", &object) + || (!PyCObject_Check(object)) ) + { + PyErr_SetString(error, "first argument is not an object"); + return NULL; + } + void* pointer = PyCObject_AsVoidPtr(object); + Entity* entity = (Entity*)pointer; + + /* Run the display function. */ + std::ostringstream oss; + entity->display(oss); + + /* Return the resulting string. */ + return Py_BuildValue("s", oss.str().c_str()); + } } } } -- GitLab