15 #include "rclcpp/node_interfaces/node_waitables.hpp"
22 : node_base_(node_base)
25 NodeWaitables::~NodeWaitables()
29 NodeWaitables::add_waitable(
30 rclcpp::Waitable::SharedPtr waitable_ptr,
31 rclcpp::CallbackGroup::SharedPtr group)
36 throw std::runtime_error(
"Cannot create waitable, group not in node.");
42 group->add_waitable(waitable_ptr);
48 group->trigger_notify_guard_condition();
50 throw std::runtime_error(
51 std::string(
"failed to notify wait set on waitable creation: ") + ex.what());
57 rclcpp::Waitable::SharedPtr waitable_ptr,
58 rclcpp::CallbackGroup::SharedPtr group) noexcept
61 if (!node_base_->callback_group_in_node(group)) {
64 group->remove_waitable(waitable_ptr);
66 node_base_->get_default_callback_group()->remove_waitable(waitable_ptr);
RCLCPP_PUBLIC void trigger()
Notify the wait set waiting on this condition, if any, that the condition had been met.
Created when the return code does not match one of the other specialized exceptions.
Pure virtual interface class for the NodeBase part of the Node API.
virtual RCLCPP_PUBLIC bool callback_group_in_node(rclcpp::CallbackGroup::SharedPtr group)=0
Return true if the given callback group is associated with this node.
virtual RCLCPP_PUBLIC rclcpp::CallbackGroup::SharedPtr get_default_callback_group()=0
Return the default callback group.
virtual RCLCPP_PUBLIC rclcpp::GuardCondition & get_notify_guard_condition()=0
Return a guard condition that should be notified when the internal node state changes.
Implementation of the NodeWaitables part of the Node API.
RCLCPP_PUBLIC void remove_waitable(rclcpp::Waitable::SharedPtr waitable_ptr, rclcpp::CallbackGroup::SharedPtr group) noexcept override