15 #include "rclcpp/parameter_value.hpp"
20 using rclcpp::ParameterType;
27 case ParameterType::PARAMETER_NOT_SET:
29 case ParameterType::PARAMETER_BOOL:
31 case ParameterType::PARAMETER_INTEGER:
33 case ParameterType::PARAMETER_DOUBLE:
35 case ParameterType::PARAMETER_STRING:
37 case ParameterType::PARAMETER_BYTE_ARRAY:
39 case ParameterType::PARAMETER_BOOL_ARRAY:
41 case ParameterType::PARAMETER_INTEGER_ARRAY:
42 return "integer_array";
43 case ParameterType::PARAMETER_DOUBLE_ARRAY:
44 return "double_array";
45 case ParameterType::PARAMETER_STRING_ARRAY:
46 return "string_array";
48 return "unknown type";
59 template<
typename ValType,
typename Pr
intType = ValType>
62 const std::vector<ValType> & array,
63 const std::ios::fmtflags format_flags = std::ios::dec)
65 std::stringstream type_array;
66 bool first_item =
true;
68 type_array.setf(format_flags, std::ios_base::basefield | std::ios::boolalpha);
69 type_array << std::showbase;
70 for (
const ValType & value : array) {
76 type_array << static_cast<PrintType>(value);
79 return type_array.str();
86 case ParameterType::PARAMETER_NOT_SET:
88 case ParameterType::PARAMETER_BOOL:
89 return value.get<
bool>() ?
"true" :
"false";
90 case ParameterType::PARAMETER_INTEGER:
91 return std::to_string(value.get<
int>());
92 case ParameterType::PARAMETER_DOUBLE:
93 return std::to_string(value.get<
double>());
94 case ParameterType::PARAMETER_STRING:
95 return value.get<std::string>();
96 case ParameterType::PARAMETER_BYTE_ARRAY:
97 return array_to_string<uint8_t, int>(value.get<std::vector<uint8_t>>(), std::ios::hex);
98 case ParameterType::PARAMETER_BOOL_ARRAY:
99 return array_to_string(value.get<std::vector<bool>>(), std::ios::boolalpha);
100 case ParameterType::PARAMETER_INTEGER_ARRAY:
101 return array_to_string(value.get<std::vector<int64_t>>());
102 case ParameterType::PARAMETER_DOUBLE_ARRAY:
103 return array_to_string(value.get<std::vector<double>>());
104 case ParameterType::PARAMETER_STRING_ARRAY:
105 return array_to_string(value.get<std::vector<std::string>>());
107 return "unknown type";
111 ParameterValue::ParameterValue()
113 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_NOT_SET;
119 switch (value.type) {
121 case PARAMETER_INTEGER:
122 case PARAMETER_DOUBLE:
123 case PARAMETER_STRING:
124 case PARAMETER_BYTE_ARRAY:
125 case PARAMETER_BOOL_ARRAY:
126 case PARAMETER_INTEGER_ARRAY:
127 case PARAMETER_DOUBLE_ARRAY:
128 case PARAMETER_STRING_ARRAY:
129 case PARAMETER_NOT_SET:
133 throw std::runtime_error(
"Unknown type: " + std::to_string(value.type));
139 value_.bool_value = bool_value;
140 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_BOOL;
145 value_.integer_value = int_value;
146 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER;
151 value_.integer_value = int_value;
152 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER;
157 value_.double_value =
static_cast<double>(double_value);
158 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE;
163 value_.double_value = double_value;
164 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE;
169 value_.string_value = string_value;
170 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_STRING;
179 value_.byte_array_value = byte_array_value;
180 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_BYTE_ARRAY;
185 value_.bool_array_value = bool_array_value;
186 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_BOOL_ARRAY;
191 value_.integer_array_value.assign(int_array_value.cbegin(), int_array_value.cend());
192 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER_ARRAY;
197 value_.integer_array_value = int_array_value;
198 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER_ARRAY;
203 value_.double_array_value.assign(float_array_value.cbegin(), float_array_value.cend());
204 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE_ARRAY;
209 value_.double_array_value = double_array_value;
210 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE_ARRAY;
215 value_.string_array_value = string_array_value;
216 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_STRING_ARRAY;
222 return static_cast<ParameterType
>(value_.type);
225 rcl_interfaces::msg::ParameterValue
234 return this->value_ == rhs.value_;
240 return this->value_ != rhs.value_;
Store the type and value of a parameter.
RCLCPP_PUBLIC rcl_interfaces::msg::ParameterValue to_value_msg() const
Return a message populated with the parameter value.
RCLCPP_PUBLIC ParameterType get_type() const
Return an enum indicating the type of the set value.
RCLCPP_PUBLIC bool operator==(const ParameterValue &rhs) const
Equal operator.
RCLCPP_PUBLIC bool operator!=(const ParameterValue &rhs) const
Not equal operator.
RCLCPP_PUBLIC ParameterValue()
Construct a parameter value with type PARAMETER_NOT_SET.
RCLCPP_PUBLIC std::string to_string(const FutureReturnCode &future_return_code)
String conversion function for FutureReturnCode.
RCLCPP_PUBLIC std::ostream & operator<<(std::ostream &os, const FutureReturnCode &future_return_code)
Stream operator for FutureReturnCode.