File size: 1,306 Bytes
5412a90 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #pragma once
#include "recovery/RecoveryProxy.hpp"
#include <vector>
#include <mutex>
namespace eunex::persistence {
using recovery::Fragment;
// ββ Abstract persistence interface βββββββββββββββββββββββββββββββββ
class PersistenceStore {
public:
virtual ~PersistenceStore() = default;
virtual void append(const Fragment& frag) = 0;
virtual std::vector<Fragment> readAll() const = 0;
virtual size_t size() const = 0;
virtual void flush() {}
};
// ββ In-memory store (thread-safe, replaces old FragmentStore) ββββββ
class InMemoryStore : public PersistenceStore {
public:
void append(const Fragment& frag) override {
std::lock_guard<std::mutex> lock(mutex_);
fragments_.push_back(frag);
}
std::vector<Fragment> readAll() const override {
std::lock_guard<std::mutex> lock(mutex_);
return fragments_;
}
size_t size() const override {
std::lock_guard<std::mutex> lock(mutex_);
return fragments_.size();
}
void clear() {
std::lock_guard<std::mutex> lock(mutex_);
fragments_.clear();
}
private:
mutable std::mutex mutex_;
std::vector<Fragment> fragments_;
};
} // namespace eunex::persistence
|