From 35531078236b04ac03cab7b090b452a573a42ed2 Mon Sep 17 00:00:00 2001 From: gerkey Date: Mon, 20 Jun 2016 17:55:57 -0700 Subject: [PATCH] Allow empty prefix list to get all params; check depth correctly. (#230) * Allow empty prefix list to get all params; check depth correctly. * use enum instead of constant --- rclcpp/src/rclcpp/node.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/rclcpp/src/rclcpp/node.cpp b/rclcpp/src/rclcpp/node.cpp index ce4c7ac..e4a6fd7 100644 --- a/rclcpp/src/rclcpp/node.cpp +++ b/rclcpp/src/rclcpp/node.cpp @@ -19,6 +19,7 @@ #include #include +#include "rcl_interfaces/srv/list_parameters.hpp" #include "rclcpp/node.hpp" using rclcpp::node::Node; @@ -271,17 +272,21 @@ Node::list_parameters( // TODO(esteve): define parameter separator, use "." for now for (auto & kv : parameters_) { - if (std::any_of(prefixes.cbegin(), prefixes.cend(), [&kv, &depth](const std::string & prefix) { + if (((prefixes.size() == 0) && + ((depth == rcl_interfaces::srv::ListParameters::Request::DEPTH_RECURSIVE) || + (static_cast(std::count(kv.first.begin(), kv.first.end(), '.')) < depth))) || + (std::any_of(prefixes.cbegin(), prefixes.cend(), [&kv, &depth](const std::string & prefix) { if (kv.first == prefix) { return true; } else if (kv.first.find(prefix + ".") == 0) { size_t length = prefix.length(); std::string substr = kv.first.substr(length); // Cast as unsigned integer to avoid warning - return static_cast(std::count(substr.begin(), substr.end(), '.')) < depth; + return (depth == rcl_interfaces::srv::ListParameters::Request::DEPTH_RECURSIVE) || + (static_cast(std::count(substr.begin(), substr.end(), '.')) < depth); } return false; - })) + }))) { result.names.push_back(kv.first); size_t last_separator = kv.first.find_last_of('.');