From 1690b92595aada9a2b2968efc48331b9638b6b14 Mon Sep 17 00:00:00 2001 From: Mansard <nmansard@laas.fr> Date: Thu, 27 Jan 2011 18:28:48 +0100 Subject: [PATCH] Added some specific convertion for vector, matrix and double signal, from C to Python (to avoid unnecessary convertion through strings. --- src/signal-base-py.cc | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/signal-base-py.cc b/src/signal-base-py.cc index 7936987..dc5d5e1 100644 --- a/src/signal-base-py.cc +++ b/src/signal-base-py.cc @@ -18,7 +18,10 @@ #include <sstream> #include <dynamic-graph/signal-base.h> +#include <dynamic-graph/signal.h> #include <dynamic-graph/signal-caster.h> +#include <dynamic-graph/linear-algebra.h> +#include <../src/convert-dg-to-py.hh> using dynamicgraph::SignalBase; @@ -26,6 +29,7 @@ namespace dynamicgraph { namespace python { extern PyObject* error; + using namespace convert; namespace signalBase { @@ -107,6 +111,29 @@ namespace dynamicgraph { pointer = PyCObject_AsVoidPtr(object); SignalBase<int>* signal = (SignalBase<int>*)pointer; + /* Temptative for specific signal type. */ + Signal<dynamicgraph::Vector,int> * sigvec + = dynamic_cast< Signal<dynamicgraph::Vector,int>* >( signal ); + if( NULL!= sigvec ) + { + return vectorToPython( sigvec->accessCopy() ); + } + + Signal<dynamicgraph::Matrix,int> * sigmat + = dynamic_cast< Signal<dynamicgraph::Matrix,int>* >( signal ); + if( NULL!= sigmat ) + { + return matrixToPython( sigmat->accessCopy() ); + } + + Signal<double,int> * sigdouble + = dynamic_cast< Signal<double,int>* >( signal ); + if( NULL!= sigdouble ) + { + return Py_BuildValue("d", sigdouble->accessCopy() ); + } + + /* Non specific signal: use a generic way. */ std::ostringstream value; try { signal->get(value); -- GitLab