15 #ifndef CONCEALER__SUBSCRIBER_WRAPPER_HPP_
16 #define CONCEALER__SUBSCRIBER_WRAPPER_HPP_
19 #include <rclcpp/rclcpp.hpp>
25 template <
typename MessageType, ThreadSafety thread_safety = ThreadSafety::unsafe>
28 typename MessageType::ConstSharedPtr current_value = std::make_shared<const MessageType>();
30 typename rclcpp::Subscription<MessageType>::SharedPtr subscription;
36 return *current_value;
38 return *std::atomic_load(¤t_value);
42 template <
typename NodeInterface>
44 const std::string & topic, NodeInterface & autoware_interface,
45 const std::function<
void(
const MessageType &)> & callback = {})
46 : subscription(autoware_interface.template create_subscription<MessageType>(
47 topic, 1, [
this, callback](
const typename MessageType::ConstSharedPtr message) {
48 if constexpr (thread_safety == ThreadSafety::safe) {
49 std::atomic_store(¤t_value, message);
50 if (current_value and callback) {
51 callback(*std::atomic_load(¤t_value));
54 if (current_value = message; current_value and callback) {
55 callback(*current_value);
Definition: subscriber_wrapper.hpp:27
auto operator()() const -> decltype(auto)
Definition: subscriber_wrapper.hpp:33
SubscriberWrapper(const std::string &topic, NodeInterface &autoware_interface, const std::function< void(const MessageType &)> &callback={})
Definition: subscriber_wrapper.hpp:43
Definition: autoware.hpp:30
ThreadSafety
Definition: subscriber_wrapper.hpp:23
std::string string
Definition: junit5.hpp:26