From c5337273594f8cecbfd2778729fe48df6df36ba5 Mon Sep 17 00:00:00 2001 From: Florent Lamiraux <florent@laas.fr> Date: Fri, 16 Jun 2023 07:54:51 +0200 Subject: [PATCH] Use int64_t for signal time. --- .../dynamic-graph/python/dynamic-graph-py.hh | 2 +- .../dynamic-graph/python/signal-wrapper.hh | 2 +- src/dynamic_graph/dynamic-graph-py.cc | 7 +-- src/dynamic_graph/signal-base-py.cc | 44 +++++++++---------- src/dynamic_graph/signal-wrapper.cc | 15 ++++--- tests/custom_entity.cpp | 2 +- tests/custom_entity.h | 6 +-- tests/test_bindings.py | 4 +- 8 files changed, 42 insertions(+), 40 deletions(-) diff --git a/include/dynamic-graph/python/dynamic-graph-py.hh b/include/dynamic-graph/python/dynamic-graph-py.hh index f62c16e..51c2810 100644 --- a/include/dynamic-graph/python/dynamic-graph-py.hh +++ b/include/dynamic-graph/python/dynamic-graph-py.hh @@ -40,7 +40,7 @@ void exposeSignals(); // Declare functions defined in other source files namespace signalBase { -SignalBase<int>* createSignalWrapper(const char* name, const char* type, +SignalBase<sigtime_t>* createSignalWrapper(const char* name, const char* type, bp::object object); } // namespace signalBase namespace entity { diff --git a/include/dynamic-graph/python/signal-wrapper.hh b/include/dynamic-graph/python/signal-wrapper.hh index 30a22e2..9cdaa30 100644 --- a/include/dynamic-graph/python/signal-wrapper.hh +++ b/include/dynamic-graph/python/signal-wrapper.hh @@ -22,7 +22,7 @@ class PythonSignalContainer : public Entity { public: using Entity::Entity; - void signalRegistration(const SignalArray<int>& signals); + void signalRegistration(const SignalArray<sigtime_t>& signals); void rmSignal(const std::string& name); }; diff --git a/src/dynamic_graph/dynamic-graph-py.cc b/src/dynamic_graph/dynamic-graph-py.cc index 0cf7355..5946ffa 100644 --- a/src/dynamic_graph/dynamic-graph-py.cc +++ b/src/dynamic_graph/dynamic-graph-py.cc @@ -32,7 +32,7 @@ namespace python { /** \brief plug a signal into another one. */ -void plug(SignalBase<int>* signalOut, SignalBase<int>* signalIn) { +void plug(SignalBase<sigtime_t>* signalOut, SignalBase<sigtime_t>* signalIn) { signalIn->plug(signalOut); } @@ -66,7 +66,8 @@ MapOfEntities* getEntityMap() { &dg::PoolStorage::getInstance()->getEntityMap()); } -dg::SignalBase<int>* getSignal(dg::Entity& e, const std::string& name) { +dg::SignalBase<dg::sigtime_t>* getSignal(dg::Entity& e, const std::string& name) +{ return &e.getSignal(name); } @@ -76,7 +77,7 @@ class PythonEntity : public dg::Entity { public: using dg::Entity::Entity; - void signalRegistration(dg::SignalBase<int>& signal) { + void signalRegistration(dg::SignalBase<dg::sigtime_t>& signal) { dg::Entity::signalRegistration(signal); } void signalDeregistration(const std::string& name) { diff --git a/src/dynamic_graph/signal-base-py.cc b/src/dynamic_graph/signal-base-py.cc index a6f4db6..82b46d7 100644 --- a/src/dynamic_graph/signal-base-py.cc +++ b/src/dynamic_graph/signal-base-py.cc @@ -22,8 +22,6 @@ namespace bp = boost::python; namespace dynamicgraph { namespace python { -typedef int time_type; - typedef Eigen::AngleAxis<double> VectorUTheta; typedef Eigen::Quaternion<double> Quaternion; @@ -79,7 +77,7 @@ void exposeSignalBase(const char* name) { }) .def( "displayDependencies", - +[](const S_t& s, int time) -> std::string { + +[](const S_t& s, sigtime_t time) -> std::string { std::ostringstream oss; s.displayDependencies(oss, time); return oss.str(); @@ -88,9 +86,9 @@ void exposeSignalBase(const char* name) { } template <> -auto exposeSignal<MatrixHomogeneous, time_type>(const std::string& name) { - typedef Signal<MatrixHomogeneous, time_type> S_t; - bp::class_<S_t, bp::bases<SignalBase<time_type> >, boost::noncopyable> obj( +auto exposeSignal<MatrixHomogeneous, sigtime_t>(const std::string& name) { + typedef Signal<MatrixHomogeneous, sigtime_t> S_t; + bp::class_<S_t, bp::bases<SignalBase<sigtime_t> >, boost::noncopyable> obj( name.c_str(), bp::init<std::string>()); obj.add_property( "value", @@ -107,31 +105,31 @@ auto exposeSignal<MatrixHomogeneous, time_type>(const std::string& name) { } void exposeSignals() { - exposeSignalBase<time_type>("SignalBase"); + exposeSignalBase<sigtime_t>("SignalBase"); - exposeSignalsOfType<bool, time_type>("Bool"); - exposeSignalsOfType<int, time_type>("Int"); - exposeSignalsOfType<double, time_type>("Double"); + exposeSignalsOfType<bool, sigtime_t>("Bool"); + exposeSignalsOfType<int, sigtime_t>("Int"); + exposeSignalsOfType<double, sigtime_t>("Double"); - exposeSignalsOfType<Vector, time_type>("Vector"); - exposeSignalsOfType<Vector3, time_type>("Vector3"); - exposeSignalsOfType<Vector7, time_type>("Vector7"); + exposeSignalsOfType<Vector, sigtime_t>("Vector"); + exposeSignalsOfType<Vector3, sigtime_t>("Vector3"); + exposeSignalsOfType<Vector7, sigtime_t>("Vector7"); - exposeSignalsOfType<Matrix, time_type>("Matrix"); - exposeSignalsOfType<MatrixRotation, time_type>("MatrixRotation"); - exposeSignalsOfType<MatrixHomogeneous, time_type>("MatrixHomogeneous"); - exposeSignalsOfType<MatrixTwist, time_type>("MatrixTwist"); + exposeSignalsOfType<Matrix, sigtime_t>("Matrix"); + exposeSignalsOfType<MatrixRotation, sigtime_t>("MatrixRotation"); + exposeSignalsOfType<MatrixHomogeneous, sigtime_t>("MatrixHomogeneous"); + exposeSignalsOfType<MatrixTwist, sigtime_t>("MatrixTwist"); - exposeSignalsOfType<Quaternion, time_type>("Quaternion"); - exposeSignalsOfType<VectorUTheta, time_type>("VectorUTheta"); + exposeSignalsOfType<Quaternion, sigtime_t>("Quaternion"); + exposeSignalsOfType<VectorUTheta, sigtime_t>("VectorUTheta"); } namespace signalBase { template <class T> -SignalWrapper<T, int>* createSignalWrapperTpl(const char* name, bp::object o, +SignalWrapper<T, sigtime_t>* createSignalWrapperTpl(const char* name, bp::object o, std::string& error) { - typedef SignalWrapper<T, int> SignalWrapper_t; + typedef SignalWrapper<T, sigtime_t> SignalWrapper_t; if (!SignalWrapper_t::checkCallable(o, error)) { return NULL; } @@ -153,12 +151,12 @@ PythonSignalContainer* getPythonSignalContainer() { /** \brief Create an instance of SignalWrapper */ -SignalBase<int>* createSignalWrapper(const char* name, const char* type, +SignalBase<sigtime_t>* createSignalWrapper(const char* name, const char* type, bp::object object) { PythonSignalContainer* psc = getPythonSignalContainer(); if (psc == NULL) return NULL; - SignalBase<int>* obj = NULL; + SignalBase<sigtime_t>* obj = NULL; std::string error; SIGNAL_WRAPPER_TYPE(if, BOOL, bool) // SIGNAL_WRAPPER_TYPE(else if, UNSIGNED ,bool) diff --git a/src/dynamic_graph/signal-wrapper.cc b/src/dynamic_graph/signal-wrapper.cc index cc41fb0..a878ede 100644 --- a/src/dynamic_graph/signal-wrapper.cc +++ b/src/dynamic_graph/signal-wrapper.cc @@ -9,7 +9,7 @@ namespace dynamicgraph { namespace python { void PythonSignalContainer::signalRegistration( - const SignalArray<int>& signals) { + const SignalArray<sigtime_t>& signals) { Entity::signalRegistration(signals); } @@ -30,10 +30,13 @@ bool SignalWrapper<T, Time>::checkCallable(pyobject c, std::string& error) { return true; } -template class SignalWrapper<bool, int>; -template class SignalWrapper<int, int>; -template class SignalWrapper<float, int>; -template class SignalWrapper<double, int>; -template class SignalWrapper<Vector, int>; +template class SignalWrapper<bool, sigtime_t>; +template class SignalWrapper<int32_t, sigtime_t>; +template class SignalWrapper<int64_t, sigtime_t>; +template class SignalWrapper<uint32_t, sigtime_t>; +template class SignalWrapper<uint64_t, sigtime_t>; +template class SignalWrapper<float, sigtime_t>; +template class SignalWrapper<double, sigtime_t>; +template class SignalWrapper<Vector, sigtime_t>; } // namespace python } // namespace dynamicgraph diff --git a/tests/custom_entity.cpp b/tests/custom_entity.cpp index a7aa2f5..1ead109 100644 --- a/tests/custom_entity.cpp +++ b/tests/custom_entity.cpp @@ -46,7 +46,7 @@ void CustomEntity::rmValidSignal() { signalDeregistration("out_double"); } -double &CustomEntity::update(double &res, const int &inTime) { +double &CustomEntity::update(double &res, const sigtime_t &inTime) { const double &aDouble = m_sigdSIN(inTime); res = aDouble; logger().stream(MSG_TYPE_ERROR) << "start update " << res << '\n'; diff --git a/tests/custom_entity.h b/tests/custom_entity.h index fd821f0..c950a07 100644 --- a/tests/custom_entity.h +++ b/tests/custom_entity.h @@ -14,8 +14,8 @@ namespace dynamicgraph { class CustomEntity : public Entity { public: - dynamicgraph::SignalPtr<double, int> m_sigdSIN; - dynamicgraph::SignalTimeDependent<double, int> m_sigdTimeDepSOUT; + dynamicgraph::SignalPtr<double, sigtime_t> m_sigdSIN; + dynamicgraph::SignalTimeDependent<double, sigtime_t> m_sigdTimeDepSOUT; DYNAMIC_GRAPH_ENTITY_DECL(); CustomEntity(const std::string n); @@ -24,7 +24,7 @@ class CustomEntity : public Entity { void rmValidSignal(); - double &update(double &res, const int &inTime); + double &update(double &res, const sigtime_t &inTime); void act(); }; diff --git a/tests/test_bindings.py b/tests/test_bindings.py index 425da39..12f0e13 100644 --- a/tests/test_bindings.py +++ b/tests/test_bindings.py @@ -8,8 +8,8 @@ ERR = ( dynamic_graph.wrap.plug(%s, %s) did not match C++ signature: plug(""" - "dynamicgraph::SignalBase<int>* signalOut, " - "dynamicgraph::SignalBase<int>* signalIn)" + "dynamicgraph::SignalBase<long>* signalOut, " + "dynamicgraph::SignalBase<long>* signalIn)" ) -- GitLab