12#ifndef RTCTK_TELSUB_AGNOSTICDATASAMPLES_HPP
13#define RTCTK_TELSUB_AGNOSTICDATASAMPLES_HPP
18#include <memory_resource>
20#include <system_error>
21#include <unordered_map>
29using DdsSample = rtctk::componentFramework::AgnosticTopic;
53 virtual std::error_code
ReturnLoan(
const std::string& topic,
82 const size_t m_expected_topic_count;
86 std::pmr::map<std::string, std::pair<DdsSampleSeq, DdsInfoSeq>> m_samples;
90 using Alloc = std::pmr::polymorphic_allocator<std::byte>;
115 return m_samples.size();
127 return m_samples[topic].first;
138 return m_samples.at(topic).first;
163 return {m_samples[topic].first, m_samples[topic].second};
172 inline void Clear(
const std::string& topic)
noexcept;
185 return m_samples.begin();
189 return m_samples.cbegin();
193 return m_samples.end();
197 return m_samples.cend();
207 for (
const auto&
entry : m_samples) {
213 auto&
seq = m_samples.at(topic).first;
214 if (
seq.has_ownership()) {
219 (
void)m_loaner.ReturnLoan(topic,
seq, m_samples[topic].second);
225 for (
const auto& [topic,
sample] : m_samples) {
226 if (
sample.first.length() > 0) {
234 if (m_samples.size() != m_expected_topic_count) {
237 for (
const auto& [topic,
sample] : m_samples) {
238 if (
sample.first.length() == 0) {
Container of DDS samples and associated sample information.
Definition agnosticDataSamples.hpp:77
const_iterator cend()
Definition agnosticDataSamples.hpp:196
std::uint8_t Size() const noexcept
Definition agnosticDataSamples.hpp:114
bool Empty() const noexcept
Definition agnosticDataSamples.hpp:224
~AgnosticDataSamples() noexcept
Definition agnosticDataSamples.hpp:102
std::pmr::polymorphic_allocator< std::byte > Alloc
Definition agnosticDataSamples.hpp:90
iterator begin()
Definition agnosticDataSamples.hpp:184
AgnosticDataSamples(const AgnosticDataSamples &)=delete
bool Full() const noexcept
Definition agnosticDataSamples.hpp:233
iterator end()
Definition agnosticDataSamples.hpp:192
AgnosticDataSamples(SeqLoanerIf &loaner, size_t topic_count, const Alloc &alloc={})
Construct instance with the specified number of topics.
Definition agnosticDataSamples.hpp:99
std::tuple< DdsSampleSeq &, DdsInfoSeq & > GetUpdateRefs(const std::string &topic) noexcept
Get references to objects to be updated with new values.
Definition agnosticDataSamples.hpp:162
AgnosticDataSamples & operator=(const AgnosticDataSamples &)=delete
const DdsSampleSeq & At(const std::string &topic) const
Access sample sequence for topic.
Definition agnosticDataSamples.hpp:137
DdsSampleSeq & operator[](const std::string &topic) noexcept
Access sample sequence for topic topic, will create it if it does not exist.
Definition agnosticDataSamples.hpp:126
void Clear() noexcept
Return samples if not owned and clear all sequences.
Definition agnosticDataSamples.hpp:206
const_iterator cbegin()
Definition agnosticDataSamples.hpp:188
decltype(m_samples)::const_iterator const_iterator
Definition agnosticDataSamples.hpp:182
decltype(m_samples)::iterator iterator
Definition agnosticDataSamples.hpp:181
Loaner interface.
Definition agnosticDataSamples.hpp:40
virtual std::error_code ReturnLoan(const std::string &topic, DdsSampleSeq &samples, DdsInfoSeq &infos) RTCTK_NOEXCEPT=0
Returns loaned sample sequence.
Project-wide configuration header.
#define RTCTK_NOEXCEPT
Definition config.hpp:63
Declares common DDS class.
elt::mal::future< std::string > InjectReqRepEvent(StateMachineEngine &engine)
Definition malEventInjector.hpp:23
rtctk::componentFramework::AgnosticTopicSeq DdsSampleSeq
Definition agnosticDataSamples.hpp:30
rtctk::componentFramework::SampleInfoSeq DdsInfoSeq
Definition agnosticDataSamples.hpp:32
rtctk::componentFramework::AgnosticTopic DdsSample
Definition agnosticDataSamples.hpp:29