20#ifndef ORES_QT_RECENCY_TRACKER_HPP
21#define ORES_QT_RECENCY_TRACKER_HPP
25#include <unordered_set>
27#include <ores.platform/attributes.hpp>
34template<
typename Entity>
36 auto operator()(
const Entity& e)
const {
72template<
typename Entity,
73 typename KeyExtractor,
85 : key_extractor_(
std::move(key_extractor)),
86 timestamp_extractor_() {}
94 RecencyTracker(KeyExtractor key_extractor, TimestampExtractor timestamp_extractor)
95 : key_extractor_(
std::move(key_extractor)),
96 timestamp_extractor_(
std::move(timestamp_extractor)) {}
107 template<
typename Container>
109 recent_keys_.clear();
111 const QDateTime now = QDateTime::currentDateTime();
114 if (!last_reload_time_.isValid()) {
115 last_reload_time_ = now;
120 for (
const auto& entity : entities) {
121 const auto recorded_at = timestamp_extractor_(entity);
122 if (recorded_at == std::chrono::system_clock::time_point{}) {
126 const auto msecs = std::chrono::duration_cast<std::chrono::milliseconds>(
127 recorded_at.time_since_epoch()).count();
128 QDateTime recorded_dt = QDateTime::fromMSecsSinceEpoch(msecs);
130 if (recorded_dt.isValid() && recorded_dt > last_reload_time_) {
131 recent_keys_.insert(key_extractor_(entity));
135 last_reload_time_ = now;
136 return !recent_keys_.empty();
145 [[nodiscard]]
bool is_recent(
const std::string& key)
const {
146 return recent_keys_.find(key) != recent_keys_.end();
153 return recent_keys_.size();
160 return !recent_keys_.empty();
169 recent_keys_.clear();
178 recent_keys_.clear();
179 last_reload_time_ = QDateTime();
183 KeyExtractor key_extractor_;
184 ORES_NO_UNIQUE_ADDRESS TimestampExtractor timestamp_extractor_;
185 std::unordered_set<std::string> recent_keys_;
186 QDateTime last_reload_time_;
195template<
typename Entity,
typename KeyExtractor>
207template<
typename Entity,
typename KeyExtractor,
typename TimestampExtractor>
209 TimestampExtractor timestamp_extractor) {
211 std::move(key_extractor), std::move(timestamp_extractor));
Qt-based graphical user interface for ORE Studio.
Definition AboutDialog.hpp:35
auto make_recency_tracker(KeyExtractor key_extractor)
Helper function to create a RecencyTracker with type deduction.
Definition RecencyTracker.hpp:196
Default timestamp extractor that accesses .recorded_at member.
Definition RecencyTracker.hpp:35
Tracks recently-modified records for recency highlighting.
Definition RecencyTracker.hpp:75
RecencyTracker(KeyExtractor key_extractor, TimestampExtractor timestamp_extractor)
Construct a RecencyTracker with custom key and timestamp extractors.
Definition RecencyTracker.hpp:94
bool has_recent() const
Check if there are any recent records.
Definition RecencyTracker.hpp:159
bool update(const Container &entities)
Update the set of recent records by comparing timestamps.
Definition RecencyTracker.hpp:108
std::size_t recent_count() const
Get the number of recent records.
Definition RecencyTracker.hpp:152
bool is_recent(const std::string &key) const
Check if a record with the given key is recent.
Definition RecencyTracker.hpp:145
void clear()
Clear the recent records set.
Definition RecencyTracker.hpp:168
void reset()
Reset the tracker completely.
Definition RecencyTracker.hpp:177
RecencyTracker(KeyExtractor key_extractor)
Construct a RecencyTracker with custom key extractor.
Definition RecencyTracker.hpp:84