21#define MU8STR(charLiteralString) (NBT_Type::String(U8TOMU8STR(u8##charLiteralString)))
28#define MU8STRV(charLiteralString) (NBT_Type::String::View(U8TOMU8STR(u8##charLiteralString)))
30template <
bool bIsConst>
38 template <
bool bIsConst>
39 friend class NBT_Node_View;
44 struct TypeListToVariant;
46 template <
typename... Ts>
47 struct TypeListToVariant<
NBT_Type::_TypeList<Ts...>>
49 using type = std::variant<Ts...>;
52 using VariantData = TypeListToVariant<NBT_Type::TypeList>::type;
62 template <
typename T,
typename... Args>
64 explicit NBT_Node(std::in_place_type_t<T>, Args&&... args) : data(std::in_place_type<T>, std::forward<Args>(args)...)
66 static_assert(std::is_constructible_v<VariantData, Args&&...>,
"Invalid constructor arguments for NBT_Node");
74 template <
typename T,
typename U>
76 explicit NBT_Node(std::in_place_type_t<T>, std::initializer_list<U> init_list) : data(std::in_place_type<T>, init_list)
78 static_assert(std::is_constructible_v<VariantData, std::initializer_list<U>>,
"Invalid constructor arguments for NBT_Node");
87 NBT_Node(T &&value) noexcept : data(std::forward<T>(value))
89 static_assert(std::is_constructible_v<VariantData,
decltype(value)>,
"Invalid constructor arguments for NBT_Node");
98 template <
typename T,
typename... Args>
102 static_assert(std::is_constructible_v<VariantData, Args&&...>,
"Invalid constructor arguments for NBT_Node");
104 return data.emplace<T>(std::forward<Args>(args)...);
116 static_assert(std::is_constructible_v<VariantData,
decltype(value)>,
"Invalid constructor arguments for NBT_Node");
118 data = std::forward<T>(value);
144 data = _NBT_Node.data;
153 data = std::move(_NBT_Node.data);
162 return data == _Right.data;
170 return data != _Right.data;
178 return data <=> _Right.data;
202 return std::get<T>(data);
212 return std::get<T>(data);
221 return std::holds_alternative<T>(data);
230#define TYPE_GET_FUNC(type)\
236const NBT_Type::type &Get##type() const\
238 return std::get<NBT_Type::type>(data);\
246NBT_Type::type &Get##type()\
248 return std::get<NBT_Type::type>(data);\
255bool Is##type() const\
257 return std::holds_alternative<NBT_Type::type>(data);\
266friend NBT_Type::type &Get##type(NBT_Node & node)\
268 return node.Get##type();\
277friend const NBT_Type::type &Get##type(const NBT_Node & node)\
279 return node.Get##type();\
287friend bool Is##type(const NBT_Node &node)\
289 return node.Is##type();\
319#define TYPE_SET_FUNC(type)\
325NBT_Type::type &Set##type(const NBT_Type::type &value)\
327 return Set<NBT_Type::type>(value);\
335NBT_Type::type &Set##type(NBT_Type::type &&value)\
337 return Set<NBT_Type::type>(std::move(value));\
344NBT_Type::type &Set##type(void)\
346 return Set<NBT_Type::type>();\
#define TYPE_SET_FUNC(type)
不同类型名接口生成宏
定义 NBT_Node.hpp:294
#define TYPE_GET_FUNC(type)
不同类型名获取接口生成宏
定义 NBT_Node.hpp:230
uint8_t NBT_TAG_RAW_TYPE
NBT_TAG的原始类型,用于二进制读写或判断等
定义 NBT_TAG.hpp:12
NBT_TAG
枚举NBT类型对应的类型标签值
定义 NBT_TAG.hpp:17
@ Int
对应NBT_Type::Int
定义 NBT_TAG.hpp:21
@ Float
对应NBT_Type::Float
定义 NBT_TAG.hpp:23
@ ByteArray
对应NBT_Type::ByteArray
定义 NBT_TAG.hpp:25
@ Short
对应NBT_Type::Short
定义 NBT_TAG.hpp:20
@ Long
对应NBT_Type::Long
定义 NBT_TAG.hpp:22
@ End
对应NBT_Type::End
定义 NBT_TAG.hpp:18
@ LongArray
对应NBT_Type::LongArray
定义 NBT_TAG.hpp:30
@ Byte
对应NBT_Type::Byte
定义 NBT_TAG.hpp:19
@ IntArray
对应NBT_Type::IntArray
定义 NBT_TAG.hpp:29
@ Double
对应NBT_Type::Double
定义 NBT_TAG.hpp:24
NBT节点的视图,用于指向而不持有对象,类似于标准库的std::string与std::string_view的关系
定义 NBT_Node_View.hpp:24
NBT节点,用于存储NBT格式的各种数据类型
定义 NBT_Node.hpp:37
NBT_Node(const NBT_Node &_NBT_Node)
拷贝构造函数
定义 NBT_Node.hpp:131
T & Get()
通过指定类型获取当前存储的数据对象
定义 NBT_Node.hpp:210
NBT_TAG GetTag() const noexcept
获取当前存储的NBT类型的枚举值
定义 NBT_Node.hpp:189
NBT_Node(std::in_place_type_t< T >, Args &&... args)
显式类型构造函数(通过in_place_type_t指定目标类型)
定义 NBT_Node.hpp:64
bool operator!=(const NBT_Node &_Right) const noexcept
不等比较运算符
定义 NBT_Node.hpp:168
NBT_Node()
默认构造函数(构造为TAG_End类型)
定义 NBT_Node.hpp:123
NBT_Node & operator=(const NBT_Node &_NBT_Node)
拷贝赋值运算符
定义 NBT_Node.hpp:142
T & Set(Args &&... args)
原位放置新对象并替换当前对象
定义 NBT_Node.hpp:100
~NBT_Node()=default
默认析构函数
NBT_Node(NBT_Node &&_NBT_Node) noexcept
移动构造函数
定义 NBT_Node.hpp:136
NBT_Node(T &&value) noexcept
通用类型构造函数,可以拷贝或移动元素到对象内
定义 NBT_Node.hpp:87
NBT_Node(std::in_place_type_t< T >, std::initializer_list< U > init_list)
显式类型列表构造函数(通过in_place_type_t指定目标类型)
定义 NBT_Node.hpp:76
NBT_Node & operator=(NBT_Node &&_NBT_Node) noexcept
移动赋值运算符
定义 NBT_Node.hpp:151
bool TypeHolds() const
类型判断
定义 NBT_Node.hpp:219
std::partial_ordering operator<=>(const NBT_Node &_Right) const noexcept
三路比较运算符
定义 NBT_Node.hpp:176
const T & Get() const
通过指定类型获取当前存储的数据对象
定义 NBT_Node.hpp:200
bool operator==(const NBT_Node &_Right) const noexcept
相等比较运算符
定义 NBT_Node.hpp:160
void Clear(void)
清除所有数据,重置为TAG_End类型
定义 NBT_Node.hpp:182
提供NBT类型定义,包括NBT格式中的所有数据类型,以及部分辅助功能,比如静态类型与Tag映射,类型存在查询,类型列表大小,类型最大小值等
定义 NBT_Type.hpp:28
std::monostate End
结束标记类型,无数据
定义 NBT_Type.hpp:47
static constexpr bool IsValidType_V
类型存在检查:用于编译期检查一个给定类型是否为NBT中的类型
定义 NBT_Type.hpp:182