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