12#ifndef RTCTK_TELSUB_AGNOSTICDATASAMPLES_HPP
13#define RTCTK_TELSUB_AGNOSTICDATASAMPLES_HPP
18#include <memory_resource>
19#include <system_error>
27using DdsSample = rtctk::componentFramework::AgnosticTopic;
30using DdsInfoSeq = rtctk::componentFramework::SampleInfoSeq;
51 virtual std::error_code
76 using Alloc = std::pmr::polymorphic_allocator<std::byte>;
96 inline std::uint8_t
Size() const noexcept {
97 return m_samples.size();
110 assert(idx <
Size());
111 return m_samples[idx];
124 assert(idx <
Size());
125 return m_samples[idx];
139 throw std::out_of_range(
"idx is out of range");
145 inline bool Empty() const noexcept;
150 inline
bool Full() const noexcept;
165 assert(idx <
Size());
166 return {m_samples[idx], m_infos[idx]};
175 inline void Clear(std::uint8_t idx)
noexcept;
182 inline void Clear() noexcept;
202 for (std::uint8_t idx = 0u; idx < m_samples.size(); ++idx) {
207 assert(idx <
Size());
208 auto& seq = m_samples[idx];
209 if (seq.has_ownership()) {
214 (void)m_loaner.
ReturnLoan(idx, seq, m_infos[idx]);
219 for (std::uint8_t idx = 0u; idx <
Size(); ++idx) {
220 if (m_samples[idx].length() > 0) {
228 for (std::uint8_t idx = 0u; idx <
Size(); ++idx) {
229 if (m_samples[idx].length() == 0) {
Container of DDS samples and associated sample information.
Definition: agnosticDataSamples.hpp:74
std::uint8_t Size() const noexcept
Definition: agnosticDataSamples.hpp:96
bool Empty() const noexcept
Definition: agnosticDataSamples.hpp:218
DdsSampleSeq const & At(std::uint8_t idx) const
Access sample sequence idx with bounds checking.
Definition: agnosticDataSamples.hpp:135
~AgnosticDataSamples() noexcept
Definition: agnosticDataSamples.cpp:21
std::pmr::polymorphic_allocator< std::byte > Alloc
Definition: agnosticDataSamples.hpp:76
bool Full() const noexcept
Definition: agnosticDataSamples.hpp:227
DdsSampleSeq & operator[](std::uint8_t idx) noexcept
Access sample sequence at index idx without bounds checking.
Definition: agnosticDataSamples.hpp:123
DdsSampleSeq const & operator[](std::uint8_t idx) const noexcept
Access sample sequence at index idx without bounds checking.
Definition: agnosticDataSamples.hpp:109
void Clear() noexcept
Return samples if not owned and clear all sequences.
Definition: agnosticDataSamples.hpp:201
std::tuple< DdsSampleSeq &, DdsInfoSeq & > GetUpdateRefs(std::uint8_t idx) noexcept
Get references to objects to be updated with new values.
Definition: agnosticDataSamples.hpp:164
Loaner interface.
Definition: agnosticDataSamples.hpp:38
virtual std::error_code ReturnLoan(std::uint8_t idx, 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.
rtctk::componentFramework::AgnosticTopic DdsSample
Definition: agnosticDataSamples.hpp:27
rtctk::componentFramework::SampleInfoSeq DdsInfoSeq
Definition: agnosticDataSamples.hpp:30
rtctk::componentFramework::AgnosticTopicSeq DdsSampleSeq
Definition: agnosticDataSamples.hpp:28