From 8cae8bee2688c5e6441fb4355a70df81f5c0e1d6 Mon Sep 17 00:00:00 2001 From: florent <florent@laas.fr> Date: Tue, 26 Oct 2010 09:16:05 +0200 Subject: [PATCH] Bind method Entity::getNewStyleCommandMap() * src/dynamic-graph-py.cc, * src/entity-py.cc. --- src/dynamic-graph-py.cc | 5 +++++ src/entity-py.cc | 30 ++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/dynamic-graph-py.cc b/src/dynamic-graph-py.cc index f2a4cac..a57eb8e 100644 --- a/src/dynamic-graph-py.cc +++ b/src/dynamic-graph-py.cc @@ -28,6 +28,7 @@ namespace dynamicgraph { extern PyObject* getSignal(PyObject* self, PyObject* args); extern PyObject* displaySignals(PyObject* self, PyObject* args); extern PyObject* executeCommand(PyObject* self, PyObject* args); + extern PyObject* listCommands(PyObject* self, PyObject* args); } namespace factory { @@ -121,6 +122,10 @@ static PyMethodDef dynamicGraphMethods[] = { dynamicgraph::python::entity::executeCommand, METH_VARARGS, "execute a command"}, + {"entity_list_commands", + dynamicgraph::python::entity::listCommands, + METH_VARARGS, + "list the commands of an entity"}, {"factory_get_entity_class_list", dynamicgraph::python::factory::getEntityClassList, METH_VARARGS, diff --git a/src/entity-py.cc b/src/entity-py.cc index 3b93e6a..29df284 100644 --- a/src/entity-py.cc +++ b/src/entity-py.cc @@ -277,6 +277,36 @@ namespace dynamicgraph { } return NULL; } + + PyObject* listCommands(PyObject* self, PyObject* args) + { + PyObject* object = NULL; + if (!PyArg_ParseTuple(args, "O", &object)) { + return NULL; + } + + // Retrieve the entity instance + if (!PyCObject_Check(object)) { + PyErr_SetString(error, "first argument is not an object"); + return NULL; + } + void* pointer = PyCObject_AsVoidPtr(object); + Entity* entity = (Entity*)pointer; + typedef std::map<const std::string, command::Command*> CommandMap; + CommandMap map = entity->getNewStyleCommandMap(); + unsigned int nbCommands = map.size(); + // Create a tuple of same size as the command map + PyObject* result = PyTuple_New(nbCommands); + unsigned int count = 0; + for (CommandMap::iterator it=map.begin(); + it != map.end(); it++) { + std::string commandName = it->first; + PyObject* pyName = Py_BuildValue("s", commandName.c_str()); + PyTuple_SET_ITEM(result, count, pyName); + count++; + } + return result; + } } } } -- GitLab