18class CompoundTag :
public ::Tag {
20 using TagMap = std::map<std::string, CompoundTagVariant, std::less<void>>;
24 using iterator = TagMap::iterator;
25 using const_iterator = TagMap::const_iterator;
26 using reverse_iterator = TagMap::reverse_iterator;
27 using const_reverse_iterator = TagMap::const_reverse_iterator;
29 CompoundTag() =
default;
31 CompoundTag(TagMap tags) : mTags(std::move(tags)) {}
33 CompoundTag(std::initializer_list<TagMap::value_type> tagPairs) : mTags(tagPairs) {}
35 CompoundTag(CompoundTag
const&) =
default;
36 CompoundTag& operator=(CompoundTag
const&) =
default;
37 CompoundTag(CompoundTag&&) =
default;
38 CompoundTag& operator=(CompoundTag&&) =
default;
46 [[nodiscard]]
CompoundTagVariant const& at(std::string_view index)
const {
return operator[](index); }
48 LLNDAPI
static ll::Expected<CompoundTag>
51 LLNDAPI std::string toBinaryNbt(
bool isLittleEndian =
true)
const;
52 LLNDAPI
static ll::Expected<CompoundTag>
53 fromBinaryNbt(std::string_view dataView,
bool isLittleEndian =
true)
noexcept;
55 LLNDAPI std::string toNetworkNbt()
const;
56 LLNDAPI
static ll::Expected<CompoundTag> fromNetworkNbt(std::string
const& data)
noexcept;
58 [[nodiscard]]
size_t size()
const noexcept {
return mTags.size(); }
59 [[nodiscard]]
bool empty()
const noexcept {
return mTags.empty(); }
61 [[nodiscard]]
auto begin()
noexcept;
62 [[nodiscard]]
auto begin()
const noexcept;
63 [[nodiscard]]
auto end()
noexcept;
64 [[nodiscard]]
auto end()
const noexcept;
65 [[nodiscard]]
auto rbegin()
noexcept;
66 [[nodiscard]]
auto rbegin()
const noexcept;
67 [[nodiscard]]
auto rend()
noexcept;
68 [[nodiscard]]
auto rend()
const noexcept;
69 [[nodiscard]]
auto cbegin()
const noexcept;
70 [[nodiscard]]
auto cend()
const noexcept;
71 [[nodiscard]]
auto crbegin()
const noexcept;
72 [[nodiscard]]
auto crend()
const noexcept;
74 bool erase(std::string_view name);
75 void rename(std::string_view name, std::string_view newName);
76 [[nodiscard]]
bool contains(std::string_view name)
const {
return mTags.contains(name); }
77 LLNDAPI
bool contains(std::string_view name, Type type)
const;
82 virtual ~CompoundTag() =
default;
86 virtual ::Bedrock::Result<void> load(
::IDataInput& dis) ;
88 virtual ::Tag::Type getId()
const ;
90 virtual ::std::string toString()
const ;
92 virtual void print(::std::string
const& prefix_,
::PrintStream& out)
const ;
94 virtual ::std::unique_ptr<::Tag> copy()
const ;
96 virtual uint64 hash()
const ;
98 virtual bool equals(::Tag
const& obj)
const ;
104 MCAPI
void append(::CompoundTag
const& tag);
106 MCAPI ::std::unique_ptr<::CompoundTag> clone()
const;
108 MCAPI
void deepCopy(::CompoundTag
const& other);
110 MCFOLD ::Tag
const* get(::std::string_view name)
const;
112 MCFOLD ::Tag* get(::std::string_view name);
114 MCAPI ::std::vector<uchar>
const& getByteArray(::std::string_view name)
const;
116 MCAPI ::Bedrock::Result<void> load(
::IDataInput& dis,
int depth);
118 MCAPI ::Tag& put(::std::string name, ::Tag&& tag);
120 MCAPI ::Tag* put(::std::string name, ::std::unique_ptr<::Tag> tag);
122 MCAPI
void putBoolean(::std::string name,
bool val);
124 MCAPI uchar& putByte(::std::string name, uchar value);
126 MCAPI ::std::vector<uchar>& putByteArray(::std::string name, ::std::vector<uchar> mem);
128 MCAPI ::CompoundTag& putCompound(::std::string name, ::CompoundTag value);
130 MCAPI ::CompoundTag* putCompound(::std::string name, ::std::unique_ptr<::CompoundTag> value);
132 MCAPI
float& putFloat(::std::string name,
float value);
134 MCAPI
int& putInt(::std::string name,
int value);
136 MCAPI int64& putInt64(::std::string name, int64 value);
138 MCAPI
short& putShort(::std::string name,
short value);
140 MCAPI ::std::string& putString(::std::string name, ::std::string value);
142 MCAPI
bool remove(::std::string_view name);
144 MCAPI
void rename(::std::string_view name, ::std::string newName);
154 MCAPI
void* $ctor(::CompoundTag&& rhs);
170 MCFOLD ::Tag::Type $getId()
const;
172 MCAPI ::std::string $toString()
const;
174 MCAPI
void $print(::std::string
const& prefix_,
::PrintStream& out)
const;
176 MCAPI ::std::unique_ptr<::Tag> $copy()
const;
178 MCAPI uint64 $hash()
const;
180 MCAPI
bool $equals(::Tag
const& obj)
const;