漏删除

This commit is contained in:
2026-08-14 12:29:44 +08:00
parent dfb2de6bf7
commit 260f649b08
2 changed files with 0 additions and 113 deletions
@@ -1,52 +0,0 @@
#pragma once
#include <cstddef>
#include <cstdint>
#include <mutex>
#include <optional>
#include <utility>
#include "renderive/base/Concepts.hpp"
#include "renderive/base/observer/Observer.hpp"
#include "Observation.hpp"
#include "base/Real_Time_Data_Base.hpp"
#include "concept/Real_Time_Data.hpp"
#include "renderive/state/Render_State_View.hpp"
template <class Value_Type, Mutex_Type Mutex = std::mutex, class Observer = Observer_State<>>
class Latest_Real_Time_Data : public Real_Time_Data_Base {
public:
using Value = Value_Type;
static_assert(Real_Time_Data_Value<Value>);
static_assert(Timed_Struct_Observer<Observer, Real_Time_Data_Observation>);
explicit Latest_Real_Time_Data(Observer observer = {});
Latest_Real_Time_Data(const Latest_Real_Time_Data&) = delete;
Latest_Real_Time_Data& operator=(const Latest_Real_Time_Data&) = delete;
void update(Value value);
std::optional<Value> snapshot() const;
bool has_value() const;
std::uint64_t revision() const;
Real_Time_Data_Retention retention() const noexcept override;
Real_Time_Data_Update_State update_state() const override;
std::size_t discard_before_time_ns(std::uint64_t time_ns) override;
template <class Target>
requires requires(Observer& observer, Target& target) {
observer.bind(target);
}
decltype(auto) bind(Target& target) {
return observer_.bind(target);
}
private:
friend class Render_State_View;
void publish_render_state() override;
const std::optional<Value>& render_state_value() const noexcept;
mutable Mutex mutex_;
std::recursive_mutex mutation_mutex_;
Observer observer_;
std::optional<Value> states_[3];
std::optional<Value>* render_state_;
std::optional<Value>* cache_state_;
std::optional<Value>* scratch_state_;
std::uint64_t revision_{};
std::uint64_t render_revision_{};
std::uint64_t total_update_count_{};
std::uint64_t last_update_time_ns_{};
};
#include "Latest_Real_Time_Data.inl"
@@ -1,61 +0,0 @@
#pragma once
template <class Value_Type, Mutex_Type Mutex, class Observer>
Latest_Real_Time_Data<Value_Type, Mutex, Observer>::Latest_Real_Time_Data(Observer observer)
: observer_(std::move(observer)), render_state_(&states_[0]), cache_state_(&states_[1]), scratch_state_(&states_[2]) {}
template <class Value_Type, Mutex_Type Mutex, class Observer>
void Latest_Real_Time_Data<Value_Type, Mutex, Observer>::update(Value value) {
std::lock_guard mutation_lock(mutation_mutex_);
Real_Time_Data_Observation observation;
{
std::lock_guard<Mutex> lock(mutex_);
*cache_state_ = std::move(value);
++revision_;
++total_update_count_;
last_update_time_ns_ = observer_.now_ns();
observation = {Real_Time_Data_Observation_Event::updated, {this, Real_Time_Data_Retention::latest, revision_, last_update_time_ns_, total_update_count_, 1}};
}
observer_.observe(observation);
}
template <class Value_Type, Mutex_Type Mutex, class Observer>
auto Latest_Real_Time_Data<Value_Type, Mutex, Observer>::snapshot() const -> std::optional<Value> {
std::lock_guard<Mutex> lock(mutex_);
return *cache_state_;
}
template <class Value_Type, Mutex_Type Mutex, class Observer>
bool Latest_Real_Time_Data<Value_Type, Mutex, Observer>::has_value() const {
std::lock_guard<Mutex> lock(mutex_);
return cache_state_->has_value();
}
template <class Value_Type, Mutex_Type Mutex, class Observer>
std::uint64_t Latest_Real_Time_Data<Value_Type, Mutex, Observer>::revision() const {
std::lock_guard<Mutex> lock(mutex_);
return revision_;
}
template <class Value_Type, Mutex_Type Mutex, class Observer>
Real_Time_Data_Update_State Latest_Real_Time_Data<Value_Type, Mutex, Observer>::update_state() const {
std::lock_guard<Mutex> lock(mutex_);
return {this, Real_Time_Data_Retention::latest, revision_, last_update_time_ns_, total_update_count_, *cache_state_ ? 1U : 0U};
}
template <class Value_Type, Mutex_Type Mutex, class Observer>
void Latest_Real_Time_Data<Value_Type, Mutex, Observer>::publish_render_state() {
std::lock_guard<Mutex> lock(mutex_);
if (render_revision_ == revision_)
return;
*scratch_state_ = *cache_state_;
std::swap(render_state_, scratch_state_);
render_revision_ = revision_;
}
template <class Value_Type, Mutex_Type Mutex, class Observer>
auto Latest_Real_Time_Data<Value_Type, Mutex, Observer>::render_state_value() const noexcept
-> const std::optional<Value>& {
return *render_state_;
}
template <class Value_Type, Mutex_Type Mutex, class Observer>
Real_Time_Data_Retention Latest_Real_Time_Data<Value_Type, Mutex, Observer>::retention() const noexcept {
return Real_Time_Data_Retention::latest;
}
template <class Value_Type, Mutex_Type Mutex, class Observer>
std::size_t Latest_Real_Time_Data<Value_Type, Mutex, Observer>::discard_before_time_ns(std::uint64_t) {
return 0;
}