diff --git a/rclcpp/include/rclcpp/node_impl.hpp b/rclcpp/include/rclcpp/node_impl.hpp index 516fda9..2d0aaf0 100644 --- a/rclcpp/include/rclcpp/node_impl.hpp +++ b/rclcpp/include/rclcpp/node_impl.hpp @@ -383,8 +383,8 @@ Node::list_parameters( size_t last_separator = kv.first.find_last_of('.'); if (std::string::npos != last_separator) { std::string prefix = kv.first.substr(0, last_separator); - if (std::find(result.prefixes.cbegin(), result.prefixes.cend(), - prefix) == result.prefixes.cend()) + if (std::find(result.prefixes.cbegin(), result.prefixes.cend(), prefix) == + result.prefixes.cend()) { result.prefixes.push_back(prefix); } diff --git a/rclcpp/include/rclcpp/parameter_client.hpp b/rclcpp/include/rclcpp/parameter_client.hpp index 60543ea..672b099 100644 --- a/rclcpp/include/rclcpp/parameter_client.hpp +++ b/rclcpp/include/rclcpp/parameter_client.hpp @@ -73,28 +73,30 @@ public: std::function>)> callback = nullptr) { - std::promise> promise_result; - auto future_result = promise_result.get_future().share(); + auto promise_result = + std::make_shared>>(); + auto future_result = promise_result->get_future().share(); auto request = std::make_shared(); request->names = names; get_parameters_client_->async_send_request( request, - [&names, &promise_result, &future_result, &callback]( + [request, promise_result, future_result, &callback]( rclcpp::client::Client::SharedFuture cb_f) { std::vector parameter_variants; auto & pvalues = cb_f.get()->values; - std::transform(pvalues.begin(), pvalues.end(), std::back_inserter(parameter_variants), - [&names, &pvalues](rcl_interfaces::msg::ParameterValue pvalue) { + for (auto & pvalue : pvalues) { auto i = &pvalue - &pvalues[0]; rcl_interfaces::msg::Parameter parameter; - parameter.name = names[i]; + parameter.name = request->names[i]; parameter.value = pvalue; - return rclcpp::parameter::ParameterVariant::from_parameter(parameter); - }); - promise_result.set_value(parameter_variants); + parameter_variants.push_back(rclcpp::parameter::ParameterVariant::from_parameter( + parameter)); + } + + promise_result->set_value(parameter_variants); if (callback != nullptr) { callback(future_result); } @@ -110,21 +112,23 @@ public: std::function>)> callback = nullptr) { - std::promise> promise_result; - auto future_result = promise_result.get_future().share(); + auto promise_result = + std::make_shared>>(); + auto future_result = promise_result->get_future().share(); auto request = std::make_shared(); request->names = names; get_parameter_types_client_->async_send_request( request, - [&promise_result, &future_result, &callback]( + [promise_result, future_result, &callback]( rclcpp::client::Client::SharedFuture cb_f) { std::vector types; auto & pts = cb_f.get()->types; - std::transform(pts.begin(), pts.end(), std::back_inserter(types), - [](uint8_t pt) {return static_cast(pt); }); - promise_result.set_value(types); + for (auto & pt : pts) { + pts.push_back(static_cast(pt)); + } + promise_result->set_value(types); if (callback != nullptr) { callback(future_result); } @@ -140,8 +144,9 @@ public: std::function>)> callback = nullptr) { - std::promise> promise_result; - auto future_result = promise_result.get_future().share(); + auto promise_result = + std::make_shared>>(); + auto future_result = promise_result->get_future().share(); auto request = std::make_shared(); @@ -151,9 +156,9 @@ public: set_parameters_client_->async_send_request( request, - [&promise_result, &future_result, &callback]( + [promise_result, future_result, &callback]( rclcpp::client::Client::SharedFuture cb_f) { - promise_result.set_value(cb_f.get()->results); + promise_result->set_value(cb_f.get()->results); if (callback != nullptr) { callback(future_result); } @@ -169,8 +174,9 @@ public: std::function)> callback = nullptr) { - std::promise promise_result; - auto future_result = promise_result.get_future().share(); + auto promise_result = + std::make_shared>(); + auto future_result = promise_result->get_future().share(); auto request = std::make_shared(); @@ -180,9 +186,9 @@ public: set_parameters_atomically_client_->async_send_request( request, - [&promise_result, &future_result, &callback]( + [promise_result, future_result, &callback]( rclcpp::client::Client::SharedFuture cb_f) { - promise_result.set_value(cb_f.get()->result); + promise_result->set_value(cb_f.get()->result); if (callback != nullptr) { callback(future_result); } @@ -199,8 +205,9 @@ public: std::function)> callback = nullptr) { - std::promise promise_result; - auto future_result = promise_result.get_future().share(); + auto promise_result = + std::make_shared>(); + auto future_result = promise_result->get_future().share(); auto request = std::make_shared(); request->prefixes = prefixes; @@ -208,9 +215,9 @@ public: list_parameters_client_->async_send_request( request, - [&promise_result, &future_result, &callback]( + [promise_result, future_result, &callback]( rclcpp::client::Client::SharedFuture cb_f) { - promise_result.set_value(cb_f.get()->result); + promise_result->set_value(cb_f.get()->result); if (callback != nullptr) { callback(future_result); }