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/db_helpers/Category.h"
12
13// auto generated forward declare list
14// clang-format off
15class BaseGameVersion;
16class BlendingData;
18class ChunkKey;
19class ChunkViewSource;
21class DBStorage;
22class Experiments;
23class IDataInput;
24class LevelChunk;
27class Scheduler;
28class TaskGroup;
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*/;
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 bool saveLiveChunk(::LevelChunk& lc) /*override*/;
117
118 virtual void writeEntityChunkTransfer(::LevelChunk& levelChunk) /*override*/;
119
120 virtual void writeEntityChunkTransfersToUnloadedChunk(
121 ::ChunkKey const& chunkKey,
122 ::std::vector<::ActorUnloadedChunkTransferEntry> const& transfers
123 ) /*override*/;
124
125 virtual void acquireDiscarded(::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter> ptr) /*override*/;
126
127 virtual void hintDiscardBatchBegin() /*override*/;
128
129 virtual void hintDiscardBatchEnd() /*override*/;
130
131 virtual void flushPendingDiscardedChunkWrites() /*override*/;
132
133 virtual void flushThreadBatch() /*override*/;
134
135 virtual ::std::unique_ptr<::BlendingDataProvider> tryGetBlendingDataProvider() /*override*/;
136
137 virtual ::std::shared_ptr<::LevelChunkMetaDataDictionary> loadLevelChunkMetaDataDictionary() /*override*/;
138
139 virtual void deserializeActorStorageToLevelChunk(::LevelChunk& levelChunk) /*override*/;
140
141 virtual bool chunkPosNeedsBlending(::ChunkPos const& cp) /*override*/;
142 // NOLINTEND
143
144public:
145 // member functions
146 // NOLINTBEGIN
147 MCAPI DBChunkStorage(
148 ::std::unique_ptr<::ChunkSource> parent,
149 ::DBStorage& storage,
150 ::Scheduler& scheduler,
151 ::Experiments const& experiments
152 );
153
154 MCAPI void _batchDelete(
156 ::std::string const& key,
157 ::DBHelpers::Category category,
158 ::std::string_view reason
159 );
160
161 MCAPI void _batchPut(
163 ::std::string const& key,
164 ::std::string&& buffer,
165 ::DBHelpers::Category category,
166 ::std::string_view reason
167 );
168
169 MCAPI ::std::pair<bool, ::std::shared_ptr<::BlendingData>> _cacheSeamlessChunkBlendingData(
170 ::ChunkPos chunkPos,
171 bool isCompleted,
172 ::std::shared_ptr<::BlendingData> blendingData
173 );
174
175 MCAPI bool
176 _checkSubChunksUseAbsoluteIndices(::DBChunkStorageKey key, ::LevelChunk const& lc, bool& flatworldsNeedFixup) const;
177
178 MCAPI void _deserializeIndependentActorStorage(::LevelChunk& lc, ::std::string const& storageKeyDigestBuffer);
179
180 MCAPI bool _hasChunk(::DBChunkStorageKey const& key);
181
182 MCAPI bool _hasChunkUncached(::DBChunkStorageKey const& key);
183
184 MCAPI ::std::pair<bool, ::std::unique_ptr<::PersistentBlendData>>
185 _levelChunkCanBeUsedForBlending(::DBChunkStorageKey const& lcKey);
186
187 MCAPI void _loadAndBlendFromDB(::LevelChunk& lc, ::LevelChunk& generatedChunk, ::ChunkViewSource& neighborhood);
188
189 MCAPI bool _loadChunkFromDB(::LevelChunk& lc, ::LevelChunk& generatedChunk, ::ChunkViewSource& neighborhood);
190
191 MCAPI void _saveBlendData(
193 ::std::string_view prefix,
194 ::std::string& buffer,
196 ) const;
197
198 MCAPI void
199 _serializeChunk(::LevelChunk& lc, ::LevelStorageWriteBatch& batch, bool markEntitiesProcesedOnChunkDiscard);
200
201 MCAPI void _serializeEntities(
202 ::LevelChunk& lc,
204 ::std::string& buffer,
205 bool markEntitiesProcesedOnChunkDiscard
206 );
207
208 MCAPI ::std::pair<bool, ::std::shared_ptr<::BlendingData>>
209 _tryGetBlendingDataForChunk(::ChunkPos const& checkPosition);
210
211 MCAPI ::std::string _upgradeActorStorage(::ChunkKey chunkKey, ::std::string_view& legacyActorData);
212
213 MCAPI void
214 _writeActorDigest(::LevelStorageWriteBatch& batch, ::ChunkKey const& chunkKey, ::std::string const& digestBuffer);
215
216 MCAPI void _writeActorDigestFormatVersion(
218 ::ChunkKey const& chunkKey,
219 ::ActorDigestFormat formatVersion
220 );
221
222 MCAPI void _writeDiscardChunksBatch();
223 // NOLINTEND
224
225public:
226 // static functions
227 // NOLINTBEGIN
228 MCAPI static ::std::vector<::std::string> _deserializeChunkActorStorageKeys(::IDataInput& digestStream);
229
230 MCAPI static ::ConsoleChunkBlender::BlenderMode
231 _getBlenderMode(::LevelChunk const& lc, ::Experiments const& experiments);
232
233 MCAPI static ::std::string deserializeActorStorageToString(
234 bool hasActorDigestVersionTag,
235 ::std::string const& storageKeyDigestBuffer,
236 ::std::function<bool(::std::string_view, ::std::string&)> loadDataCallback
237 );
238 // NOLINTEND
239
240public:
241 // static variables
242 // NOLINTBEGIN
243 MCAPI static ::LevelStorageWriteBatch& threadBatch();
244
245 MCAPI static ::std::string& threadBuffer();
246 // NOLINTEND
247
248public:
249 // constructor thunks
250 // NOLINTBEGIN
251 MCAPI void* $ctor(
252 ::std::unique_ptr<::ChunkSource> parent,
253 ::DBStorage& storage,
254 ::Scheduler& scheduler,
255 ::Experiments const& experiments
256 );
257 // NOLINTEND
258
259public:
260 // destructor thunk
261 // NOLINTBEGIN
262 MCAPI void $dtor();
263 // NOLINTEND
264
265public:
266 // virtual function thunks
267 // NOLINTBEGIN
268 MCAPI void $shutdown();
269
270 MCAPI bool $isShutdownDone();
271
272 MCAPI void $loadChunk(::LevelChunk& lc, bool forceImmediateReplacementDataLoad);
273
274 MCFOLD bool $isChunkKnown(::ChunkPos const& chunkPos);
275
276 MCFOLD bool $isChunkSaved(::ChunkPos const& chunkPos);
277
278 MCAPI bool $structurePostProcessChunk(::ChunkViewSource& neighborhood);
279
280 MCAPI bool $decorationPostProcessChunk(::ChunkViewSource& neighborhood);
281
282 MCAPI void $checkAndReplaceChunk(::ChunkViewSource& neighborhood, ::LevelChunk& lc);
283
284 MCAPI bool $verifyChunkNeedsNeighborAwareUpgrade(::LevelChunk& lc);
285
286 MCAPI void $neighborAwareChunkUpgrade(::LevelChunk& levelChunk, ::ChunkViewSource& neighborhood);
287
288 MCAPI bool $saveLiveChunk(::LevelChunk& lc);
289
290 MCAPI void $writeEntityChunkTransfer(::LevelChunk& levelChunk);
291
292 MCAPI void $writeEntityChunkTransfersToUnloadedChunk(
293 ::ChunkKey const& chunkKey,
294 ::std::vector<::ActorUnloadedChunkTransferEntry> const& transfers
295 );
296
297 MCAPI void $acquireDiscarded(::std::unique_ptr<::LevelChunk, ::LevelChunkFinalDeleter> ptr);
298
299 MCAPI void $hintDiscardBatchBegin();
300
301 MCAPI void $hintDiscardBatchEnd();
302
303 MCAPI void $flushPendingDiscardedChunkWrites();
304
305 MCAPI void $flushThreadBatch();
306
307 MCAPI ::std::unique_ptr<::BlendingDataProvider> $tryGetBlendingDataProvider();
308
309 MCAPI ::std::shared_ptr<::LevelChunkMetaDataDictionary> $loadLevelChunkMetaDataDictionary();
310
311 MCAPI void $deserializeActorStorageToLevelChunk(::LevelChunk& levelChunk);
312
313 MCAPI bool $chunkPosNeedsBlending(::ChunkPos const& cp);
314
315
316 // NOLINTEND
317
318public:
319 // vftables
320 // NOLINTBEGIN
321 MCNAPI static void** $vftable();
322 // NOLINTEND
323};
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:53
Definition ActorUnloadedChunkTransferEntry.h:13
Definition DBChunkStorage.h:48
Definition LevelChunkFinalDeleter.h:5
Definition PersistentBlendData.h:8
Definition buffer.h:5
Definition Alias.h:14