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