15 #include "rclcpp/memory_strategy.hpp"
20 rclcpp::SubscriptionBase::SharedPtr
21 MemoryStrategy::get_subscription_by_handle(
22 const std::shared_ptr<const rcl_subscription_t> & subscriber_handle,
23 const WeakCallbackGroupsToNodesMap & weak_groups_to_nodes)
25 for (
const auto & pair : weak_groups_to_nodes) {
26 auto group = pair.first.lock();
30 auto match_subscription = group->find_subscription_ptrs_if(
31 [&subscriber_handle](
const rclcpp::SubscriptionBase::SharedPtr & subscription) ->
bool {
32 return subscription->get_subscription_handle() == subscriber_handle;
34 if (match_subscription) {
35 return match_subscription;
41 rclcpp::ServiceBase::SharedPtr
42 MemoryStrategy::get_service_by_handle(
43 const std::shared_ptr<const rcl_service_t> & service_handle,
44 const WeakCallbackGroupsToNodesMap & weak_groups_to_nodes)
46 for (
const auto & pair : weak_groups_to_nodes) {
47 auto group = pair.first.lock();
51 auto service_ref = group->find_service_ptrs_if(
52 [&service_handle](
const rclcpp::ServiceBase::SharedPtr & service) ->
bool {
53 return service->get_service_handle() == service_handle;
62 rclcpp::ClientBase::SharedPtr
63 MemoryStrategy::get_client_by_handle(
64 const std::shared_ptr<const rcl_client_t> & client_handle,
65 const WeakCallbackGroupsToNodesMap & weak_groups_to_nodes)
67 for (
const auto & pair : weak_groups_to_nodes) {
68 auto group = pair.first.lock();
72 auto client_ref = group->find_client_ptrs_if(
73 [&client_handle](
const rclcpp::ClientBase::SharedPtr & client) ->
bool {
74 return client->get_client_handle() == client_handle;
83 rclcpp::TimerBase::SharedPtr
84 MemoryStrategy::get_timer_by_handle(
85 const std::shared_ptr<const rcl_timer_t> & timer_handle,
86 const WeakCallbackGroupsToNodesMap & weak_groups_to_nodes)
88 for (
const auto & pair : weak_groups_to_nodes) {
89 auto group = pair.first.lock();
93 auto timer_ref = group->find_timer_ptrs_if(
94 [&timer_handle](
const rclcpp::TimerBase::SharedPtr & timer) ->
bool {
95 return timer->get_timer_handle() == timer_handle;
104 rclcpp::node_interfaces::NodeBaseInterface::SharedPtr
105 MemoryStrategy::get_node_by_group(
106 const rclcpp::CallbackGroup::SharedPtr & group,
107 const WeakCallbackGroupsToNodesMap & weak_groups_to_nodes)
113 rclcpp::CallbackGroup::WeakPtr weak_group_ptr(group);
114 const auto finder = weak_groups_to_nodes.find(weak_group_ptr);
115 if (finder != weak_groups_to_nodes.end()) {
116 rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_ptr = finder->second.lock();
122 rclcpp::CallbackGroup::SharedPtr
123 MemoryStrategy::get_group_by_subscription(
124 const rclcpp::SubscriptionBase::SharedPtr & subscription,
125 const WeakCallbackGroupsToNodesMap & weak_groups_to_nodes)
127 for (
const auto & pair : weak_groups_to_nodes) {
128 auto group = pair.first.lock();
129 auto node = pair.second.lock();
130 if (!group || !node) {
133 auto match_sub = group->find_subscription_ptrs_if(
134 [&subscription](
const rclcpp::SubscriptionBase::SharedPtr & sub) ->
bool {
135 return sub == subscription;
144 rclcpp::CallbackGroup::SharedPtr
145 MemoryStrategy::get_group_by_service(
146 const rclcpp::ServiceBase::SharedPtr & service,
147 const WeakCallbackGroupsToNodesMap & weak_groups_to_nodes)
149 for (
const auto & pair : weak_groups_to_nodes) {
150 auto group = pair.first.lock();
151 auto node = pair.second.lock();
152 if (!group || !node) {
155 auto service_ref = group->find_service_ptrs_if(
156 [&service](
const rclcpp::ServiceBase::SharedPtr & serv) ->
bool {
157 return serv == service;
166 rclcpp::CallbackGroup::SharedPtr
167 MemoryStrategy::get_group_by_client(
168 const rclcpp::ClientBase::SharedPtr & client,
169 const WeakCallbackGroupsToNodesMap & weak_groups_to_nodes)
171 for (
const auto & pair : weak_groups_to_nodes) {
172 auto group = pair.first.lock();
173 auto node = pair.second.lock();
174 if (!group || !node) {
177 auto client_ref = group->find_client_ptrs_if(
178 [&client](
const rclcpp::ClientBase::SharedPtr & cli) ->
bool {
179 return cli == client;
188 rclcpp::CallbackGroup::SharedPtr
189 MemoryStrategy::get_group_by_timer(
190 const rclcpp::TimerBase::SharedPtr & timer,
191 const WeakCallbackGroupsToNodesMap & weak_groups_to_nodes)
193 for (
const auto & pair : weak_groups_to_nodes) {
194 auto group = pair.first.lock();
195 auto node = pair.second.lock();
196 if (!group || !node) {
199 auto timer_ref = group->find_timer_ptrs_if(
200 [&timer](
const rclcpp::TimerBase::SharedPtr & time) ->
bool {
201 return time == timer;
210 rclcpp::CallbackGroup::SharedPtr
211 MemoryStrategy::get_group_by_waitable(
212 const rclcpp::Waitable::SharedPtr & waitable,
213 const WeakCallbackGroupsToNodesMap & weak_groups_to_nodes)
215 for (
const auto & pair : weak_groups_to_nodes) {
216 auto group = pair.first.lock();
217 auto node = pair.second.lock();
218 if (!group || !node) {
221 auto waitable_ref = group->find_waitable_ptrs_if(
222 [&waitable](
const rclcpp::Waitable::SharedPtr & group_waitable) ->
bool {
223 return group_waitable == waitable;
Delegate for handling memory allocations while the Executor is executing.