LeviLamina
Loading...
Searching...
No Matches
DBChunkStorage.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4
5// auto generated inclusion list
6#include "mc/util/BaseGameVersion.h"
7#include "mc/world/level/ChunkPos.h"
8#include "mc/world/level/chunk/ChunkSource.h"
9#include "mc/world/level/chunk/LevelChunk.h"
10#include "mc/world/level/storage/DBChunkStorageKey.h"
11
12// auto generated forward declare list
13// clang-format off
14class BaseGameVersion;
15class BlendingData;
17class ChunkKey;
18class ChunkViewSource;
19class DBStorage;
20class IDataInput;
21class LevelChunk;
24class TaskGroup;
27struct DimensionType;
30namespace br::worldgen { class StructureInstance; }
31namespace br::worldgen { struct Structure; }
32// clang-format on
33
34class DBChunkStorage : public ::ChunkSource {
35public:
36 // DBChunkStorage inner types declare
37 // clang-format off
39 // clang-format on
40
41 // DBChunkStorage inner types define
42 enum class ChunkCacheStatus : int {
43 Missing = 0,
44 Available = 1,
45 DontCache = 2,
46 };
47
48 struct PreCavesAndCliffsMetaData {
49 public:
50 // member variables
51 // NOLINTBEGIN
54 // NOLINTEND
55
56 public:
57 // prevent constructor by default
58 PreCavesAndCliffsMetaData& operator=(PreCavesAndCliffsMetaData const&);
59 PreCavesAndCliffsMetaData(PreCavesAndCliffsMetaData const&);
60 PreCavesAndCliffsMetaData();
61 };
62
63public:
64 // member variables
65 // NOLINTBEGIN
66 ::ll::TypedStorage<8, 64, ::std::unordered_map<::DBChunkStorageKey, ::DBChunkStorage::ChunkCacheStatus>>
67 mHasChunkCache;
68 ::ll::TypedStorage<8, 8, ::std::shared_mutex> mHasChunkCacheSharedMutex;
69 ::ll::TypedStorage<8, 64, ::std::unordered_map<::ChunkPos, ::std::pair<bool, ::std::shared_ptr<::BlendingData>>>>
70 mChunkBlendingDataCache;
71 ::ll::TypedStorage<8, 8, ::std::shared_mutex> mChunkBlendingDataSharedMutex;
72 ::ll::TypedStorage<8, 8, ::std::shared_mutex> mAttenuatorSharedMutex;
73 ::ll::TypedStorage<8, 8, ::DBStorage&> mStorage;
74 ::ll::TypedStorage<8, 24, ::std::vector<::std::shared_ptr<::LevelStorageWriteBatch>>> mBufferPool;
75 ::ll::TypedStorage<8, 24, ::std::vector<::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter>>> mDiscardBatch;
76 ::ll::TypedStorage<8, 64, ::std::unordered_set<::ChunkPos>> mLiveChunksBeingSaved;
77 ::ll::
78 TypedStorage<8, 64, ::std::unordered_map<::ChunkPos, ::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter>>>
79 mDiscardedWhileLiveSaved;
80 ::ll::TypedStorage<1, 1, bool> mBatch;
81 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::TaskGroup>> mIOTaskGroup;
82 ::ll::TypedStorage<8, 32, ::BaseGameVersion> mCurrentLevelVersion;
83 // NOLINTEND
84
85public:
86 // prevent constructor by default
87 DBChunkStorage& operator=(DBChunkStorage const&);
88 DBChunkStorage(DBChunkStorage const&);
89 DBChunkStorage();
90
91public:
92 // virtual functions
93 // NOLINTBEGIN
94 virtual ~DBChunkStorage() /*override*/ = default;
95
96 virtual void shutdown() /*override*/;
97
98 virtual bool isShutdownDone() /*override*/;
99
100 virtual void loadChunk(::LevelChunk& lc, bool forceImmediateReplacementDataLoad) /*override*/;
101
102 virtual bool isChunkKnown(::ChunkPos const& chunkPos) /*override*/;
103
104 virtual bool isChunkSaved(::ChunkPos const& chunkPos) /*override*/;
105
106 virtual bool structurePostProcessChunk(::ChunkViewSource& neighborhood) /*override*/;
107
108 virtual bool decorationPostProcessChunk(::ChunkViewSource& neighborhood) /*override*/;
109
110 virtual void checkAndReplaceChunk(::ChunkViewSource& neighborhood, ::LevelChunk& lc) /*override*/;
111
112 virtual bool verifyChunkNeedsNeighborAwareUpgrade(::LevelChunk& lc) /*override*/;
113
114 virtual void neighborAwareChunkUpgrade(::LevelChunk& levelChunk, ::ChunkViewSource& neighborhood) /*override*/;
115
116 virtual void deleteAllChunkData(
117 ::std::unordered_set<::ChunkPos> excludedChunks,
118 ::std::function<void()> completionCallback,
119 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
120 ) /*override*/;
121
122 virtual void deleteStoredChunkData(
123 ::std::unordered_set<::ChunkPos> chunksToDelete,
124 ::std::function<void()> completionCallback,
125 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
126 ) /*override*/;
127
128 virtual bool saveLiveChunk(::LevelChunk& lc) /*override*/;
129
130 virtual void writeEntityChunkTransfer(::LevelChunk& lc) /*override*/;
131
132 virtual void writeEntityChunkTransfersToUnloadedChunk(
133 ::ChunkKey const& chunkKey,
134 ::std::vector<::ActorUnloadedChunkTransferEntry> const& transfers
135 ) /*override*/;
136
137 virtual void acquireDiscarded(::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter> ptr) /*override*/;
138
139 virtual void hintDiscardBatchBegin() /*override*/;
140
141 virtual void hintDiscardBatchEnd() /*override*/;
142
143 virtual void flushPendingDiscardedChunkWrites() /*override*/;
144
145 virtual void flushThreadBatch() /*override*/;
146
147 virtual ::std::unique_ptr<::BlendingDataProvider> tryGetBlendingDataProvider() /*override*/;
148
149 virtual ::std::shared_ptr<::LevelChunkMetaDataDictionary> loadLevelChunkMetaDataDictionary() /*override*/;
150
151 virtual void deserializeActorStorageToLevelChunk(::LevelChunk& levelChunk) /*override*/;
152
153 virtual bool chunkPosNeedsBlending(::ChunkPos const& cp) /*override*/;
154
155 virtual ::std::shared_ptr<::br::worldgen::StructureInstance>
156 _tryGetOrLoadStructureInstanceAt(::ChunkPos const& cp, ::br::worldgen::Structure const& structure) /*override*/;
157 // NOLINTEND
158
159public:
160 // member functions
161 // NOLINTBEGIN
162 MCAPI ::std::pair<bool, ::std::shared_ptr<::BlendingData>> _cacheSeamlessChunkBlendingData(
163 ::ChunkPos chunkPos,
164 bool isCompleted,
165 ::std::shared_ptr<::BlendingData> blendingData
166 );
167
168 MCAPI void _deleteChunkEntityData(::DBChunkStorageKey const& key, ::LevelStorageWriteBatch& batch);
169
170 MCAPI void _deserializeIndependentActorStorage(::LevelChunk& lc, ::std::string const& storageKeyDigestBuffer);
171
172 MCAPI ::LevelChunk::Neighbors _getChunkNeighbors(::ChunkPos lc, ::DimensionType dimensionType);
173
174 MCAPI bool _hasChunk(::DBChunkStorageKey const& key);
175
176 MCAPI bool _hasChunkUncached(::DBChunkStorageKey const& key);
177
178 MCAPI bool _loadChunkFromDB(::LevelChunk& lc, ::LevelChunk& generatedChunk, ::ChunkViewSource& neighborhood);
179
180 MCAPI void _saveBlendData(
182 ::std::string_view prefix,
183 ::std::string& buffer,
185 ) const;
186
187 MCAPI void
188 _serializeChunk(::LevelChunk& lc, ::LevelStorageWriteBatch& batch, bool const markEntitiesProcesedOnChunkDiscard);
189
190 MCAPI void _serializeEntities(
191 ::LevelChunk& lc,
193 ::std::string& buffer,
194 bool markEntitiesProcesedOnChunkDiscard
195 );
196
197 MCAPI ::std::string _upgradeActorStorage(::ChunkKey chunkKey, ::std::string_view& legacyActorData);
198
199 MCAPI void _writeDiscardChunksBatch();
200 // NOLINTEND
201
202public:
203 // static functions
204 // NOLINTBEGIN
205 MCAPI static ::std::vector<::std::string> _deserializeChunkActorStorageKeys(::IDataInput& digestStream);
206
207 MCAPI static void
208 _writeActorDigest(::LevelStorageWriteBatch& batch, ::ChunkKey const& chunkKey, ::std::string const& digestBuffer);
209
210 MCAPI static ::std::string deserializeActorStorageToString(
211 bool hasActorDigestVersionTag,
212 ::std::string const& storageKeyDigestBuffer,
213 ::std::function<bool(::std::string_view, ::std::string&)> loadDataCallback
214 );
215 // NOLINTEND
216
217public:
218 // virtual function thunks
219 // NOLINTBEGIN
220#ifdef LL_PLAT_S
221 MCFOLD void $shutdown();
222#else // LL_PLAT_C
223 MCAPI void $shutdown();
224#endif
225
226 MCAPI bool $isShutdownDone();
227
228 MCAPI void $loadChunk(::LevelChunk& lc, bool forceImmediateReplacementDataLoad);
229
230 MCAPI bool $isChunkKnown(::ChunkPos const& chunkPos);
231
232 MCAPI bool $isChunkSaved(::ChunkPos const& chunkPos);
233
234 MCAPI bool $structurePostProcessChunk(::ChunkViewSource& neighborhood);
235
236 MCAPI bool $decorationPostProcessChunk(::ChunkViewSource& neighborhood);
237
238 MCAPI void $checkAndReplaceChunk(::ChunkViewSource& neighborhood, ::LevelChunk& lc);
239
240 MCAPI bool $verifyChunkNeedsNeighborAwareUpgrade(::LevelChunk& lc);
241
242 MCAPI void $neighborAwareChunkUpgrade(::LevelChunk& levelChunk, ::ChunkViewSource& neighborhood);
243
244 MCAPI void $deleteAllChunkData(
245 ::std::unordered_set<::ChunkPos> excludedChunks,
246 ::std::function<void()> completionCallback,
247 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
248 );
249
250 MCAPI void $deleteStoredChunkData(
251 ::std::unordered_set<::ChunkPos> chunksToDelete,
252 ::std::function<void()> completionCallback,
253 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
254 );
255
256 MCAPI bool $saveLiveChunk(::LevelChunk& lc);
257
258 MCAPI void $writeEntityChunkTransfer(::LevelChunk& lc);
259
260 MCAPI void $writeEntityChunkTransfersToUnloadedChunk(
261 ::ChunkKey const& chunkKey,
262 ::std::vector<::ActorUnloadedChunkTransferEntry> const& transfers
263 );
264
265 MCAPI void $acquireDiscarded(::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter> ptr);
266
267 MCAPI void $hintDiscardBatchBegin();
268
269 MCAPI void $hintDiscardBatchEnd();
270
271 MCAPI void $flushPendingDiscardedChunkWrites();
272
273 MCAPI void $flushThreadBatch();
274
275 MCAPI ::std::unique_ptr<::BlendingDataProvider> $tryGetBlendingDataProvider();
276
277 MCAPI ::std::shared_ptr<::LevelChunkMetaDataDictionary> $loadLevelChunkMetaDataDictionary();
278
279 MCAPI void $deserializeActorStorageToLevelChunk(::LevelChunk& levelChunk);
280
281 MCAPI bool $chunkPosNeedsBlending(::ChunkPos const& cp);
282
283 MCAPI ::std::shared_ptr<::br::worldgen::StructureInstance>
284 $_tryGetOrLoadStructureInstanceAt(::ChunkPos const& cp, ::br::worldgen::Structure const& structure);
285
286
287 // NOLINTEND
288};
Definition BaseGameVersion.h:8
Definition BlendingDataProvider.h:5
Definition BlendingData.h:16
Definition ChunkKey.h:9
Definition ChunkPos.h:13
Definition ChunkViewSource.h:22
Definition DBChunkStorageKey.h:8
Definition DBStorage.h:38
Definition IDataInput.h:8
Definition LevelChunkMetaDataDictionary.h:11
Definition LevelChunk.h:77
Definition LevelStorageWriteBatch.h:13
Definition TaskGroup.h:86
Definition StructureInstance.h:20
Definition ActorUnloadedChunkTransferEntry.h:13
Definition ChunkDeletionMetadata.h:5
Definition DBChunkStorage.h:48
Definition DimensionType.h:5
Definition LevelChunkFinalDeleter.h:5
Definition PersistentBlendData.h:5
Definition Structure.h:23
Definition buffer.h:5
Definition Alias.h:14