LeviLamina
Loading...
Searching...
No Matches
SubChunkStorage.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4#include "mc/deps/nbt/CompoundTag.h"
5#include "mc/world/level/BlockDataFetchResult.h"
6#include "mc/world/level/BlockPos.h"
7#include "mc/world/level/block/chunk_volume/VolumeOf.h"
8#include "mc/world/level/chunk/sub_chunk_storage_unit/PruneType.h"
9#include "mc/world/level/chunk/sub_chunk_storage_unit/Type.h"
10
11template <typename T>
13
14template <typename T>
15using RuntimeSerializationLookup = brstd::function_ref<unsigned long(T const&), unsigned long(T const&)>;
16
17template <typename T>
18using PersistentSerializationLookup = brstd::function_ref<CompoundTag const*(T const&), CompoundTag const*(T const&)>;
19
20template <typename T>
21using RuntimeDeserializationLookup = brstd::function_ref<T const*(unsigned long), T const*(unsigned long)>;
22
23template <typename T>
24using PersistentDeserializationLookup = brstd::function_ref<T const*(CompoundTag const&), T const*(CompoundTag const&)>;
25
26template <typename T>
27using GenericPaletteBase = gsl::span<T const*>;
28
29template <typename T>
31public:
32 // NOLINTBEGIN
33 using VolumeView = ChunkVolume::VolumeOf<T>::SubViewType;
34 using ConstVolumeView = ChunkVolume::VolumeOf<T>::ConstSubViewType;
35
36 MCAPI static SubChunkStorageUnit::Type chooseTypeForElementTypeCount(size_t elementCount);
37 MCAPI static std::unique_ptr<SubChunkStorage<T>> makeUniform(T const& element);
38 MCAPI static std::unique_ptr<SubChunkStorage<T>> makeFromVolume(SubChunkStorage<T>::ConstVolumeView const& view);
39
40 virtual ~SubChunkStorage() = default;
41
42 virtual bool isUniform(T const&) const = 0;
43
44 virtual bool isPaletteUniform(T const&) const = 0;
45
46 virtual T const& getElement(uint16_t) const = 0;
47
48 virtual bool trySetElement(uint16_t, T const&) = 0;
49
50 virtual size_t getElementTypeCapacity() const = 0;
51
52 virtual bool hasAvailableElementTypeCapacity() const = 0;
53
54 virtual SubChunkStorageUnit::Type getType() const = 0;
55
56 virtual size_t getMemoryEstimate() const = 0;
57
58 virtual std::unique_ptr<SubChunkStorage<T>> makePrunedCopy(SubChunkStorageUnit::PruneType) const = 0;
59
60 virtual ISubChunkStoragePaletted<T>& asPalettedStorage() = 0;
61
62 virtual ISubChunkStoragePaletted<T> const& asPalettedStorage() const = 0;
63
64 virtual void fetchElementInCylinder(
65 BlockPos const&,
66 BlockPos const&,
67 uint32_t,
68 uint32_t,
69 brstd::function_ref<bool(T const&), bool(T const&)> const&,
70 std::vector<BlockDataFetchResult<T>>&
71 ) const = 0;
72
73 virtual void fetchElementInBox(
74 BlockPos const&,
75 BoundingBox const&,
76 brstd::function_ref<bool(T const&), bool(T const&)> const&,
77 std::vector<BlockDataFetchResult<T>>&
78 ) const = 0;
79
80 virtual bool hasAnyElementMatchingFilterInPalette(std::function<bool(T const&)> const&) const = 0;
81
82 virtual void _serialize(IDataOutput&, RuntimeSerializationLookup<T> const&) const = 0;
83
84 virtual void _serialize(IDataOutput&, PersistentSerializationLookup<T> const&) const = 0;
85
86 // NOLINTEND
87};
Definition BlockDataFetchResult.h:8
Definition BlockPos.h:21
Definition BoundingBox.h:13
Definition CompoundTag.h:23
Definition IDataOutput.h:5
Definition ISubChunkStoragePaletted.h:7
Definition SubChunkStorage.h:30
Definition function_ref.h:60