// Copyright 2015 Open Source Robotics Foundation, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "rclcpp/parameter.hpp"
#include
#include
#include
#include
#include "rclcpp/node_interfaces/node_parameters.hpp"
#include "rclcpp/utilities.hpp"
using rclcpp::ParameterType;
using rclcpp::Parameter;
Parameter::Parameter()
: name_("")
{
}
Parameter::Parameter(const std::string & name)
: name_(name), value_()
{
}
Parameter::Parameter(const std::string & name, const rclcpp::ParameterValue & value)
: name_(name), value_(value)
{
}
Parameter::Parameter(const rclcpp::node_interfaces::ParameterInfo & parameter_info)
: Parameter(parameter_info.descriptor.name, parameter_info.value)
{
}
bool
Parameter::operator==(const Parameter & rhs) const
{
return this->name_ == rhs.name_ && this->value_ == rhs.value_;
}
bool
Parameter::operator!=(const Parameter & rhs) const
{
return !(*this == rhs);
}
ParameterType
Parameter::get_type() const
{
return value_.get_type();
}
std::string
Parameter::get_type_name() const
{
return rclcpp::to_string(get_type());
}
const std::string &
Parameter::get_name() const
{
return name_;
}
rcl_interfaces::msg::ParameterValue
Parameter::get_value_message() const
{
return value_.to_value_msg();
}
const rclcpp::ParameterValue &
Parameter::get_parameter_value() const
{
return value_;
}
bool
Parameter::as_bool() const
{
return get_value<:parameter_bool>();
}
int64_t
Parameter::as_int() const
{
return get_value<:parameter_integer>();
}
double
Parameter::as_double() const
{
return get_value<:parameter_double>();
}
const std::string &
Parameter::as_string() const
{
return get_value<:parameter_string>();
}
const std::vector &
Parameter::as_byte_array() const
{
return get_value<:parameter_byte_array>();
}
const std::vector &
Parameter::as_bool_array() const
{
return get_value<:parameter_bool_array>();
}
const std::vector &
Parameter::as_integer_array() const
{
return get_value<:parameter_integer_array>();
}
const std::vector &
Parameter::as_double_array() const
{
return get_value<:parameter_double_array>();
}
const std::vector<:string> &
Parameter::as_string_array() const
{
return get_value<:parameter_string_array>();
}
Parameter
Parameter::from_parameter_msg(const rcl_interfaces::msg::Parameter & parameter)
{
return Parameter(parameter.name, parameter.value);
}
rcl_interfaces::msg::Parameter
Parameter::to_parameter_msg() const
{
rcl_interfaces::msg::Parameter parameter;
parameter.name = name_;
parameter.value = value_.to_value_msg();
return parameter;
}
std::string
Parameter::value_to_string() const
{
return rclcpp::to_string(value_);
}
std::string
rclcpp::_to_json_dict_entry(const Parameter & param)
{
std::stringstream ss;
ss << "\"" << param.get_name() << "\": ";
ss << "{\"type\": \"" << param.get_type_name() << "\", ";
ss << "\"value\": \"" << param.value_to_string() << "\"}";
return ss.str();
}
std::ostream &
rclcpp::operator<<(std::ostream & os, const rclcpp::Parameter & pv)
{
os << std::to_string(pv);
return os;
}
std::ostream &
rclcpp::operator<<(std::ostream & os, const std::vector & parameters)
{
os << std::to_string(parameters);
return os;
}
std::string
std::to_string(const rclcpp::Parameter & param)
{
std::stringstream ss;
ss << "{\"name\": \"" << param.get_name() << "\", ";
ss << "\"type\": \"" << param.get_type_name() << "\", ";
ss << "\"value\": \"" << param.value_to_string() << "\"}";
return ss.str();
}
std::string
std::to_string(const std::vector<:parameter> & parameters)
{
std::stringstream ss;
ss << "{";
bool first = true;
for (const auto & pv : parameters) {
if (first == false) {
ss << ", ";
} else {
first = false;
}
ss << rclcpp::_to_json_dict_entry(pv);
}
ss << "}";
return ss.str();
}