12#ifndef RTCTK_TELSUB_SHMPUBLISHER_HPP
13#define RTCTK_TELSUB_SHMPUBLISHER_HPP
14#include <network/optional.hpp>
15#include <system_error>
17#include <ipcq/writer.hpp>
31template <
class UserTopicType,
class DataBlender,
class ShmWriter = ipcq::Writer<UserTopicType>>
34 ShmPublisher(ShmWriter&& shm_writer, DataBlender& blender);
48 UserTopicType m_topic;
49 DataBlender& m_blender;
58template <
class UserTopicType,
class DataBlender,
class ShmWriter>
60 -> std::unique_ptr<ShmPublisher<UserTopicType, DataBlender, ShmWriter>> {
61 return std::make_unique<ShmPublisher<UserTopicType, DataBlender, ShmWriter>>(
62 std::forward<ShmWriter>(shm_writer), blender);
65template <
class UserTopicType,
class DataBlender,
class ShmWriter>
68 : m_topic(), m_blender(blender), m_shm(
std::move(shm_writer)) {
69 static_assert(std::is_invocable_r_v<std::error_code,
73 "DataBlender must have the signature "
74 "`std::error_code(const rtctk::telSub::DataSamplesView&, "
78template <
class UserTopicType,
class DataBlender,
class ShmWriter>
82 if (
auto err = m_blender(samples, m_topic); !err) {
83 auto shm_err = m_shm.Write(m_topic, ipcq::Notify::All);
93template <
class UserTopicType,
class DataBlender,
class ShmWriter>
Simple interface to class that owns the shared memory queue.
Definition shmPublisherIf.hpp:31
std::variant< std::monostate, BlenderError, ShmError > PublisherError
Definition shmPublisherIf.hpp:45
PublisherError Publish(const DataSamplesView &samples) noexcept override
Publish correlated DDS samples to shared memory, transforming it first using DataBlender to a UserTop...
Definition shmPublisher.hpp:79
ShmPublisher(ShmWriter &&shm_writer, DataBlender &blender)
Definition shmPublisher.hpp:66
void CloseQueue() noexcept override
Close shared memory queue.
Definition shmPublisher.hpp:94
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:59
Definition ddsSub.hpp:156
A set of correlated agnostic non-owning data samples references.
Definition dataSampleView.hpp:52
Definition shmPublisherIf.hpp:33
Definition shmPublisherIf.hpp:39