From 9a3f57dee669f242f4acd86ba402cf592f85ef49 Mon Sep 17 00:00:00 2001 From: florent <florent@laas.fr> Date: Tue, 19 Oct 2010 08:45:13 +0200 Subject: [PATCH] Bind method Entity::listEntities. * src/CMakeLists.txt, * src/dynamic-graph-py.cc, * src/factory-py.cc: new. --- src/CMakeLists.txt | 1 + src/dynamic-graph-py.cc | 7 +++++++ src/factory-py.cc | 44 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 src/factory-py.cc diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3aae9d9..cfea46d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -34,6 +34,7 @@ ADD_LIBRARY(${PYTHON_MODULE} dynamic-graph-py.cc signal-base-py.cc entity-py.cc + factory-py.cc ) # Remove prefix lib diff --git a/src/dynamic-graph-py.cc b/src/dynamic-graph-py.cc index 1e260e3..5cab7d6 100644 --- a/src/dynamic-graph-py.cc +++ b/src/dynamic-graph-py.cc @@ -30,6 +30,9 @@ namespace dynamicgraph { } + namespace factory { + PyObject* getEntityClassList(PyObject* self, PyObject* args); + } PyObject* error; static dynamicgraph::InterpreterHelper interpreter; @@ -114,6 +117,10 @@ static PyMethodDef dynamicGraphMethods[] = { {"entity_display_signals", dynamicgraph::python::entity::displaySignals, METH_VARARGS, "Display the list of signals of an entity in standard output"}, + {"factory_get_entity_class_list", + dynamicgraph::python::factory::getEntityClassList, + METH_VARARGS, + "return the list of entity classes"}, {NULL, NULL, 0, NULL} /* Sentinel */ }; diff --git a/src/factory-py.cc b/src/factory-py.cc new file mode 100644 index 0000000..a9bd7d9 --- /dev/null +++ b/src/factory-py.cc @@ -0,0 +1,44 @@ +/* + * Copyright 2010 (C) CNRS + * Author: Florent Lamiraux + */ + +#include <Python.h> +#include <iostream> +#include <dynamic-graph/factory.h> + +using dynamicgraph::Entity; +using dynamicgraph::ExceptionAbstract; + +namespace dynamicgraph { + namespace python { + + extern PyObject* error; + + namespace factory { + + /** + \brief Get name of entity + */ + PyObject* getEntityClassList(PyObject* self, PyObject* args) + { + if (!PyArg_ParseTuple(args, "")) + return NULL; + + std::vector <std::string> classNames; + dynamicgraph::g_factory.listEntities(classNames); + unsigned int classNumber = classNames.size(); + // Build a tuple object + PyObject* classTuple = PyTuple_New(classNumber); + + for (unsigned int iEntity = 0; iEntity < classNames.size(); iEntity++) { + PyObject* className = Py_BuildValue("s", classNames[iEntity].c_str()); + PyTuple_SetItem(classTuple, iEntity, className); + } + + return Py_BuildValue("O", classTuple); + } + + } // namespace factory + } // namespace python +} // namespace dynamicgraph -- GitLab