8 #ifndef RTCKT_TELSUB_SHMPUBLISHER_HPP
9 #define RTCKT_TELSUB_SHMPUBLISHER_HPP
11 #include <system_error>
14 #include <ipcq/writer.hpp>
26 template <
class UserTopicType,
class DataBlender,
class ShmWriter = ipcq::Writer<UserTopicType>>
29 ShmPublisher(ShmWriter&& shm_writer, DataBlender& blender);
42 UserTopicType m_topic;
43 DataBlender& m_blender;
52 template <
class UserTopicType,
class DataBlender,
class ShmWriter>
54 -> std::unique_ptr<ShmPublisher<UserTopicType, DataBlender, ShmWriter>> {
55 return std::make_unique<ShmPublisher<UserTopicType, DataBlender, ShmWriter>>(
56 std::move(shm_writer), blender);
59 template <
class UserTopicType,
class DataBlender,
class ShmWriter>
64 , m_shm(
std::move(shm_writer)) {
65 static_assert(std::is_invocable_r<std::error_code,
68 UserTopicType&>::value,
69 "DataBlender must have the signature "
70 "`std::error_code(const rtctk::telSub::CorrelatedDataSamplesRef&, "
74 template <
class UserTopicType,
class DataBlender,
class ShmWriter>
78 if (
auto err = m_blender(dds_samples, m_topic); !err) {
79 return m_shm.Write(m_topic, ipcq::Notify::All);
85 template <
class UserTopicType,
class DataBlender,
class ShmWriter>
92 #endif // #ifndef RTCKT_TELSUB_SHMPUBLISHER_HPP