12#ifndef RTCTK_TELSUB_SHMPUBLISHER_HPP
13#define RTCTK_TELSUB_SHMPUBLISHER_HPP
15#include <system_error>
18#include <ipcq/writer.hpp>
32template <
class UserTopicType,
class DataBlender,
class ShmWriter = ipcq::Writer<UserTopicType>>
35 ShmPublisher(ShmWriter&& shm_writer, DataBlender& blender);
49 UserTopicType m_topic;
50 DataBlender& m_blender;
59template <
class UserTopicType,
class DataBlender,
class ShmWriter>
61 -> std::unique_ptr<ShmPublisher<UserTopicType, DataBlender, ShmWriter>> {
62 return std::make_unique<ShmPublisher<UserTopicType, DataBlender, ShmWriter>>(
63 std::move(shm_writer), blender);
66template <
class UserTopicType,
class DataBlender,
class ShmWriter>
69 : m_topic(), m_blender(blender), m_shm(std::move(shm_writer)) {
70 static_assert(std::is_invocable_r<std::error_code,
73 UserTopicType&>::value,
74 "DataBlender must have the signature "
75 "`std::error_code(const rtctk::telSub::DataSamplesView&, "
79template <
class UserTopicType,
class DataBlender,
class ShmWriter>
83 if (
auto err = m_blender(samples, m_topic); !err) {
84 return m_shm.Write(m_topic, ipcq::Notify::All);
90template <
class UserTopicType,
class DataBlender,
class ShmWriter>
Simple interface to class that owns the shared memory queue.
Definition: shmPublisherIf.hpp:29
Definition: shmPublisher.hpp:33
ShmPublisher(ShmWriter &&shm_writer, DataBlender &blender)
Definition: shmPublisher.hpp:67
std::error_code Publish(DataSamplesView const &samples) noexcept override
Publish correlated DDS samples to shared memory, transforming it first using DataBlender to a UserTop...
Definition: shmPublisher.hpp:80
void CloseQueue() noexcept override
Close shared memory queue.
Definition: shmPublisher.hpp:91
auto MakeShmPublisher(ShmWriter &&shm_writer, DataBlender &blender) -> std::unique_ptr< ShmPublisher< UserTopicType, DataBlender, ShmWriter > >
Helper that can deduce DataBlender class template argument.
Definition: shmPublisher.hpp:60
A set of correlated agnostic non-owning data samples references.
Definition: dataSampleView.hpp:49