37class DBChunkStorage :
public ::ChunkSource {
45 enum class ChunkCacheStatus :
int {
51 struct PreCavesAndCliffsMetaData {
61 PreCavesAndCliffsMetaData& operator=(PreCavesAndCliffsMetaData
const&);
62 PreCavesAndCliffsMetaData(PreCavesAndCliffsMetaData
const&);
63 PreCavesAndCliffsMetaData();
69 ::ll::TypedStorage<8, 64, ::std::unordered_map<::DBChunkStorageKey, ::DBChunkStorage::ChunkCacheStatus>>
71 ::ll::TypedStorage<8, 8, ::std::shared_mutex> mHasChunkCacheSharedMutex;
72 ::ll::TypedStorage<8, 64, ::std::unordered_map<::ChunkPos, ::std::pair<bool, ::std::shared_ptr<::BlendingData>>>>
73 mChunkBlendingDataCache;
74 ::ll::TypedStorage<8, 8, ::std::shared_mutex> mChunkBlendingDataSharedMutex;
75 ::ll::TypedStorage<8, 8, ::std::shared_mutex> mAttenuatorSharedMutex;
76 ::ll::TypedStorage<8, 8, ::DBStorage&> mStorage;
77 ::ll::TypedStorage<8, 24, ::std::vector<::std::shared_ptr<::LevelStorageWriteBatch>>> mBufferPool;
78 ::ll::TypedStorage<8, 24, ::std::vector<::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter>>> mDiscardBatch;
79 ::ll::TypedStorage<8, 64, ::std::unordered_set<::ChunkPos>> mLiveChunksBeingSaved;
81 TypedStorage<8, 64, ::std::unordered_map<::ChunkPos, ::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter>>>
82 mDiscardedWhileLiveSaved;
83 ::ll::TypedStorage<1, 1, bool> mBatch;
84 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::TaskGroup>> mIOTaskGroup;
85 ::ll::TypedStorage<8, 32, ::BaseGameVersion> mCurrentLevelVersion;
90 DBChunkStorage& operator=(DBChunkStorage
const&);
91 DBChunkStorage(DBChunkStorage
const&);
97 virtual ~DBChunkStorage() ;
99 virtual void shutdown() ;
101 virtual bool isShutdownDone() ;
103 virtual void loadChunk(
::LevelChunk& lc,
bool forceImmediateReplacementDataLoad) ;
105 virtual bool isChunkKnown(
::ChunkPos const& chunkPos) ;
107 virtual bool isChunkSaved(
::ChunkPos const& chunkPos) ;
115 virtual bool verifyChunkNeedsNeighborAwareUpgrade(
::LevelChunk& lc) ;
119 virtual void deleteAllChunkData(
120 ::std::unordered_set<::ChunkPos> excludedChunks,
121 ::std::function<
void()> completionCallback,
122 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
125 virtual void deleteStoredChunkData(
126 ::std::unordered_set<::ChunkPos> chunksToDelete,
127 ::std::function<
void()> completionCallback,
128 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
133 virtual void writeEntityChunkTransfer(
::LevelChunk& lc) ;
135 virtual void writeEntityChunkTransfersToUnloadedChunk(
137 ::std::vector<::ActorUnloadedChunkTransferEntry>
const& transfers
140 virtual void acquireDiscarded(::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter> ptr) ;
142 virtual void hintDiscardBatchBegin() ;
144 virtual void hintDiscardBatchEnd() ;
146 virtual void flushPendingDiscardedChunkWrites() ;
148 virtual void flushThreadBatch() ;
150 virtual ::std::unique_ptr<::BlendingDataProvider> tryGetBlendingDataProvider() ;
152 virtual ::std::shared_ptr<::LevelChunkMetaDataDictionary> loadLevelChunkMetaDataDictionary() ;
154 virtual void deserializeActorStorageToLevelChunk(
::LevelChunk& levelChunk) ;
156 virtual bool chunkPosNeedsBlending(
::ChunkPos const& cp) ;
162 MCAPI DBChunkStorage(
163 ::std::unique_ptr<::ChunkSource> parent,
169 MCAPI ::std::pair<bool, ::std::shared_ptr<::BlendingData>> _cacheSeamlessChunkBlendingData(
172 ::std::shared_ptr<::BlendingData> blendingData
182 MCAPI
void _deserializeIndependentActorStorage(
::LevelChunk& lc, ::std::string
const& storageKeyDigestBuffer);
184 MCAPI ::std::shared_ptr<::LevelStorageWriteBatch> _getBuffer();
188 MCAPI ::std::optional<::LevelChunkFormat> _getLevelChunkFormat(::std::string_view prefix, ::std::string&
buffer);
196 MCAPI ::std::pair<bool, ::std::unique_ptr<::PersistentBlendData>>
203 MCAPI
void _saveBlendData(
205 ::std::string_view prefix,
213 MCAPI
void _serializeEntities(
217 bool markEntitiesProcesedOnChunkDiscard
220 MCAPI ::std::pair<bool, ::std::shared_ptr<::BlendingData>>
221 _tryGetBlendingDataForChunk(
::ChunkPos const& checkPosition);
223 MCAPI ::std::optional<::DBChunkStorageKey> _tryGetChunkKeyFromString(::std::string_view key);
225 MCAPI ::std::string _upgradeActorStorage(
::ChunkKey chunkKey, ::std::string_view& legacyActorData);
230 MCAPI
void _writeActorDigestFormatVersion(
233 ::ActorDigestFormat formatVersion
236 MCAPI
void _writeDiscardChunksBatch();
238 MCAPI
void freeCaches();
244 MCAPI static ::std::vector<::std::string> _deserializeChunkActorStorageKeys(
::IDataInput& digestStream);
248 MCAPI static ::std::string deserializeActorStorageToString(
249 bool hasActorDigestVersionTag,
250 ::std::string
const& storageKeyDigestBuffer,
251 ::std::function<
bool(::std::string_view, ::std::string&)> loadDataCallback
258 MCAPI static ::LevelStorageWriteBatch& threadBatch();
260 MCAPI static ::std::string& threadBuffer();
279 MCAPI
void $shutdown();
281 MCAPI
bool $isShutdownDone();
283 MCAPI
void $loadChunk(
::LevelChunk& lc,
bool forceImmediateReplacementDataLoad);
285 MCFOLD
bool $isChunkKnown(
::ChunkPos const& chunkPos);
287 MCFOLD
bool $isChunkSaved(
::ChunkPos const& chunkPos);
295 MCAPI
bool $verifyChunkNeedsNeighborAwareUpgrade(
::LevelChunk& lc);
299 MCAPI
void $deleteAllChunkData(
300 ::std::unordered_set<::ChunkPos> excludedChunks,
301 ::std::function<
void()> completionCallback,
302 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
305 MCAPI
void $deleteStoredChunkData(
306 ::std::unordered_set<::ChunkPos> chunksToDelete,
307 ::std::function<
void()> completionCallback,
308 ::std::shared_ptr<::ChunkDeletionMetadata> metadata
315 MCAPI
void $writeEntityChunkTransfersToUnloadedChunk(
317 ::std::vector<::ActorUnloadedChunkTransferEntry>
const& transfers
320 MCAPI
void $acquireDiscarded(::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter> ptr);
322 MCFOLD
void $hintDiscardBatchBegin();
324 MCAPI
void $hintDiscardBatchEnd();
326 MCAPI
void $flushPendingDiscardedChunkWrites();
328 MCAPI
void $flushThreadBatch();
330 MCAPI ::std::unique_ptr<::BlendingDataProvider> $tryGetBlendingDataProvider();
332 MCAPI ::std::shared_ptr<::LevelChunkMetaDataDictionary> $loadLevelChunkMetaDataDictionary();
334 MCAPI
void $deserializeActorStorageToLevelChunk(
::LevelChunk& levelChunk);
336 MCAPI
bool $chunkPosNeedsBlending(
::ChunkPos const& cp);