15 #ifndef RCLCPP__WAIT_SET_POLICIES__STATIC_STORAGE_HPP_
16 #define RCLCPP__WAIT_SET_POLICIES__STATIC_STORAGE_HPP_
22 #include "rclcpp/client.hpp"
23 #include "rclcpp/guard_condition.hpp"
24 #include "rclcpp/macros.hpp"
25 #include "rclcpp/service.hpp"
26 #include "rclcpp/subscription_base.hpp"
27 #include "rclcpp/subscription_wait_set_mask.hpp"
28 #include "rclcpp/timer.hpp"
29 #include "rclcpp/visibility_control.hpp"
30 #include "rclcpp/wait_set_policies/detail/storage_policy_common.hpp"
31 #include "rclcpp/waitable.hpp"
35 namespace wait_set_policies
44 std::size_t NumberOfSubscriptions,
45 std::size_t NumberOfGuardCondtions,
46 std::size_t NumberOfTimers,
47 std::size_t NumberOfClients,
48 std::size_t NumberOfServices,
49 std::size_t NumberOfWaitables
54 using is_mutable = std::false_type;
59 std::shared_ptr<rclcpp::SubscriptionBase> subscription;
64 std::shared_ptr<rclcpp::SubscriptionBase> subscription_in =
nullptr,
66 : subscription(std::move(subscription_in)),
70 using ArrayOfSubscriptions = std::array<
74 using SubscriptionsIterable = ArrayOfSubscriptions;
76 using ArrayOfGuardConditions = std::array<
77 std::shared_ptr<rclcpp::GuardCondition>,
78 NumberOfGuardCondtions
80 using GuardConditionsIterable = ArrayOfGuardConditions;
82 using ArrayOfTimers = std::array<
83 std::shared_ptr<rclcpp::TimerBase>,
86 using TimersIterable = ArrayOfTimers;
88 using ArrayOfClients = std::array<
89 std::shared_ptr<rclcpp::ClientBase>,
92 using ClientsIterable = ArrayOfClients;
94 using ArrayOfServices = std::array<
95 std::shared_ptr<rclcpp::ServiceBase>,
98 using ServicesIterable = ArrayOfServices;
104 std::shared_ptr<rclcpp::Waitable> waitable_in =
nullptr,
105 std::shared_ptr<void> associated_entity_in =
nullptr) noexcept
106 : waitable(std::move(waitable_in)),
107 associated_entity(std::move(associated_entity_in))
110 std::shared_ptr<rclcpp::Waitable> waitable;
111 std::shared_ptr<void> associated_entity;
113 using ArrayOfWaitables = std::array<
117 using WaitablesIterable = ArrayOfWaitables;
119 template<
class ArrayOfExtraGuardConditions>
122 const ArrayOfSubscriptions & subscriptions,
123 const ArrayOfGuardConditions & guard_conditions,
124 const ArrayOfExtraGuardConditions & extra_guard_conditions,
125 const ArrayOfTimers & timers,
126 const ArrayOfClients & clients,
127 const ArrayOfServices & services,
128 const ArrayOfWaitables & waitables,
129 rclcpp::Context::SharedPtr context
131 : StoragePolicyCommon(
134 extra_guard_conditions,
140 subscriptions_(subscriptions),
141 guard_conditions_(guard_conditions),
145 waitables_(waitables)
148 ~StaticStorage() =
default;
150 template<
class ArrayOfExtraGuardConditions>
152 storage_rebuild_rcl_wait_set(
const ArrayOfExtraGuardConditions & extra_guard_conditions)
157 extra_guard_conditions,
164 if(this->needs_pruning_) {
168 throw std::runtime_error(
169 "StaticStorage::storage_rebuild_rcl_wait_set(): entity weak_ptr "
170 "unexpectedly expired in static entity storage");
189 storage_acquire_ownerships()
195 storage_release_ownerships()
200 size_t size_of_subscriptions()
const
202 return subscriptions_.size();
205 size_t size_of_timers()
const
207 return timers_.size();
210 size_t size_of_clients()
const
212 return clients_.size();
215 size_t size_of_services()
const
217 return services_.size();
220 size_t size_of_waitables()
const
222 return waitables_.size();
225 typename ArrayOfSubscriptions::value_type
226 subscriptions(
size_t ii)
const
228 return subscriptions_[ii];
231 typename ArrayOfTimers::value_type
232 timers(
size_t ii)
const
237 typename ArrayOfClients::value_type
238 clients(
size_t ii)
const
243 typename ArrayOfServices::value_type
244 services(
size_t ii)
const
246 return services_[ii];
249 typename ArrayOfWaitables::value_type
250 waitables(
size_t ii)
const
252 return waitables_[ii];
255 const ArrayOfSubscriptions subscriptions_;
256 const ArrayOfGuardConditions guard_conditions_;
257 const ArrayOfTimers timers_;
258 const ArrayOfClients clients_;
259 const ArrayOfServices services_;
260 const ArrayOfWaitables waitables_;
Options used to determine what parts of a subscription get added to or removed from a wait set.
SubscriptionEntry(std::shared_ptr< rclcpp::SubscriptionBase > subscription_in=nullptr, rclcpp::SubscriptionWaitSetMask mask_in={})
Conversion constructor, which is intentionally not marked explicit.
WaitSet policy that explicitly provides fixed sized storage only.
Common structure for storage policies, which provides rcl wait set access.
void storage_rebuild_rcl_wait_set_with_sets(const SubscriptionsIterable &subscriptions, const GuardConditionsIterable &guard_conditions, const ExtraGuardConditionsIterable &extra_guard_conditions, const TimersIterable &timers, const ClientsIterable &clients, const ServicesIterable &services, const WaitablesIterable &waitables)
Rebuild the wait set, preparing it for the next wait call.
Versions of rosidl_typesupport_cpp::get_message_type_support_handle that handle adapted types.
WaitableEntry(std::shared_ptr< rclcpp::Waitable > waitable_in=nullptr, std::shared_ptr< void > associated_entity_in=nullptr) noexcept
Conversion constructor, which is intentionally not marked explicit.