7#include <unordered_map>
18template <
typename Array>
20template <
typename String,
typename StringView>
22template <
typename List>
24template <
typename Compound>
31 NBT_Type(
void) =
delete;
33 ~NBT_Type(
void) =
delete;
48 using End = std::monostate;
79 template<
typename... Ts>
102 constexpr static inline const char *
const cstrTypeName[] =
132 return cstrTypeName[tagRaw];
171 template <
typename T,
typename List>
174 template <
typename T,
typename... Ts>
175 struct IsValidType<T,
_TypeList<Ts...>> : std::bool_constant<(std::is_same_v<T, Ts> || ...)>
182 template <
typename T>
186 template <
typename T,
typename... Ts>
190 bool bFound = ((std::is_same_v<T, Ts> ? true : (++tagIndex,
false)) || ...);
194 template <
typename T,
typename List>
197 template <
typename T,
typename... Ts>
198 struct TypeTagImpl<T, _TypeList<Ts...>>
208 template <
typename T>
212 template <
typename List>
215 template <
typename... Ts>
218 static constexpr size_t value =
sizeof...(Ts);
230 template <NBT_TAG_RAW_TYPE I,
typename List>
struct TypeAt;
235 using type = std::tuple_element_t<I, std::tuple<Ts...>>;
238 template <NBT_TAG Tag>
250 template <NBT_TAG Tag>
260 template <
typename T>
262 std::is_same_v<std::remove_cvref_t<T>,
Byte> ||
263 std::is_same_v<std::remove_cvref_t<T>,
Short> ||
264 std::is_same_v<std::remove_cvref_t<T>,
Int> ||
265 std::is_same_v<std::remove_cvref_t<T>,
Long> ||
266 std::is_same_v<std::remove_cvref_t<T>,
Float> ||
267 std::is_same_v<std::remove_cvref_t<T>,
Double>;
272 template <
typename T>
274 std::is_same_v<std::remove_cvref_t<T>,
Byte> ||
275 std::is_same_v<std::remove_cvref_t<T>,
Short> ||
276 std::is_same_v<std::remove_cvref_t<T>,
Int> ||
277 std::is_same_v<std::remove_cvref_t<T>,
Long>;
282 template <
typename T>
284 std::is_same_v<std::remove_cvref_t<T>,
Float> ||
285 std::is_same_v<std::remove_cvref_t<T>,
Double>;
290 template <
typename T>
292 std::is_same_v<std::remove_cvref_t<T>,
ByteArray> ||
293 std::is_same_v<std::remove_cvref_t<T>,
IntArray> ||
294 std::is_same_v<std::remove_cvref_t<T>,
LongArray>;
299 template <
typename T>
301 std::is_same_v<std::remove_cvref_t<T>,
ByteArray> ||
302 std::is_same_v<std::remove_cvref_t<T>,
IntArray> ||
303 std::is_same_v<std::remove_cvref_t<T>,
LongArray> ||
304 std::is_same_v<std::remove_cvref_t<T>,
List> ||
305 std::is_same_v<std::remove_cvref_t<T>,
Compound>;
310 template <
typename T>
312 std::is_same_v<std::remove_cvref_t<T>,
String>;
317 template <
typename T>
319 std::is_same_v<std::remove_cvref_t<T>,
List>;
324 template <
typename T>
326 std::is_same_v<std::remove_cvref_t<T>,
Compound>;
333 struct BuiltinRawType
468 using Type = Float_Raw;
469 static_assert(
sizeof(Type) ==
sizeof(
Float),
"Type size does not match!");
475 using Type = Double_Raw;
476 static_assert(
sizeof(Type) ==
sizeof(
Double),
"Type size does not match!");
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
@ Compound
对应NBT_Type::Compound
定义 NBT_TAG.hpp:28
@ String
对应NBT_Type::String
定义 NBT_TAG.hpp:26
@ ByteArray
对应NBT_Type::ByteArray
定义 NBT_TAG.hpp:25
@ Short
对应NBT_Type::Short
定义 NBT_TAG.hpp:20
@ List
对应NBT_Type::List
定义 NBT_TAG.hpp:27
@ Long
对应NBT_Type::Long
定义 NBT_TAG.hpp:22
@ 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
@ ENUM_END
枚举结束标记,用于计算enum元素个数,范围判断等
定义 NBT_TAG.hpp:31
继承自标准库std::vector的代理类。 无特殊成员,构造与使用方式与标准库std::vector一致。
定义 NBT_Array.hpp:18
继承自标准库std::unordered_map的代理类,用于存储和管理NBT键值对
定义 NBT_Compound.hpp:23
继承自标准库容器的代理类,用于存储和管理NBT列表
定义 NBT_List.hpp:23
NBT节点,用于存储NBT格式的各种数据类型
定义 NBT_Node.hpp:37
继承自标准库std::basic_string的代理类,用于存储、处理与转换Modified-UTF-8字符串
定义 NBT_String.hpp:111
提供NBT类型定义,包括NBT格式中的所有数据类型,以及部分辅助功能,比如静态类型与Tag映射,类型存在查询,类型列表大小,类型最大小值等
定义 NBT_Type.hpp:29
static constexpr StringLength StringLength_Min
字符串长度类型最小值
定义 NBT_Type.hpp:148
int8_t Byte
8位有符号整数
定义 NBT_Type.hpp:49
static constexpr bool IsStringType_V
判断类型是否为NBT String类型
定义 NBT_Type.hpp:311
static constexpr Int Int_Min
整数类型最小值
定义 NBT_Type.hpp:164
typename TagToType< Tag >::type TagToType_T
从NBT_TAG获取对应的类型:编译期从NBT_TAG的enum值获取类型
定义 NBT_Type.hpp:251
static constexpr bool IsNumericType_V
判断类型是否为NBT数值类型(包含所有整数和浮点数类型)
定义 NBT_Type.hpp:261
std::monostate End
结束标记类型,无数据
定义 NBT_Type.hpp:48
static constexpr Byte Byte_Min
字节类型最小值
定义 NBT_Type.hpp:158
static constexpr Short Short_Min
短整数类型形最小值
定义 NBT_Type.hpp:161
int32_t ArrayLength
数组长度类型
定义 NBT_Type.hpp:137
int16_t Short
16位有符号整数
定义 NBT_Type.hpp:50
static constexpr bool IsContainerTag(NBT_TAG tag) noexcept
判断给定的NBT_TAG是否对应容器类型(包含List、Compound和所有数组类型)
定义 NBT_Type.hpp:420
static constexpr size_t TypeListSize_V
类型列表大小:获取NBT类型的个数
定义 NBT_Type.hpp:224
static constexpr StringLength StringLength_Max
字符串长度类型最大值
定义 NBT_Type.hpp:147
static constexpr Byte Byte_Max
字节类型最大值
定义 NBT_Type.hpp:157
static constexpr bool IsIntegerType_V
判断类型是否为NBT整数类型(包含所有整数类型)
定义 NBT_Type.hpp:273
static constexpr bool IsCompoundType_V
判断类型是否为NBT Compound类型
定义 NBT_Type.hpp:325
static constexpr bool IsContainerType_V
判断类型是否为NBT容器类型(包含List、Compound和所有数组类型)
定义 NBT_Type.hpp:300
uint64_t Double_Raw
Double 类型的原始表示,用于在平台不支持或需要二进制读写时使用
定义 NBT_Type.hpp:40
NBT_String< MUTF8_String, MUTF8_String_View > String
字符串类型,存储Java M-UTF-8字符串
定义 NBT_Type.hpp:65
static constexpr ArrayLength ArrayLength_Min
数组长度类型最小值
定义 NBT_Type.hpp:145
static constexpr bool IsFloatingTag(NBT_TAG tag) noexcept
判断给定的NBT_TAG是否对应浮点数类型(包含所有浮点数类型)
定义 NBT_Type.hpp:389
static constexpr bool IsValidType_V
类型存在检查:用于编译期检查一个给定类型是否为NBT中的类型
定义 NBT_Type.hpp:183
uint32_t Float_Raw
Float 类型的原始表示,用于在平台不支持或需要二进制读写时使用
定义 NBT_Type.hpp:39
int64_t Long
64位有符号整数
定义 NBT_Type.hpp:52
NBT_List< std::vector< NBT_Node > > List
列表类型,可顺序存储任意相同的NBT类型
定义 NBT_Type.hpp:69
static constexpr bool IsStringTag(NBT_TAG tag) noexcept
判断给定的NBT_TAG是否对应String类型
定义 NBT_Type.hpp:438
std::conditional_t<(sizeof(float)==sizeof(Float_Raw)), float, Float_Raw > Float
单精度浮点类型
定义 NBT_Type.hpp:56
static constexpr Long Long_Max
长整数类型最大值
定义 NBT_Type.hpp:166
NBT_Array< std::vector< Byte > > ByteArray
存储 8位有符号整数的数组类型
定义 NBT_Type.hpp:60
_TypeList< End, Byte, Short, Int, Long, Float, Double, ByteArray, String, List, Compound, IntArray, LongArray > TypeList
完整的NBT类型列表定义
定义 NBT_Type.hpp:83
NBT_Array< std::vector< Int > > IntArray
存储32位有符号整数的数组类型
定义 NBT_Type.hpp:61
NBT_Compound< std::unordered_map< String, NBT_Node > > Compound
集合类型,可存储任意不同的NBT类型,通过名称映射值
定义 NBT_Type.hpp:73
NBT_Array< std::vector< Long > > LongArray
存储64位有符号整数的数组类型
定义 NBT_Type.hpp:62
typename BuiltinRawType< T >::Type BuiltinRawType_T
映射内建类型到方便读写的raw类型:编译期获得内建类型到可以进行二进制读写的原始类型
定义 NBT_Type.hpp:345
static constexpr bool IsCompoundTag(NBT_TAG tag) noexcept
判断给定的NBT_TAG是否对应Compound类型
定义 NBT_Type.hpp:454
int32_t ListLength
列表长度类型
定义 NBT_Type.hpp:139
uint16_t StringLength
字符串长度类型
定义 NBT_Type.hpp:138
std::conditional_t<(sizeof(double)==sizeof(Double_Raw)), double, Double_Raw > Double
双精度浮点类型
定义 NBT_Type.hpp:57
static constexpr bool IsNumericTag(NBT_TAG tag) noexcept
判断给定的NBT_TAG是否对应数值类型(包含所有整数和浮点数类型)
定义 NBT_Type.hpp:353
static constexpr bool IsArrayType_V
判断类型是否为NBT数组类型(包含所有数组类型)
定义 NBT_Type.hpp:291
static constexpr Int Int_Max
整数类型最大值
定义 NBT_Type.hpp:163
static constexpr ListLength ListLength_Max
列表长度类型最大值
定义 NBT_Type.hpp:150
static constexpr bool IsListType_V
判断类型是否为NBT List类型
定义 NBT_Type.hpp:318
static constexpr bool IsFloatingType_V
判断类型是否为NBT浮点数类型(包含所有浮点数类型)
定义 NBT_Type.hpp:283
static constexpr ArrayLength ArrayLength_Max
数组长度类型最大值
定义 NBT_Type.hpp:144
static constexpr NBT_TAG TypeTag_V
类型枚举值查询:用于在编译期,通过类型查询它在NBT_TAG中对应的enum值
定义 NBT_Type.hpp:209
static constexpr Short Short_Max
短整数类型形最大值
定义 NBT_Type.hpp:160
static constexpr bool IsArrayTag(NBT_TAG tag) noexcept
判断给定的NBT_TAG是否对应数组类型(包含所有数组类型)
定义 NBT_Type.hpp:404
static constexpr bool IsListTag(NBT_TAG tag) noexcept
判断给定的NBT_TAG是否对应List类型
定义 NBT_Type.hpp:446
static constexpr bool IsIntegerTag(NBT_TAG tag) noexcept
判断给定的NBT_TAG是否对应整数类型(包含所有整数类型)
定义 NBT_Type.hpp:372
static constexpr const char * GetTypeName(NBT_TAG tag) noexcept
通过类型标签获取类型名称
定义 NBT_Type.hpp:124
static constexpr Long Long_Min
长整数类型最小值
定义 NBT_Type.hpp:167
static constexpr ListLength ListLength_Min
列表长度类型最小值
定义 NBT_Type.hpp:151
int32_t Int
32位有符号整数
定义 NBT_Type.hpp:51