change parameter separator to forward slash (#367)
* change parameter separator to forward slash * add separator to prefix * const char separator
This commit is contained in:
parent
a5f94ac412
commit
2c5ab49e7c
1 changed files with 13 additions and 11 deletions
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
#include "rcl_interfaces/srv/list_parameters.hpp"
|
#include "rcl_interfaces/srv/list_parameters.hpp"
|
||||||
#include "rclcpp/create_publisher.hpp"
|
#include "rclcpp/create_publisher.hpp"
|
||||||
|
#include "rcutils/logging_macros.h"
|
||||||
#include "rmw/qos_profiles.h"
|
#include "rmw/qos_profiles.h"
|
||||||
|
|
||||||
using rclcpp::node_interfaces::NodeParameters;
|
using rclcpp::node_interfaces::NodeParameters;
|
||||||
|
@ -197,26 +198,27 @@ NodeParameters::list_parameters(const std::vector<std::string> & prefixes, uint6
|
||||||
std::lock_guard<std::mutex> lock(mutex_);
|
std::lock_guard<std::mutex> lock(mutex_);
|
||||||
rcl_interfaces::msg::ListParametersResult result;
|
rcl_interfaces::msg::ListParametersResult result;
|
||||||
|
|
||||||
// TODO(esteve): define parameter separator, use "." for now
|
const char separator = '/';
|
||||||
for (auto & kv : parameters_) {
|
for (auto & kv : parameters_) {
|
||||||
if (((prefixes.size() == 0) &&
|
bool get_all = (prefixes.size() == 0) &&
|
||||||
((depth == rcl_interfaces::srv::ListParameters::Request::DEPTH_RECURSIVE) ||
|
((depth == rcl_interfaces::srv::ListParameters::Request::DEPTH_RECURSIVE) ||
|
||||||
(static_cast<uint64_t>(std::count(kv.first.begin(), kv.first.end(), '.')) < depth))) ||
|
(static_cast<uint64_t>(std::count(kv.first.begin(), kv.first.end(), separator)) < depth));
|
||||||
(std::any_of(prefixes.cbegin(), prefixes.cend(), [&kv, &depth](const std::string & prefix) {
|
bool prefix_matches = std::any_of(prefixes.cbegin(), prefixes.cend(),
|
||||||
|
[&kv, &depth, &separator](const std::string & prefix) {
|
||||||
if (kv.first == prefix) {
|
if (kv.first == prefix) {
|
||||||
return true;
|
return true;
|
||||||
} else if (kv.first.find(prefix + ".") == 0) {
|
} else if (kv.first.find(prefix + separator) == 0) {
|
||||||
size_t length = prefix.length();
|
size_t length = prefix.length();
|
||||||
std::string substr = kv.first.substr(length);
|
std::string substr = kv.first.substr(length);
|
||||||
// Cast as unsigned integer to avoid warning
|
// Cast as unsigned integer to avoid warning
|
||||||
return (depth == rcl_interfaces::srv::ListParameters::Request::DEPTH_RECURSIVE) ||
|
return (depth == rcl_interfaces::srv::ListParameters::Request::DEPTH_RECURSIVE) ||
|
||||||
(static_cast<uint64_t>(std::count(substr.begin(), substr.end(), '.')) < depth);
|
(static_cast<uint64_t>(std::count(substr.begin(), substr.end(), separator)) < depth);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
})))
|
});
|
||||||
{
|
if (get_all || prefix_matches) {
|
||||||
result.names.push_back(kv.first);
|
result.names.push_back(kv.first);
|
||||||
size_t last_separator = kv.first.find_last_of('.');
|
size_t last_separator = kv.first.find_last_of(separator);
|
||||||
if (std::string::npos != last_separator) {
|
if (std::string::npos != last_separator) {
|
||||||
std::string prefix = kv.first.substr(0, last_separator);
|
std::string prefix = kv.first.substr(0, last_separator);
|
||||||
if (std::find(result.prefixes.cbegin(), result.prefixes.cend(), prefix) ==
|
if (std::find(result.prefixes.cbegin(), result.prefixes.cend(), prefix) ==
|
||||||
|
@ -234,8 +236,8 @@ void
|
||||||
NodeParameters::register_param_change_callback(ParametersCallbackFunction callback)
|
NodeParameters::register_param_change_callback(ParametersCallbackFunction callback)
|
||||||
{
|
{
|
||||||
if (parameters_callback_) {
|
if (parameters_callback_) {
|
||||||
fprintf(stderr, "Warning: param_change_callback already registered, "
|
RCUTILS_LOG_WARN("param_change_callback already registered, "
|
||||||
"overwriting previous callback\n");
|
"overwriting previous callback")
|
||||||
}
|
}
|
||||||
parameters_callback_ = callback;
|
parameters_callback_ = callback;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue