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