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/ActorDigestFormat.h"
9#include "mc/world/level/chunk/ChunkSource.h"
10#include "mc/world/level/storage/ConsoleChunkBlender.h"
11#include "mc/world/level/storage/DBChunkStorageKey.h"
12#include "mc/world/level/storage/db_helpers/Category.h"
13
14// auto generated forward declare list
15// clang-format off
16class BaseGameVersion;
17class BlendingData;
19class ChunkKey;
20class ChunkViewSource;
21class DBStorage;
22class Experiments;
23class IDataInput;
24class LevelChunk;
27class Scheduler;
28class TaskGroup;
33// clang-format on
34
35class DBChunkStorage : public ::ChunkSource {
36public:
37 // DBChunkStorage inner types declare
38 // clang-format off
40 // clang-format on
41
42 // DBChunkStorage inner types define
43 enum class ChunkCacheStatus : int {
44 Missing = 0,
45 Available = 1,
46 DontCache = 2,
47 };
48
49 struct PreCavesAndCliffsMetaData {
50 public:
51 // member variables
52 // NOLINTBEGIN
55 // NOLINTEND
56
57 public:
58 // prevent constructor by default
59 PreCavesAndCliffsMetaData& operator=(PreCavesAndCliffsMetaData const&);
60 PreCavesAndCliffsMetaData(PreCavesAndCliffsMetaData const&);
61 PreCavesAndCliffsMetaData();
62 };
63
64public:
65 // member variables
66 // NOLINTBEGIN
67 ::ll::TypedStorage<8, 64, ::std::unordered_map<::DBChunkStorageKey, ::DBChunkStorage::ChunkCacheStatus>>
68 mHasChunkCache;
69 ::ll::TypedStorage<8, 8, ::std::shared_mutex> mHasChunkCacheSharedMutex;
70 ::ll::TypedStorage<8, 64, ::std::unordered_map<::ChunkPos, ::std::pair<bool, ::std::shared_ptr<::BlendingData>>>>
71 mChunkBlendingDataCache;
72 ::ll::TypedStorage<8, 8, ::std::shared_mutex> mChunkBlendingDataSharedMutex;
73 ::ll::TypedStorage<8, 8, ::std::shared_mutex> mAttenuatorSharedMutex;
74 ::ll::TypedStorage<8, 8, ::DBStorage&> mStorage;
75 ::ll::TypedStorage<8, 24, ::std::vector<::std::shared_ptr<::LevelStorageWriteBatch>>> mBufferPool;
76 ::ll::TypedStorage<8, 24, ::std::vector<::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter>>> mDiscardBatch;
77 ::ll::TypedStorage<8, 64, ::std::unordered_set<::ChunkPos>> mLiveChunksBeingSaved;
78 ::ll::
79 TypedStorage<8, 64, ::std::unordered_map<::ChunkPos, ::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter>>>
80 mDiscardedWhileLiveSaved;
81 ::ll::TypedStorage<1, 1, bool> mBatch;
82 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::TaskGroup>> mIOTaskGroup;
83 ::ll::TypedStorage<8, 32, ::BaseGameVersion> mCurrentLevelVersion;
84 // NOLINTEND
85
86public:
87 // prevent constructor by default
88 DBChunkStorage& operator=(DBChunkStorage const&);
89 DBChunkStorage(DBChunkStorage const&);
90 DBChunkStorage();
91
92public:
93 // virtual functions
94 // NOLINTBEGIN
95 virtual ~DBChunkStorage() /*override*/;
96
97 virtual void shutdown() /*override*/;
98
99 virtual bool isShutdownDone() /*override*/;
100
101 virtual void loadChunk(::LevelChunk& lc, bool forceImmediateReplacementDataLoad) /*override*/;
102
103 virtual bool isChunkKnown(::ChunkPos const& chunkPos) /*override*/;
104
105 virtual bool isChunkSaved(::ChunkPos const& chunkPos) /*override*/;
106
107 virtual bool structurePostProcessChunk(::ChunkViewSource& neighborhood) /*override*/;
108
109 virtual bool decorationPostProcessChunk(::ChunkViewSource& neighborhood) /*override*/;
110
111 virtual void checkAndReplaceChunk(::ChunkViewSource& neighborhood, ::LevelChunk& lc) /*override*/;
112
113 virtual bool verifyChunkNeedsNeighborAwareUpgrade(::LevelChunk& lc) /*override*/;
114
115 virtual void neighborAwareChunkUpgrade(::LevelChunk& levelChunk, ::ChunkViewSource& neighborhood) /*override*/;
116
117 virtual void deleteAllChunkData(
118 ::std::unordered_set<::ChunkPos> excludedChunks,
119 ::std::function<void()> completionCallback,
120 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
121 ) /*override*/;
122
123 virtual void deleteStoredChunkData(
124 ::std::unordered_set<::ChunkPos> chunksToDelete,
125 ::std::function<void()> completionCallback,
126 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
127 ) /*override*/;
128
129 virtual bool saveLiveChunk(::LevelChunk& lc) /*override*/;
130
131 virtual void writeEntityChunkTransfer(::LevelChunk& lc) /*override*/;
132
133 virtual void writeEntityChunkTransfersToUnloadedChunk(
134 ::ChunkKey const& chunkKey,
135 ::std::vector<::ActorUnloadedChunkTransferEntry> const& transfers
136 ) /*override*/;
137
138 virtual void acquireDiscarded(::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter> ptr) /*override*/;
139
140 virtual void hintDiscardBatchBegin() /*override*/;
141
142 virtual void hintDiscardBatchEnd() /*override*/;
143
144 virtual void flushPendingDiscardedChunkWrites() /*override*/;
145
146 virtual void flushThreadBatch() /*override*/;
147
148 virtual ::std::unique_ptr<::BlendingDataProvider> tryGetBlendingDataProvider() /*override*/;
149
150 virtual ::std::shared_ptr<::LevelChunkMetaDataDictionary> loadLevelChunkMetaDataDictionary() /*override*/;
151
152 virtual void deserializeActorStorageToLevelChunk(::LevelChunk& levelChunk) /*override*/;
153
154 virtual bool chunkPosNeedsBlending(::ChunkPos const& cp) /*override*/;
155 // NOLINTEND
156
157public:
158 // member functions
159 // NOLINTBEGIN
160 MCAPI DBChunkStorage(
161 ::std::unique_ptr<::ChunkSource> parent,
162 ::DBStorage& storage,
163 ::Scheduler& scheduler,
164 ::Experiments const& experiments
165 );
166
167 MCAPI void _batchDelete(
169 ::std::string const& key,
170 ::DBHelpers::Category category,
171 ::std::string_view reason
172 );
173
174 MCAPI void _batchPut(
176 ::std::string const& key,
177 ::std::string&& buffer,
178 ::DBHelpers::Category category,
179 ::std::string_view reason
180 );
181
182 MCAPI ::std::pair<bool, ::std::shared_ptr<::BlendingData>> _cacheSeamlessChunkBlendingData(
183 ::ChunkPos chunkPos,
184 bool isCompleted,
185 ::std::shared_ptr<::BlendingData> blendingData
186 );
187
188 MCAPI bool
189 _checkSubChunksUseAbsoluteIndices(::DBChunkStorageKey key, ::LevelChunk const& lc, bool& flatworldsNeedFixup) const;
190
191 MCAPI void _deleteChunkEntityData(::DBChunkStorageKey const& key, ::LevelStorageWriteBatch& batch);
192
193 MCAPI void _deserializeIndependentActorStorage(::LevelChunk& lc, ::std::string const& storageKeyDigestBuffer);
194
195 MCAPI bool _hasChunk(::DBChunkStorageKey const& key);
196
197 MCAPI bool _hasChunkUncached(::DBChunkStorageKey const& key);
198
199 MCAPI ::std::pair<bool, ::std::unique_ptr<::PersistentBlendData>>
200 _levelChunkCanBeUsedForBlending(::DBChunkStorageKey const& lcKey);
201
202 MCAPI void _loadAndBlendFromDB(::LevelChunk& lc, ::LevelChunk& generatedChunk, ::ChunkViewSource& neighborhood);
203
204 MCAPI bool _loadChunkFromDB(::LevelChunk& lc, ::LevelChunk& generatedChunk, ::ChunkViewSource& neighborhood);
205
206 MCAPI void _saveBlendData(
208 ::std::string_view prefix,
209 ::std::string& buffer,
211 ) const;
212
213 MCAPI void
214 _serializeChunk(::LevelChunk& lc, ::LevelStorageWriteBatch& batch, bool markEntitiesProcesedOnChunkDiscard);
215
216 MCAPI void _serializeEntities(
217 ::LevelChunk& lc,
219 ::std::string& buffer,
220 bool markEntitiesProcesedOnChunkDiscard
221 );
222
223 MCAPI ::std::pair<bool, ::std::shared_ptr<::BlendingData>>
224 _tryGetBlendingDataForChunk(::ChunkPos const& checkPosition);
225
226 MCAPI ::std::optional<::DBChunkStorageKey> _tryGetChunkKeyFromString(::std::string_view key);
227
228 MCAPI ::std::string _upgradeActorStorage(::ChunkKey chunkKey, ::std::string_view& legacyActorData);
229
230 MCAPI void
231 _writeActorDigest(::LevelStorageWriteBatch& batch, ::ChunkKey const& chunkKey, ::std::string const& digestBuffer);
232
233 MCAPI void _writeActorDigestFormatVersion(
235 ::ChunkKey const& chunkKey,
236 ::ActorDigestFormat formatVersion
237 );
238
239 MCAPI void _writeDiscardChunksBatch();
240 // NOLINTEND
241
242public:
243 // static functions
244 // NOLINTBEGIN
245 MCAPI static ::std::vector<::std::string> _deserializeChunkActorStorageKeys(::IDataInput& digestStream);
246
247 MCAPI static ::ConsoleChunkBlender::BlenderMode
248 _getBlenderMode(::LevelChunk const& lc, ::Experiments const& experiments);
249
250 MCAPI static ::std::string deserializeActorStorageToString(
251 bool hasActorDigestVersionTag,
252 ::std::string const& storageKeyDigestBuffer,
253 ::std::function<bool(::std::string_view, ::std::string&)> loadDataCallback
254 );
255 // NOLINTEND
256
257public:
258 // static variables
259 // NOLINTBEGIN
260 MCAPI static ::LevelStorageWriteBatch& threadBatch();
261
262 MCAPI static ::std::string& threadBuffer();
263 // NOLINTEND
264
265public:
266 // constructor thunks
267 // NOLINTBEGIN
268 MCAPI void* $ctor(
269 ::std::unique_ptr<::ChunkSource> parent,
270 ::DBStorage& storage,
271 ::Scheduler& scheduler,
272 ::Experiments const& experiments
273 );
274 // NOLINTEND
275
276public:
277 // destructor thunk
278 // NOLINTBEGIN
279 MCAPI void $dtor();
280 // NOLINTEND
281
282public:
283 // virtual function thunks
284 // NOLINTBEGIN
285 MCAPI void $shutdown();
286
287 MCAPI bool $isShutdownDone();
288
289 MCAPI void $loadChunk(::LevelChunk& lc, bool forceImmediateReplacementDataLoad);
290
291 MCFOLD bool $isChunkKnown(::ChunkPos const& chunkPos);
292
293 MCFOLD bool $isChunkSaved(::ChunkPos const& chunkPos);
294
295 MCAPI bool $structurePostProcessChunk(::ChunkViewSource& neighborhood);
296
297 MCAPI bool $decorationPostProcessChunk(::ChunkViewSource& neighborhood);
298
299 MCAPI void $checkAndReplaceChunk(::ChunkViewSource& neighborhood, ::LevelChunk& lc);
300
301 MCAPI bool $verifyChunkNeedsNeighborAwareUpgrade(::LevelChunk& lc);
302
303 MCAPI void $neighborAwareChunkUpgrade(::LevelChunk& levelChunk, ::ChunkViewSource& neighborhood);
304
305 MCAPI void $deleteAllChunkData(
306 ::std::unordered_set<::ChunkPos> excludedChunks,
307 ::std::function<void()> completionCallback,
308 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
309 );
310
311 MCAPI void $deleteStoredChunkData(
312 ::std::unordered_set<::ChunkPos> chunksToDelete,
313 ::std::function<void()> completionCallback,
314 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
315 );
316
317 MCAPI bool $saveLiveChunk(::LevelChunk& lc);
318
319 MCAPI void $writeEntityChunkTransfer(::LevelChunk& lc);
320
321 MCAPI void $writeEntityChunkTransfersToUnloadedChunk(
322 ::ChunkKey const& chunkKey,
323 ::std::vector<::ActorUnloadedChunkTransferEntry> const& transfers
324 );
325
326 MCAPI void $acquireDiscarded(::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter> ptr);
327
328 MCAPI void $hintDiscardBatchBegin();
329
330 MCAPI void $hintDiscardBatchEnd();
331
332 MCAPI void $flushPendingDiscardedChunkWrites();
333
334 MCAPI void $flushThreadBatch();
335
336 MCAPI ::std::unique_ptr<::BlendingDataProvider> $tryGetBlendingDataProvider();
337
338 MCAPI ::std::shared_ptr<::LevelChunkMetaDataDictionary> $loadLevelChunkMetaDataDictionary();
339
340 MCAPI void $deserializeActorStorageToLevelChunk(::LevelChunk& levelChunk);
341
342 MCAPI bool $chunkPosNeedsBlending(::ChunkPos const& cp);
343
344
345 // NOLINTEND
346
347public:
348 // vftables
349 // NOLINTBEGIN
350 MCNAPI static void** $vftable();
351 // NOLINTEND
352};
Definition BaseGameVersion.h:8
Definition BlendingDataProvider.h:5
Definition BlendingData.h:5
Definition ChunkKey.h:14
Definition ChunkPos.h:11
Definition ChunkViewSource.h:22
Definition DBChunkStorageKey.h:13
static MCAPI void ** $vftable()
Definition DBStorage.h:40
Definition Experiments.h:14
Definition IDataInput.h:8
Definition LevelChunkMetaDataDictionary.h:11
Definition LevelChunk.h:79
Definition LevelStorageWriteBatch.h:14
Definition Scheduler.h:14
Definition TaskGroup.h:57
Definition ActorUnloadedChunkTransferEntry.h:13
Definition ChunkDeletionMetadata.h:5
Definition DBChunkStorage.h:49
Definition LevelChunkFinalDeleter.h:5
Definition PersistentBlendData.h:8
Definition buffer.h:5
Definition Alias.h:14