31 using Deleter = std::function<void(
void)>;
38 explicit LoanedStateInterface(StateInterface::ConstSharedPtr state_interface, Deleter && deleter)
39 : state_interface_(*state_interface), deleter_(std::forward<Deleter>(deleter))
49 auto logger = rclcpp::get_logger(state_interface_.get_name());
50 RCLCPP_WARN_EXPRESSION(
52 (get_value_statistics_.failed_counter > 0 || get_value_statistics_.timeout_counter > 0),
53 "LoanedStateInterface %s has %u (%.4f %%) timeouts and %u (%.4f %%) missed calls out of %u "
55 state_interface_.get_name().c_str(), get_value_statistics_.timeout_counter,
56 (get_value_statistics_.timeout_counter * 100.0) / get_value_statistics_.total_counter,
57 get_value_statistics_.failed_counter,
58 (get_value_statistics_.failed_counter * 100.0) / get_value_statistics_.total_counter,
59 get_value_statistics_.total_counter);
66 const std::string & get_name()
const {
return state_interface_.get_name(); }
68 const std::string & get_interface_name()
const {
return state_interface_.get_interface_name(); }
70 const std::string & get_prefix_name()
const {
return state_interface_.get_prefix_name(); }
73 "Use std::optional<T> get_optional() instead to retrieve the value. This method will be "
74 "removed by the ROS 2 Lyrical Luth release.")]]
75 double get_value()
const
78 if (opt_value.has_value())
80 return opt_value.value();
84 return std::numeric_limits<double>::quiet_NaN();
102 template <
typename T =
double>
103 [[nodiscard]] std::optional<T>
get_optional(
unsigned int max_tries = 10)
const
105 unsigned int nr_tries = 0;
108 ++get_value_statistics_.total_counter;
109 const std::optional<T> data = state_interface_.
get_optional<T>();
110 if (data.has_value())
114 ++get_value_statistics_.failed_counter;
116 std::this_thread::yield();
117 }
while (nr_tries < max_tries);
119 ++get_value_statistics_.timeout_counter;
140 struct HandleRTStatistics
142 unsigned int total_counter = 0;
143 unsigned int failed_counter = 0;
144 unsigned int timeout_counter = 0;
146 mutable HandleRTStatistics get_value_statistics_;