From e560789e9d1a9024c8f04557b1ed1dd7317ec2cd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Joan=20Sol=C3=A0?= <jsola@iri.upc.edu>
Date: Fri, 2 Aug 2019 11:33:30 +0200
Subject: [PATCH] Add create() to the macro; rename to WOLF_PROCESSOR_CREATE

---
 hello_wolf/processor_range_bearing.cpp        | 13 -------
 hello_wolf/processor_range_bearing.h          |  4 +--
 include/core/processor/processor_base.h       | 36 ++++++++++++-------
 include/core/processor/processor_diff_drive.h |  4 +--
 include/core/processor/processor_odom_2D.h    |  4 +--
 include/core/processor/processor_odom_3D.h    |  4 +--
 src/processor/processor_diff_drive.cpp        | 10 ------
 src/processor/processor_odom_2D.cpp           | 10 ------
 src/processor/processor_odom_3D.cpp           | 13 -------
 9 files changed, 27 insertions(+), 71 deletions(-)

diff --git a/hello_wolf/processor_range_bearing.cpp b/hello_wolf/processor_range_bearing.cpp
index d12fa8b15..37c740b42 100644
--- a/hello_wolf/processor_range_bearing.cpp
+++ b/hello_wolf/processor_range_bearing.cpp
@@ -99,19 +99,6 @@ void ProcessorRangeBearing::processCapture(CaptureBasePtr _capture)
 
 }
 
