15 #ifndef RCLCPP__INTRA_PROCESS_MANAGER_HPP_ 16 #define RCLCPP__INTRA_PROCESS_MANAGER_HPP_ 27 #include <unordered_map> 40 namespace intra_process_manager
187 template<
typename MessageT,
typename Alloc>
191 size_t buffer_size = 0)
193 auto id = IntraProcessManager::get_next_unique_id();
194 size_t size = buffer_size > 0 ? buffer_size : publisher->
get_queue_size();
199 impl_->add_publisher(
id, publisher, mrb, size);
249 uint64_t intra_process_publisher_id,
254 uint64_t message_seq = 0;
255 mapped_ring_buffer::MappedRingBufferBase::SharedPtr buffer = impl_->get_publisher_info_for_id(
256 intra_process_publisher_id, message_seq);
263 bool did_replace = typed_buffer->push_and_replace(message_seq, message);
267 impl_->store_intra_process_message(intra_process_publisher_id, message_seq);
313 uint64_t intra_process_publisher_id,
314 uint64_t message_sequence_number,
315 uint64_t requesting_subscriptions_intra_process_id,
322 size_t target_subs_size = 0;
324 mapped_ring_buffer::MappedRingBufferBase::SharedPtr buffer = impl_->take_intra_process_message(
325 intra_process_publisher_id,
326 message_sequence_number,
327 requesting_subscriptions_intra_process_id,
335 if (target_subs_size) {
337 typed_buffer->get_copy_at_key(message_sequence_number, message);
340 typed_buffer->pop_at_key(message_sequence_number, message);
352 get_next_unique_id();
354 IntraProcessManagerImplBase::SharedPtr impl_;
361 #endif // RCLCPP__INTRA_PROCESS_MANAGER_HPP_
std::shared_ptr< MessageAlloc > get_allocator() const
Definition: publisher.hpp:308
#define RCLCPP_DISABLE_COPY(...)
Definition: macros.hpp:26
typename MessageAllocTraits::allocator_type MessageAlloc
Definition: publisher.hpp:159
void remove_subscription(uint64_t intra_process_subscription_id)
Unregister a subscription using the subscription's unique id.
Definition: allocator_common.hpp:24
Ring buffer container of unique_ptr's of T, which can be accessed by a key.
Definition: mapped_ring_buffer.hpp:59
uint64_t add_publisher(typename Publisher< MessageT, Alloc >::SharedPtr publisher, size_t buffer_size=0)
Register a publisher with the manager, returns the publisher unique id.
Definition: intra_process_manager.hpp:189
uint64_t store_intra_process_message(uint64_t intra_process_publisher_id, std::unique_ptr< MessageT, Deleter > &message)
Store a message in the manager, and return the message sequence number.
Definition: intra_process_manager.hpp:248
void take_intra_process_message(uint64_t intra_process_publisher_id, uint64_t message_sequence_number, uint64_t requesting_subscriptions_intra_process_id, std::unique_ptr< MessageT, Deleter > &message)
Take an intra process message.
Definition: intra_process_manager.hpp:312
size_t get_queue_size() const
Get the queue size for this publisher.
IntraProcessManager(IntraProcessManagerImplBase::SharedPtr state=create_default_impl())
void remove_publisher(uint64_t intra_process_publisher_id)
Unregister a publisher using the publisher's unique id.
#define RCLCPP_SMART_PTR_DEFINITIONS(...)
Definition: macros.hpp:36
bool matches_any_publishers(const rmw_gid_t *id) const
Return true if the given rmw_gid_t matches any stored Publishers.
A publisher publishes messages of any type to a topic.
Definition: publisher.hpp:155
T static_pointer_cast(T... args)
This class facilitates intra process communication between nodes.
Definition: intra_process_manager.hpp:122
#define RCLCPP_PUBLIC
Definition: visibility_control.hpp:50
uint64_t add_subscription(SubscriptionBase::SharedPtr subscription)
Register a subscription with the manager, returns subscriptions unique id.
typename std::conditional< std::is_same< typename std::allocator_traits< Alloc >::template rebind_alloc< T >, typename std::allocator< void >::template rebind< T >::other >::value, std::default_delete< T >, AllocatorDeleter< Alloc > >::type Deleter
Definition: allocator_deleter.hpp:101
virtual ~IntraProcessManager()
IntraProcessManagerImplBase::SharedPtr create_default_impl()