载入中...
搜索中...
未找到
Definitions.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5#include "common/Module.h"
6#include "common/Snapshot.h"
10
11#include <cstdint>
12#include <functional>
13#include <memory>
14#include <string>
15#include <string_view>
16#include <vector>
17
18namespace eve::definitions {
19
29
31struct Definition {
32 std::string type;
33 std::string id;
35 // Compatibility projection maintained by VersionedRegistry's generation
36 // projector. The registry slot is the authoritative generation owner.
38 std::string json = "null";
39};
40
50
59public:
64 explicit DefinitionRegistry(eve::PersistentId instanceId = {});
65
66 using ChangeCallback = std::function<void(const DefinitionEvent&)>;
67
72 [[nodiscard]] eve::Result<DefinitionHandle> insert(const std::string& type, const std::string& id, int version,
73 const std::string& json);
74
79 [[nodiscard]] eve::Result<DefinitionHandle> replace(const std::string& type, const std::string& id, int version,
80 const std::string& json);
81
86 [[nodiscard]] eve::Result<DefinitionHandle> remove(const std::string& type, const std::string& id);
87
92 [[nodiscard]] eve::ResultRef<const Definition> resolve(const std::string& type, const std::string& id) const;
93
95 [[nodiscard]] eve::ResultRef<const Definition> resolveHandle(const DefinitionHandle& handle) const;
96
98 [[nodiscard]] eve::Result<DefinitionHandle> handle(const std::string& type, const std::string& id) const;
99
101 [[nodiscard]] eve::Result<eve::Generation> generationOf(const std::string& type, const std::string& id) const;
102
104 [[nodiscard]] bool isTombstone(const std::string& type, const std::string& id) const noexcept;
105
107 [[nodiscard]] bool isStale(const DefinitionHandle& handle) const noexcept;
108
110 DefinitionRef reference(const std::string& type, const std::string& id) const;
112 int size() const;
114 int countType(const std::string& type) const;
116 const Definition* at(int index) const;
118 const Definition* atType(const std::string& type, int index) const;
120 int eventCount() const;
122 const DefinitionEvent* eventAt(int index) const;
124 void clearEvents();
126 std::string snapshotJson() const;
128 [[nodiscard]] eve::Result<void> restoreJson(const std::string& json);
129
135 [[nodiscard]] eve::Result<eve::SnapshotEnvelope> snapshot(const eve::SnapshotHashProvider& hashProvider) const;
136
143 [[nodiscard]] eve::Result<void> restoreSnapshot(const eve::SnapshotEnvelope& snapshot,
144 const eve::SnapshotHashProvider& hashProvider);
145
151 [[nodiscard]] eve::Result<std::string> snapshotEnvelopeJson(const eve::SnapshotHashProvider& hashProvider) const;
152
159 [[nodiscard]] eve::Result<void> restoreSnapshotJson(std::string_view json,
160 const eve::SnapshotHashProvider& hashProvider);
161
177 [[nodiscard("retain Subscription or explicitly dispose it")]] eve::Subscription subscribe(ChangeCallback callback);
178
179private:
180 using Key = std::pair<std::string, std::string>;
181 struct EventData {
182 eve::SchemaVersion version;
183 };
185
186 static DefinitionEvent projectEvent(const Storage::Event& event);
187 static DefinitionHandle projectHandle(const Storage::Handle& handle);
188 static Storage::Handle storageHandle(const DefinitionHandle& handle);
189 void clearEventProjection() const;
190
191 Storage storage_;
192 eve::PersistentId instanceId_;
193 eve::Revision revision_;
195 mutable std::vector<DefinitionEvent> eventProjection_;
196};
197
199class Definitions : public Module {
200public:
203 Definitions() = default;
205 ~Definitions() override = default;
206
209
210private:
211 std::vector<std::unique_ptr<DefinitionRegistry>> registries_;
212};
213
214} // namespace eve::definitions
AuthorityStoreHandleRef reference
Definition Authority.cpp:24
Common identity and hot-reload contract for typed runtime instances.
#define EVENGINE_API_FOUNDATION
每个链接组(link group)各自的导出宏。
Definition Export.h:106
PrimitiveHandle handle
Versioned, integrity-checked persistence envelopes.
float size
Definition TreeMesh.cpp:156
uint32_t index
std::size_t at
Generation-qualified storage for replaceable, non-ECS registry data.
ViewPreparation callback
Stable definition reference backed by LogicalId.
Definition ResourceRef.h:85
EVENGINE_API_FOUNDATION public API.
Definition Module.h:46
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Move-only RAII token that owns one observer registration.
A registry whose live values are qualified by a monotonically increasing runtime generation.
Deterministic registry of topic-neutral, versioned JSON definitions.
Definition Definitions.h:58
std::function< void(const DefinitionEvent &)> ChangeCallback
Definition Definitions.h:66
Script module factory for independent definition registries.
~Definitions() override=default
Releases Definitions resources.
DefinitionRegistry * newRegistry()
Allocates a module-owned definition registry.
Definitions()=default
Constructs a Definitions.
Id128 public API.
Definition Identity.h:112
std::function< Result< ContentId >(std::string_view canonicalInput)> SnapshotHashProvider
Injected content-digest implementation used by snapshots.
Definition Snapshot.h:36
Stable outer format shared by persistence and cross-process snapshots.
Definition Snapshot.h:46
A generation-qualified reference to one definition incarnation.
Registry mutation notification in deterministic sequence order.
Definition Definitions.h:42
One immutable view of a registered versioned JSON definition.
Definition Definitions.h:31
eve::SchemaVersion version
Definition Definitions.h:34