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/visibility_control.hpp"
29 #include "rclcpp/wait_set_policies/detail/storage_policy_common.hpp"
30 #include "rclcpp/waitable.hpp"
34 namespace wait_set_policies
43 std::size_t NumberOfSubscriptions,
44 std::size_t NumberOfGuardCondtions,
45 std::size_t NumberOfTimers,
46 std::size_t NumberOfClients,
47 std::size_t NumberOfServices,
48 std::size_t NumberOfWaitables
53 using is_mutable = std::false_type;
58 std::shared_ptr<rclcpp::SubscriptionBase> subscription;
63 std::shared_ptr<rclcpp::SubscriptionBase> subscription_in =
nullptr,
65 : subscription(std::move(subscription_in)),
69 using ArrayOfSubscriptions = std::array<
73 using SubscriptionsIterable = ArrayOfSubscriptions;
75 using ArrayOfGuardConditions = std::array<
76 std::shared_ptr<rclcpp::GuardCondition>,
77 NumberOfGuardCondtions
79 using GuardConditionsIterable = ArrayOfGuardConditions;
81 using ArrayOfTimers = std::array<
82 std::shared_ptr<rclcpp::TimerBase>,
85 using TimersIterable = ArrayOfTimers;
87 using ArrayOfClients = std::array<
88 std::shared_ptr<rclcpp::ClientBase>,
91 using ClientsIterable = ArrayOfClients;
93 using ArrayOfServices = std::array<
94 std::shared_ptr<rclcpp::ServiceBase>,
97 using ServicesIterable = ArrayOfServices;
103 std::shared_ptr<rclcpp::Waitable> waitable_in =
nullptr,
104 std::shared_ptr<void> associated_entity_in =
nullptr) noexcept
105 : waitable(std::move(waitable_in)),
106 associated_entity(std::move(associated_entity_in))
109 std::shared_ptr<rclcpp::Waitable> waitable;
110 std::shared_ptr<void> associated_entity;
112 using ArrayOfWaitables = std::array<
116 using WaitablesIterable = ArrayOfWaitables;
118 template<
class ArrayOfExtraGuardConditions>
121 const ArrayOfSubscriptions & subscriptions,
122 const ArrayOfGuardConditions & guard_conditions,
123 const ArrayOfExtraGuardConditions & extra_guard_conditions,
124 const ArrayOfTimers & timers,
125 const ArrayOfClients & clients,
126 const ArrayOfServices & services,
127 const ArrayOfWaitables & waitables,
128 rclcpp::Context::SharedPtr context
130 : StoragePolicyCommon(
133 extra_guard_conditions,
139 subscriptions_(subscriptions),
140 guard_conditions_(guard_conditions),
144 waitables_(waitables)
147 ~StaticStorage() =
default;
149 template<
class ArrayOfExtraGuardConditions>
151 storage_rebuild_rcl_wait_set(
const ArrayOfExtraGuardConditions & extra_guard_conditions)
156 extra_guard_conditions,
163 if(this->needs_pruning_) {
167 throw std::runtime_error(
168 "StaticStorage::storage_rebuild_rcl_wait_set(): entity weak_ptr "
169 "unexpectedly expired in static entity storage");
188 storage_acquire_ownerships()
194 storage_release_ownerships()
199 size_t size_of_subscriptions()
const
201 return subscriptions_.size();
204 size_t size_of_timers()
const
206 return timers_.size();
209 size_t size_of_clients()
const
211 return clients_.size();
214 size_t size_of_services()
const
216 return services_.size();
219 size_t size_of_waitables()
const
221 return waitables_.size();
224 typename ArrayOfSubscriptions::value_type
225 subscriptions(
size_t ii)
const
227 return subscriptions_[ii];
230 typename ArrayOfTimers::value_type
231 timers(
size_t ii)
const
236 typename ArrayOfClients::value_type
237 clients(
size_t ii)
const
242 typename ArrayOfServices::value_type
243 services(
size_t ii)
const
245 return services_[ii];
248 typename ArrayOfWaitables::value_type
249 waitables(
size_t ii)
const
251 return waitables_[ii];
254 const ArrayOfSubscriptions subscriptions_;
255 const ArrayOfGuardConditions guard_conditions_;
256 const ArrayOfTimers timers_;
257 const ArrayOfClients clients_;
258 const ArrayOfServices services_;
259 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.