15 #include "rclcpp/parameter_value.hpp"
20 #include "rclcpp/exceptions/exceptions.hpp"
22 using rclcpp::ParameterType;
29 case ParameterType::PARAMETER_NOT_SET:
31 case ParameterType::PARAMETER_BOOL:
33 case ParameterType::PARAMETER_INTEGER:
35 case ParameterType::PARAMETER_DOUBLE:
37 case ParameterType::PARAMETER_STRING:
39 case ParameterType::PARAMETER_BYTE_ARRAY:
41 case ParameterType::PARAMETER_BOOL_ARRAY:
43 case ParameterType::PARAMETER_INTEGER_ARRAY:
44 return "integer_array";
45 case ParameterType::PARAMETER_DOUBLE_ARRAY:
46 return "double_array";
47 case ParameterType::PARAMETER_STRING_ARRAY:
48 return "string_array";
51 return "unknown type";
61 template<
typename ValType,
typename Pr
intType = ValType>
64 const std::vector<ValType> & array,
65 const std::ios::fmtflags format_flags = std::ios::dec)
67 std::stringstream type_array;
68 bool first_item =
true;
70 type_array.setf(format_flags, std::ios_base::basefield | std::ios::boolalpha);
71 type_array << std::showbase;
72 for (
const ValType & value : array) {
78 type_array << static_cast<PrintType>(value);
81 return type_array.str();
88 case ParameterType::PARAMETER_NOT_SET:
90 case ParameterType::PARAMETER_BOOL:
91 return value.get<
bool>() ?
"true" :
"false";
92 case ParameterType::PARAMETER_INTEGER:
93 return std::to_string(value.get<
int>());
94 case ParameterType::PARAMETER_DOUBLE:
95 return std::to_string(value.get<
double>());
96 case ParameterType::PARAMETER_STRING:
97 return value.get<std::string>();
98 case ParameterType::PARAMETER_BYTE_ARRAY:
99 return array_to_string<uint8_t, int>(value.get<std::vector<uint8_t>>(), std::ios::hex);
100 case ParameterType::PARAMETER_BOOL_ARRAY:
101 return array_to_string(value.get<std::vector<bool>>(), std::ios::boolalpha);
102 case ParameterType::PARAMETER_INTEGER_ARRAY:
103 return array_to_string(value.get<std::vector<int64_t>>());
104 case ParameterType::PARAMETER_DOUBLE_ARRAY:
105 return array_to_string(value.get<std::vector<double>>());
106 case ParameterType::PARAMETER_STRING_ARRAY:
107 return array_to_string(value.get<std::vector<std::string>>());
110 return "unknown type";
113 ParameterValue::ParameterValue()
115 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_NOT_SET;
121 switch (value.type) {
123 case PARAMETER_INTEGER:
124 case PARAMETER_DOUBLE:
125 case PARAMETER_STRING:
126 case PARAMETER_BYTE_ARRAY:
127 case PARAMETER_BOOL_ARRAY:
128 case PARAMETER_INTEGER_ARRAY:
129 case PARAMETER_DOUBLE_ARRAY:
130 case PARAMETER_STRING_ARRAY:
131 case PARAMETER_NOT_SET:
140 value_.bool_value = bool_value;
141 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_BOOL;
146 value_.integer_value = int_value;
147 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER;
152 value_.integer_value = int_value;
153 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER;
158 value_.double_value =
static_cast<double>(double_value);
159 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE;
164 value_.double_value = double_value;
165 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE;
170 value_.string_value = string_value;
171 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_STRING;
180 value_.byte_array_value = byte_array_value;
181 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_BYTE_ARRAY;
186 value_.bool_array_value = bool_array_value;
187 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_BOOL_ARRAY;
192 value_.integer_array_value.assign(int_array_value.cbegin(), int_array_value.cend());
193 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER_ARRAY;
198 value_.integer_array_value = int_array_value;
199 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER_ARRAY;
204 value_.double_array_value.assign(float_array_value.cbegin(), float_array_value.cend());
205 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE_ARRAY;
210 value_.double_array_value = double_array_value;
211 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE_ARRAY;
216 value_.string_array_value = string_array_value;
217 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_STRING_ARRAY;
223 return static_cast<ParameterType
>(value_.type);
226 rcl_interfaces::msg::ParameterValue
235 return this->value_ == rhs.value_;
241 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.
Thrown when an unknown type is passed.
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.