-ProcessorBasePtr ProcessorRangeBearing::create(const std::string& _unique_name,
-                                               const ProcessorParamsBasePtr _params)
-{
-    auto params = std::static_pointer_cast<ProcessorParamsRangeBearing>(_params);
-
-    // construct processor
-    auto prc    = std::make_shared<ProcessorRangeBearing>(params);
-
-    // setup processor
-    prc->setName(_unique_name);
-
-    return prc;
-}
 
 Eigen::Vector2s ProcessorRangeBearing::observe(const Eigen::Vector2s& lmk_w) const
 {
diff --git a/hello_wolf/processor_range_bearing.h b/hello_wolf/processor_range_bearing.h
index 475297208..527efd1f6 100644
--- a/hello_wolf/processor_range_bearing.h
+++ b/hello_wolf/processor_range_bearing.h
@@ -50,9 +50,7 @@ class ProcessorRangeBearing : public ProcessorBase
         virtual void configure(SensorBasePtr _sensor) override;
 
         // Factory method for high level API
-        static ProcessorBasePtr create(const std::string& _unique_name,
-                                       const ProcessorParamsBasePtr _params);
-        WOLF_CREATE_PROCESSOR_AUTO(ProcessorRangeBearing, ProcessorParamsRangeBearing);
+        WOLF_PROCESSOR_CREATE(ProcessorRangeBearing, ProcessorParamsRangeBearing);
 
     protected:
         // Implementation of pure virtuals from ProcessorBase
diff --git a/include/core/processor/processor_base.h b/include/core/processor/processor_base.h
index da7089c17..fdbd88974 100644
--- a/include/core/processor/processor_base.h
+++ b/include/core/processor/processor_base.h
@@ -28,20 +28,30 @@ namespace wolf {
  * In order to use this macro, the derived processor class, ProcessorClass,
  * must have a constructor available with the API:
  *
- *   ProcessorClass(const SensorClassPtr _sensor, const ProcessorParamsClassPtr _params);
+ *   ProcessorClass(const ProcessorParamsClassPtr _params);
  */
-#define WOLF_CREATE_PROCESSOR_AUTO(ProcessorClass, ProcessorParamsClass)                \
-static ProcessorBasePtr createAutoConf(const std::string& _unique_name,                 \
-                                       const ParamsServer& _server)                     \
-{                                                                                       \
-    auto params     = std::make_shared<ProcessorParamsClass>(_unique_name, _server);    \
-                                                                                        \
-    auto processor  = std::make_shared<ProcessorClass>(params);                         \
-                                                                                        \
-    processor       ->setName(_unique_name);                                            \
-                                                                                        \
-    return processor;                                                                   \
-}
+#define WOLF_PROCESSOR_CREATE(ProcessorClass, ProcessorParamsClass)                                     \
+static ProcessorBasePtr createAutoConf(const std::string& _unique_name,                                 \
+                                       const ParamsServer& _server)                                     \
+{                                                                                                       \
+    auto params     = std::make_shared<ProcessorParamsClass>(_unique_name, _server);                    \
+                                                                                                        \
+    auto processor  = std::make_shared<ProcessorClass>(params);                                         \
+                                                                                                        \
+    processor       ->setName(_unique_name);                                                            \
+                                                                                                        \
+    return processor;                                                                                   \
+}                                                                                                       \
+static ProcessorBasePtr create(const std::string& _unique_name, const ProcessorParamsBasePtr _params)   \
+{                                                                                                       \
+    auto params     = std::static_pointer_cast<ProcessorParamsClass>(_params);                          \
+                                                                                                        \
+    auto processor  = std::make_shared<ProcessorClass>(params);                                         \
+                                                                                                        \
+    processor       ->setName(_unique_name);                                                            \
+                                                                                                        \
+    return processor;                                                                                   \
+}                                                                                                       \
 
 
 
diff --git a/include/core/processor/processor_diff_drive.h b/include/core/processor/processor_diff_drive.h
index 297ce7a38..d4aa5a792 100644
--- a/include/core/processor/processor_diff_drive.h
+++ b/include/core/processor/processor_diff_drive.h
@@ -38,9 +38,7 @@ class ProcessorDiffDrive : public ProcessorOdom2D
         virtual void configure(SensorBasePtr _sensor) override;
 
         // Factory method for high level API
-        static ProcessorBasePtr create(const std::string& _unique_name,
-                                       const ProcessorParamsBasePtr _params);
-        WOLF_CREATE_PROCESSOR_AUTO(ProcessorDiffDrive, ProcessorParamsDiffDrive);
+        WOLF_PROCESSOR_CREATE(ProcessorDiffDrive, ProcessorParamsDiffDrive);
 
     protected:
         // Motion integration
diff --git a/include/core/processor/processor_odom_2D.h b/include/core/processor/processor_odom_2D.h
index 9d9c8096a..27d180d43 100644
--- a/include/core/processor/processor_odom_2D.h
+++ b/include/core/processor/processor_odom_2D.h
@@ -45,9 +45,7 @@ class ProcessorOdom2D : public ProcessorMotion
         virtual void configure(SensorBasePtr _sensor) override { };
 
         // Factory method for high level API
-        static ProcessorBasePtr create(const std::string& _unique_name,
-                                       const ProcessorParamsBasePtr _params);
-        WOLF_CREATE_PROCESSOR_AUTO(ProcessorOdom2D, ProcessorParamsOdom2D);
+        WOLF_PROCESSOR_CREATE(ProcessorOdom2D, ProcessorParamsOdom2D);
 
         virtual bool voteForKeyFrame() override;
 
diff --git a/include/core/processor/processor_odom_3D.h b/include/core/processor/processor_odom_3D.h
index ce9716032..62128c904 100644
--- a/include/core/processor/processor_odom_3D.h
+++ b/include/core/processor/processor_odom_3D.h
@@ -65,9 +65,7 @@ class ProcessorOdom3D : public ProcessorMotion
         virtual void configure(SensorBasePtr _sensor) override;
 
         // Factory method for high level API
-        static ProcessorBasePtr create(const std::string& _unique_name,
-                                       const ProcessorParamsBasePtr _params);
-        WOLF_CREATE_PROCESSOR_AUTO(ProcessorOdom3D, ProcessorParamsOdom3D);
+        WOLF_PROCESSOR_CREATE(ProcessorOdom3D, ProcessorParamsOdom3D);
 
     public:
         // Motion integration
diff --git a/src/processor/processor_diff_drive.cpp b/src/processor/processor_diff_drive.cpp
index 07bf75b34..52cf7ebd9 100644
--- a/src/processor/processor_diff_drive.cpp
+++ b/src/processor/processor_diff_drive.cpp
@@ -31,16 +31,6 @@ ProcessorDiffDrive::~ProcessorDiffDrive()
     //
 }
 
-ProcessorBasePtr ProcessorDiffDrive::create(const std::string& _unique_name, const ProcessorParamsBasePtr _params)
-{
-    auto params = std::static_pointer_cast<ProcessorParamsDiffDrive>(_params);
-
-    auto prc_ptr = std::make_shared<ProcessorDiffDrive>(params);
-
-    prc_ptr->setName(_unique_name);
-
-    return prc_ptr;
-}
 
 void ProcessorDiffDrive::configure(SensorBasePtr _sensor)
 {
diff --git a/src/processor/processor_odom_2D.cpp b/src/processor/processor_odom_2D.cpp
index e9b7dd34a..25e45242a 100644
--- a/src/processor/processor_odom_2D.cpp
+++ b/src/processor/processor_odom_2D.cpp
@@ -167,16 +167,6 @@ FeatureBasePtr ProcessorOdom2D::emplaceFeature(CaptureMotionPtr _capture_motion)
     return key_feature_ptr;
 }
 
-ProcessorBasePtr ProcessorOdom2D::create(const std::string& _unique_name, const ProcessorParamsBasePtr _params)
-{
-    auto params = std::static_pointer_cast<ProcessorParamsOdom2D>(_params);
-
-    auto prc_ptr = std::make_shared<ProcessorOdom2D>(params);
-
-    prc_ptr->setName(_unique_name);
-
-    return prc_ptr;
-}
 
 
 } /* namespace wolf */
diff --git a/src/processor/processor_odom_3D.cpp b/src/processor/processor_odom_3D.cpp
index e519b9470..6486554ec 100644
--- a/src/processor/processor_odom_3D.cpp
+++ b/src/processor/processor_odom_3D.cpp
@@ -333,19 +333,6 @@ Motion ProcessorOdom3D::interpolate(const Motion& _ref1,
 }
 
 
-ProcessorBasePtr ProcessorOdom3D::create(const std::string& _unique_name, const ProcessorParamsBasePtr _params)
-{
-    // cast inputs to the correct type
-    auto params     = std::static_pointer_cast<ProcessorParamsOdom3D>(_params);
-
-    // construct processor
-    auto prc_odo    = std::make_shared<ProcessorOdom3D>(params);
-
-    // setup processor
-    prc_odo->setName(_unique_name);
-
-    return prc_odo;
-}
 
 bool ProcessorOdom3D::voteForKeyFrame()
 {
-- 
GitLab