From 206c23cd027e330a79bdf25a992b8e9db5178613 Mon Sep 17 00:00:00 2001 From: Fabian Reister <fabian.reister@kit.edu> Date: Wed, 14 Jul 2021 22:08:11 +0200 Subject: [PATCH] RAII paradigm --- .../libraries/client/ComponentPlugin.cpp | 4 +- .../Navigation/libraries/client/Navigator.cpp | 80 +++++++------------ .../Navigation/libraries/client/Navigator.h | 12 ++- 3 files changed, 39 insertions(+), 57 deletions(-) diff --git a/source/Navigation/libraries/client/ComponentPlugin.cpp b/source/Navigation/libraries/client/ComponentPlugin.cpp index 8993da44..0f51b607 100644 --- a/source/Navigation/libraries/client/ComponentPlugin.cpp +++ b/source/Navigation/libraries/client/ComponentPlugin.cpp @@ -4,6 +4,7 @@ #include "ArmarXCore/core/Component.h" #include "ArmarXCore/core/application/properties/PropertyDefinitionContainer.h" #include "ArmarXCore/util/CPPUtility/trace.h" +#include "Navigation/libraries/client/Navigator.h" // ComponentPlugin @@ -37,7 +38,8 @@ void armarx::nav::client::ComponentPlugin::preOnConnectComponent() ARMARX_TRACE; const std::string componentName = parent().getName(); - parent<armarx::nav::client::ComponentPluginUser>().navigator.setConfigId(componentName); + parent<armarx::nav::client::ComponentPluginUser>().navigator = Navigator(navigatorPrx, componentName); + // parent<armarx::nav::client::ComponentPluginUser>().navigator.setConfigId(componentName); } diff --git a/source/Navigation/libraries/client/Navigator.cpp b/source/Navigation/libraries/client/Navigator.cpp index 32a55902..4909ffbb 100644 --- a/source/Navigation/libraries/client/Navigator.cpp +++ b/source/Navigation/libraries/client/Navigator.cpp @@ -1,5 +1,6 @@ -#include <Navigation/libraries/client/Navigator.h> +#include "Navigation/libraries/client/Navigator.h" +#include "ArmarXCore/core/exceptions/local/ExpressionException.h" std::vector<Eigen::Matrix4f> convert(const std::vector<armarx::nav::core::Pose>& ps) { @@ -14,113 +15,86 @@ std::vector<Eigen::Matrix4f> convert(const std::vector<armarx::nav::core::Pose>& return ms; } - -//armarx::nav::client::Navigator::Navigator(const armarx::nav::components::NavigatorInterfacePrx& navigator) -// : navigator(navigator) -//{ -// // pass -//} - - -void -armarx::nav::client::Navigator::setConfigId(const std::string& configId) +armarx::nav::client::Navigator::Navigator(const armarx::nav::components::NavigatorInterfacePrx& navigator, const std::string& configId) + : navigator(navigator), configId(configId) { - this->configId = configId; + // pass } +// void armarx::nav::client::Navigator::setConfigId(const std::string& configId) +// { +// this->configId = configId; +// } -void -armarx::nav::client::Navigator::configure(const NavigationStackConfig& cfg) +void armarx::nav::client::Navigator::configure(const NavigationStackConfig& cfg) { + ARMARX_CHECK_NOT_NULL(navigator); navigator->createConfig(cfg.toAron(), configId); } - -void -armarx::nav::client::Navigator::moveTo(const core::Pose& pose, core::NavigationFrame frame) +void armarx::nav::client::Navigator::moveTo(const core::Pose& pose, core::NavigationFrame frame) { moveTo(std::vector<core::Pose> {pose}, frame); } - -void -armarx::nav::client::Navigator::moveTo(const std::vector<core::Pose>& waypoints, - core::NavigationFrame frame) +void armarx::nav::client::Navigator::moveTo(const std::vector<core::Pose>& waypoints, + core::NavigationFrame frame) { - navigator->moveTo(convert(waypoints), - core::NavigationFrameNames.to_name(frame), - configId); + ARMARX_CHECK_NOT_NULL(navigator); + navigator->moveTo(convert(waypoints), core::NavigationFrameNames.to_name(frame), configId); } - -void -armarx::nav::client::Navigator::moveTowards(const core::Direction& direction, +void armarx::nav::client::Navigator::moveTowards(const core::Direction& direction, core::NavigationFrame frame) { + ARMARX_CHECK_NOT_NULL(navigator); navigator->moveTowards(direction, core::NavigationFrameNames.to_name(frame), configId); } - -void -armarx::nav::client::Navigator::pauseMovement() +void armarx::nav::client::Navigator::pauseMovement() { + ARMARX_CHECK_NOT_NULL(navigator); navigator->pauseMovement(); } - -void -armarx::nav::client::Navigator::resumeMovement() +void armarx::nav::client::Navigator::resumeMovement() { + ARMARX_CHECK_NOT_NULL(navigator); navigator->resumeMovement(); } - -void -armarx::nav::client::Navigator::onGoalReached(const std::function<void(void)>& callback) +void armarx::nav::client::Navigator::onGoalReached(const std::function<void(void)>& callback) { - } - -void -armarx::nav::client::Navigator::onGoalNearlyReached(const std::function<void(void)>& callback) +void armarx::nav::client::Navigator::onGoalNearlyReached(const std::function<void(void)>& callback) { - } - -void -armarx::nav::client::Navigator::onWaypointReached(const std::function<void(int)>& callback) +void armarx::nav::client::Navigator::onWaypointReached(const std::function<void(int)>& callback) { - } - -void -armarx::nav::client::Navigator::onWaypointNearlyReached(const std::function<void(int)>& callback) +void armarx::nav::client::Navigator::onWaypointNearlyReached( + const std::function<void(int)>& callback) { - } - auto armarx::nav::client::Navigator::waitForGoalReached() -> GoalReachedWaitResult { return {}; } - auto armarx::nav::client::Navigator::waitForGoalNearlyReached() -> GoalReachedWaitResult { return {}; } - auto armarx::nav::client::Navigator::waitForWaypointReached() -> WaypointReachedWaitResult { return {}; } - auto armarx::nav::client::Navigator::waitForWaypointNearlyReached() -> WaypointReachedWaitResult { return {}; diff --git a/source/Navigation/libraries/client/Navigator.h b/source/Navigation/libraries/client/Navigator.h index 3cab9da4..ee956482 100644 --- a/source/Navigation/libraries/client/Navigator.h +++ b/source/Navigation/libraries/client/Navigator.h @@ -20,6 +20,7 @@ * GNU General Public License */ +#pragma once // STD/STL #include <functional> @@ -34,15 +35,17 @@ namespace armarx::nav::client { + class ComponentPluginUser; class Navigator { + friend class ComponentPluginUser; public: - //Navigator(const components::NavigatorInterfacePrx& navigator); + Navigator(const components::NavigatorInterfacePrx& navigator, const std::string& configId); - void setConfigId(const std::string& configId); + // void setConfigId(const std::string& configId); void configure(const NavigationStackConfig& cfg); @@ -93,9 +96,12 @@ namespace armarx::nav::client private: - std::string configId; + // private c'tor violating RAII. Only meant to be used by friend class ComponentPluginUser + Navigator() = default; + components::NavigatorInterfacePrx navigator; + std::string configId; }; -- GitLab