RTC Toolkit 6.0.0
Loading...
Searching...
No Matches
correlator.hpp
Go to the documentation of this file.
1
11#ifndef RTCTK_TELSUB_CORRELATOR_HPP
12#define RTCTK_TELSUB_CORRELATOR_HPP
13
14#include <memory>
18
19namespace rtctk::telSub {
20
30class Correlator final : public CorrelatorIf {
31public:
32 using Alloc = std::pmr::polymorphic_allocator<std::byte>;
33
37 explicit Correlator(const CorrelatorParams& params,
38 std::unique_ptr<DdsWaitSetIf> dds_subscriber,
40 const Alloc& alloc = {});
41
49 std::optional<CorrelationError>
50 Poll(std::chrono::milliseconds timeout, const DataSamplesView*& samples) noexcept override;
51
52 std::optional<std::uint32_t> GetLastSampleId() const noexcept override {
53 return m_last_correlated_sample;
54 }
55 void Reset() noexcept override;
56
57 void CheckDdsConnections() override;
58
59private:
60 using ClockType = std::chrono::steady_clock;
61 using TimePoint = ClockType::time_point;
62
66 std::optional<CorrelationError> TakeUntil(TimePoint until) noexcept;
67
72 std::optional<CorrelationError>
73 CorrelateFirst(TimePoint until, const DataSamplesView*& samples) noexcept;
74
85 std::optional<CorrelationError>
86 CorrelateSubsequent(TimePoint until, const DataSamplesView*& samples) noexcept;
87
91 void Truncate(AgnosticDataSamples& samples) noexcept;
92
93 log4cplus::Logger& m_logger;
94 CorrelatorParams m_params;
95 std::unique_ptr<DdsWaitSetIf> m_dds_subscriber;
97 AgnosticDataSamples& m_samples;
98 std::optional<std::uint32_t> m_last_correlated_sample;
99 TimePoint m_poll_until_time;
100 DataSamplesView m_view;
101 std::pmr::map<std::string, size_t> m_indices;
102};
103
104} // namespace rtctk::telSub
105
106#endif // RTCTK_TELSUB_CORRELATOR_HPP
Component metrics interface.
Definition componentMetricsIf.hpp:163
Container of DDS samples and associated sample information.
Definition agnosticDataSamples.hpp:75
Interface for correlator implemementations that takes new data samples from DDS and performs correlat...
Definition correlatorIf.hpp:57
std::optional< std::uint32_t > GetLastSampleId() const noexcept override
Definition correlator.hpp:52
std::optional< CorrelationError > Poll(std::chrono::milliseconds timeout, const DataSamplesView *&samples) noexcept override
The strategy is to correlate on existing data, if possible before taking more samples.
Definition correlator.cpp:157
void Reset() noexcept override
Resets internal state.
Definition correlator.cpp:147
std::pmr::polymorphic_allocator< std::byte > Alloc
Definition correlator.hpp:32
Correlator(const CorrelatorParams &params, std::unique_ptr< DdsWaitSetIf > dds_subscriber, componentFramework::ComponentMetricsIf &metrics, const Alloc &alloc={})
Definition correlator.cpp:132
void CheckDdsConnections() override
Definition correlator.cpp:279
Base class abstracting DDS communication code.
Definition ddsWaitSetIf.hpp:90
Header file for ComponentMetricsIf.
Declares CorrelatorIf.
Declares DdsWaitSetIf.
Definition commandReplier.cpp:21
Definition main.cpp:23
std::variant< CorrelationFailedError, DdsWaitSetError > CorrelationError
Definition correlatorIf.hpp:34
Definition ddsSub.hpp:155
Placeholder for correlator parameters.
Definition correlatorIf.hpp:42
A set of correlated agnostic non-owning data samples references.
Definition dataSampleView.hpp:51