12#ifndef RTCTK_TELSUB_SHMPUBLISHER_HPP
13#define RTCTK_TELSUB_SHMPUBLISHER_HPP
15#include <network/optional.hpp>
16#include <system_error>
19#include <ipcq/writer.hpp>
33template <
class UserTopicType,
class DataBlender,
class ShmWriter = ipcq::Writer<UserTopicType>>
60template <
class UserTopicType,
class DataBlender,
class ShmWriter>
62 -> std::unique_ptr<ShmPublisher<UserTopicType, DataBlender, ShmWriter>> {
63 return std::make_unique<ShmPublisher<UserTopicType, DataBlender, ShmWriter>>(
67template <
class UserTopicType,
class DataBlender,
class ShmWriter>
71 static_assert(std::is_invocable_r<std::error_code,
75 "DataBlender must have the signature "
76 "`std::error_code(const rtctk::telSub::DataSamplesView&, "
80template <
class UserTopicType,
class DataBlender,
class ShmWriter>
84 if (
auto err = m_blender(samples, m_topic); !
err) {
85 auto shm_err = m_shm.Write(m_topic, ipcq::Notify::All);
95template <
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
Definition shmPublisher.hpp:34
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:81
ShmPublisher(ShmWriter &&shm_writer, DataBlender &blender)
Definition shmPublisher.hpp:68
void CloseQueue() noexcept override
Close shared memory queue.
Definition shmPublisher.hpp:96
elt::mal::future< std::string > InjectReqRepEvent(StateMachineEngine &engine)
Definition malEventInjector.hpp:23
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:61
A set of correlated agnostic non-owning data samples references.
Definition dataSampleView.hpp:52
Definition shmPublisherIf.hpp:33
Definition shmPublisherIf.hpp:39