15 #include "rclcpp/parameter_value.hpp"
21 #include "rclcpp/exceptions/exceptions.hpp"
23 using rclcpp::ParameterType;
30 case ParameterType::PARAMETER_NOT_SET:
32 case ParameterType::PARAMETER_BOOL:
34 case ParameterType::PARAMETER_INTEGER:
36 case ParameterType::PARAMETER_DOUBLE:
38 case ParameterType::PARAMETER_STRING:
40 case ParameterType::PARAMETER_BYTE_ARRAY:
42 case ParameterType::PARAMETER_BOOL_ARRAY:
44 case ParameterType::PARAMETER_INTEGER_ARRAY:
45 return "integer_array";
46 case ParameterType::PARAMETER_DOUBLE_ARRAY:
47 return "double_array";
48 case ParameterType::PARAMETER_STRING_ARRAY:
49 return "string_array";
52 return "unknown type";
62 template<
typename ValType,
typename Pr
intType = ValType>
65 const std::vector<ValType> & array,
66 const std::ios::fmtflags format_flags = std::ios::dec)
68 std::stringstream type_array;
69 bool first_item =
true;
71 type_array.setf(format_flags, std::ios_base::basefield | std::ios::boolalpha);
72 type_array << std::showbase;
73 for (
const ValType & value : array) {
79 type_array << static_cast<PrintType>(value);
82 return type_array.str();
89 case ParameterType::PARAMETER_NOT_SET:
91 case ParameterType::PARAMETER_BOOL:
92 return value.get<
bool>() ?
"true" :
"false";
93 case ParameterType::PARAMETER_INTEGER:
94 return std::to_string(value.get<
int>());
95 case ParameterType::PARAMETER_DOUBLE:
96 return std::to_string(value.get<
double>());
97 case ParameterType::PARAMETER_STRING:
98 return value.get<std::string>();
99 case ParameterType::PARAMETER_BYTE_ARRAY:
100 return array_to_string<uint8_t, int>(value.get<std::vector<uint8_t>>(), std::ios::hex);
101 case ParameterType::PARAMETER_BOOL_ARRAY:
102 return array_to_string(value.get<std::vector<bool>>(), std::ios::boolalpha);
103 case ParameterType::PARAMETER_INTEGER_ARRAY:
104 return array_to_string(value.get<std::vector<int64_t>>());
105 case ParameterType::PARAMETER_DOUBLE_ARRAY:
106 return array_to_string(value.get<std::vector<double>>());
107 case ParameterType::PARAMETER_STRING_ARRAY:
108 return array_to_string(value.get<std::vector<std::string>>());
111 return "unknown type";
114 ParameterValue::ParameterValue()
116 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_NOT_SET;
122 switch (value.type) {
124 case PARAMETER_INTEGER:
125 case PARAMETER_DOUBLE:
126 case PARAMETER_STRING:
127 case PARAMETER_BYTE_ARRAY:
128 case PARAMETER_BOOL_ARRAY:
129 case PARAMETER_INTEGER_ARRAY:
130 case PARAMETER_DOUBLE_ARRAY:
131 case PARAMETER_STRING_ARRAY:
132 case PARAMETER_NOT_SET:
141 value_.bool_value = bool_value;
142 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_BOOL;
147 value_.integer_value = int_value;
148 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER;
153 value_.integer_value = int_value;
154 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER;
159 value_.double_value =
static_cast<double>(double_value);
160 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE;
165 value_.double_value = double_value;
166 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE;
171 value_.string_value = string_value;
172 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_STRING;
181 value_.byte_array_value = byte_array_value;
182 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_BYTE_ARRAY;
187 value_.bool_array_value = bool_array_value;
188 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_BOOL_ARRAY;
193 value_.integer_array_value.assign(int_array_value.cbegin(), int_array_value.cend());
194 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER_ARRAY;
199 value_.integer_array_value = int_array_value;
200 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_INTEGER_ARRAY;
205 value_.double_array_value.assign(float_array_value.cbegin(), float_array_value.cend());
206 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE_ARRAY;
211 value_.double_array_value = double_array_value;
212 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_DOUBLE_ARRAY;
217 value_.string_array_value = string_array_value;
218 value_.type = rcl_interfaces::msg::ParameterType::PARAMETER_STRING_ARRAY;
224 return static_cast<ParameterType
>(value_.type);
227 rcl_interfaces::msg::ParameterValue
236 return this->value_ == rhs.value_;
242 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.