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