50 std::vector<TagShort>,
53 std::vector<TagFloat>,
54 std::vector<TagDouble>,
55 std::vector<TagByteArray>,
56 std::vector<TagString>,
58 std::vector<TagCompound>,
59 std::vector<TagIntArray>,
60 std::vector<TagLongArray>
67 const std::string&
GetName()
const;
81 std::is_same_v<T, TagByte> ||
82 std::is_same_v<T, TagShort> ||
83 std::is_same_v<T, TagInt> ||
84 std::is_same_v<T, TagLong> ||
85 std::is_same_v<T, TagFloat> ||
86 std::is_same_v<T, TagDouble>,
bool
94 std::is_same_v<T, TagByteArray> ||
95 std::is_same_v<T, TagString> ||
96 std::is_same_v<T, TagList> ||
97 std::is_same_v<T, TagCompound> ||
98 std::is_same_v<T, TagIntArray> ||
99 std::is_same_v<T, TagLongArray>,
bool
102 const T&
get()
const;
113 bool contains(
const std::string& s)
const;
157 using std::map<std::string,
Tag>::map;
161 bool contains(
const std::string& s)
const;
175 if constexpr (std::is_same_v<T, TagList>)
177 return std::holds_alternative<ProtocolCraft::Internal::RecursiveWrapper<TagList>>(
val);
179 else if constexpr (std::is_same_v<T, TagCompound>)
181 return std::holds_alternative<ProtocolCraft::Internal::RecursiveWrapper<TagCompound>>(
val);
185 return std::holds_alternative<T>(
val);
195 return is<TagList>() && get<TagList>().is_of<T>();
201 std::is_same_v<T, TagByte> ||
202 std::is_same_v<T, TagShort> ||
203 std::is_same_v<T, TagInt> ||
204 std::is_same_v<T, TagLong> ||
205 std::is_same_v<T, TagFloat> ||
206 std::is_same_v<T, TagDouble>,
bool
211 if (!std::holds_alternative<T>(
val))
213 throw std::runtime_error(
"Trying to get the wrong type from NBT::Tag");
215 return std::get<T>(
val);
221 std::is_same_v<T, TagByteArray> ||
222 std::is_same_v<T, TagString> ||
223 std::is_same_v<T, TagList> ||
224 std::is_same_v<T, TagCompound> ||
225 std::is_same_v<T, TagIntArray> ||
226 std::is_same_v<T, TagLongArray>,
bool
232 if constexpr (std::is_same_v<T, TagCompound>)
236 throw std::runtime_error(
"Trying to get the wrong type from NBT::Tag");
238 return std::get<ProtocolCraft::Internal::RecursiveWrapper<TagCompound>>(
val).
get();
241 else if constexpr (std::is_same_v<T, TagList>)
245 throw std::runtime_error(
"Trying to get the wrong type from NBT::Tag");
247 return std::get<ProtocolCraft::Internal::RecursiveWrapper<TagList>>(
val).
get();
252 if (!std::holds_alternative<T>(
val))
254 throw std::runtime_error(
"Trying to get the wrong type from NBT::Tag");
256 return std::get<T>(
val);
268 throw std::runtime_error(
"Trying to get a list from another NBT::Tag type");
270 return get<TagList>().as_list_of<T>();
281 return std::holds_alternative<std::vector<T>>(
vals);
290 if (!std::holds_alternative<std::vector<T>>(
vals))
292 throw std::runtime_error(
"Trying to get the wrong type from NBT::TagList");
294 return std::get<std::vector<T>>(
vals);
Template magic to have a full type instead of an incomplete one as required for example by std::varia...
Main class, basically a JsonVariant with extra utility functions it doesn't inherit JsonVariant direc...
virtual Json::Value SerializeImpl() const override
virtual void WriteImpl(WriteContainer &container) const override
virtual void ReadImpl(ReadIterator &iter, size_t &length) override
bool contains(const std::string &s) const
const Tag & operator[](const std::string &s) const
virtual Json::Value SerializeImpl() const override
virtual void WriteImpl(WriteContainer &container) const override
virtual void ReadImpl(ReadIterator &iter, size_t &length) override
Internal::TagListVariant vals
const std::vector< T > & as_list_of() const
bool contains(const std::string &s) const
void WriteUnnamedImpl(WriteContainer &container) const
virtual void WriteImpl(WriteContainer &container) const override
virtual void ReadImpl(ReadIterator &iter, size_t &length) override
const std::string & GetName() const
virtual Json::Value SerializeImpl() const override
void ReadUnnamedImpl(ReadIterator &iter, size_t &length)
const Tag & operator[](const std::string &s) const
const std::vector< T > & as_list_of() const
std::variant< TagEnd, TagByte, TagShort, TagInt, TagLong, TagFloat, TagDouble, TagByteArray, TagString, ProtocolCraft::Internal::RecursiveWrapper< TagList >, ProtocolCraft::Internal::RecursiveWrapper< TagCompound >, TagIntArray, TagLongArray > TagVariant
std::variant< std::vector< TagEnd >, std::vector< TagByte >, std::vector< TagShort >, std::vector< TagInt >, std::vector< TagLong >, std::vector< TagFloat >, std::vector< TagDouble >, std::vector< TagByteArray >, std::vector< TagString >, std::vector< TagList >, std::vector< TagCompound >, std::vector< TagIntArray >, std::vector< TagLongArray > > TagListVariant
std::vector< long long int > TagLongArray
std::vector< int > TagIntArray
std::vector< char > TagByteArray
std::vector< unsigned char > WriteContainer
std::vector< unsigned char >::const_iterator ReadIterator