50 return ResultControl::Continue;
62 return ResultControl::Continue;
71 return ResultControl::Continue;
80 return ResultControl::Continue;
90 return ResultControl::Continue;
100 return NestingControl::Enter;
110 return ResultControl::Continue;
118 return ResultControl::Continue;
126 return ResultControl::Continue;
135 return NestingControl::Enter;
145 return NestingControl::Enter;
155 return ResultControl::Continue;
163 return ResultControl::Continue;
186 template<
typename... Args>
213 size_t nbt_list_length,
214 size_t nbt_list_index,
225 visitor.VisitNumericResult(nbt_byte)
226 } -> std::same_as<
decltype(nbt_visitor.VisitNumericResult(nbt_byte))>;
228 visitor.VisitNumericResult(nbt_short)
229 } -> std::same_as<
decltype(nbt_visitor.VisitNumericResult(nbt_short))>;
231 visitor.VisitNumericResult(nbt_int)
232 } -> std::same_as<
decltype(nbt_visitor.VisitNumericResult(nbt_int))>;
234 visitor.VisitNumericResult(nbt_long)
235 } -> std::same_as<
decltype(nbt_visitor.VisitNumericResult(nbt_long))>;
237 visitor.VisitNumericResult(nbt_float)
238 } -> std::same_as<
decltype(nbt_visitor.VisitNumericResult(nbt_float))>;
240 visitor.VisitNumericResult(nbt_double)
241 } -> std::same_as<
decltype(nbt_visitor.VisitNumericResult(nbt_double))>;
245 visitor.VisitArrayResult(std::move(nbt_bytearray))
246 } -> std::same_as<
decltype(nbt_visitor.VisitArrayResult(std::move(nbt_bytearray)))>;
248 visitor.VisitArrayResult(std::move(nbt_intarray))
249 } -> std::same_as<
decltype(nbt_visitor.VisitArrayResult(std::move(nbt_intarray)))>;
251 visitor.VisitArrayResult(std::move(nbt_longarray))
252 } -> std::same_as<
decltype(nbt_visitor.VisitArrayResult(std::move(nbt_longarray)))>;
256 visitor.VisitStringResult(std::move(nbt_string))
257 } -> std::same_as<
decltype(nbt_visitor.VisitStringResult(std::move(nbt_string)))>;
261 visitor.VisitEndResult()
262 } -> std::same_as<
decltype(nbt_visitor.VisitEndResult())>;
267 visitor.VisitListBegin(nbt_tag, nbt_list_length)
268 } -> std::same_as<
decltype(nbt_visitor.VisitListBegin(nbt_tag, nbt_list_length))>;
270 visitor.VisitListElementBegin(nbt_tag, nbt_list_index)
271 } -> std::same_as<
decltype(nbt_visitor.VisitListElementBegin(nbt_tag, nbt_list_index))>;
273 visitor.VisitListElementEnd(nbt_tag, nbt_list_index)
274 } -> std::same_as<
decltype(nbt_visitor.VisitListElementEnd(nbt_tag, nbt_list_index))>;
276 visitor.VisitListEnd()
277 } -> std::same_as<
decltype(nbt_visitor.VisitListEnd())>;
281 visitor.VisitCompoundBegin()
282 } -> std::same_as<
decltype(nbt_visitor.VisitCompoundBegin())>;
284 visitor.VisitCompoundNextEntryType(nbt_tag)
285 } -> std::same_as<
decltype(nbt_visitor.VisitCompoundNextEntryType(nbt_tag))>;
287 visitor.VisitCompoundEntryBegin(nbt_tag, std::move(nbt_string))
288 } -> std::same_as<
decltype(nbt_visitor.VisitCompoundEntryBegin(nbt_tag, std::move(nbt_string)))>;
290 visitor.VisitCompoundEntryEnd(nbt_tag, std::move(nbt_string))
291 } -> std::same_as<
decltype(nbt_visitor.VisitCompoundEntryEnd(nbt_tag, std::move(nbt_string)))>;
293 visitor.VisitCompoundEnd()
294 } -> std::same_as<
decltype(nbt_visitor.VisitCompoundEnd())>;
306 visitor.VisitError(nbt_print_level,
"error message")
309 visitor.VisitError(nbt_print_level,
"error with code: {}", 0)
312 visitor.VisitError(nbt_print_level,
"error with info: {}",
"test info")
321class NBT_Visitor_Collector
362 void *pNewElement = NULL;
365 switch (stTopFrame.
enType)
376 pNewElement = (
void*)&(it->second);
381 if (stTopFrame.
pList == NULL)
386 pNewElement = (
void*)&stTopFrame.
pList->
AddBack(std::forward<T>(tVal));
428 if (
vStack.back().enType != enTypeRequires)
446 NBT_Visitor_Collector &
operator=(
const NBT_Visitor_Collector &) =
delete;
448 NBT_Visitor_Collector &
operator=(NBT_Visitor_Collector &&) =
default;
476 return ResultControl::Stop;
478 return ResultControl::Continue;
488 return ResultControl::Stop;
490 return ResultControl::Continue;
498 return ResultControl::Stop;
500 return ResultControl::Continue;
508 return ResultControl::Stop;
510 return ResultControl::Continue;
521 return ResultControl::Stop;
523 return ResultControl::Continue;
529 return NestingControl::Enter;
535 return ResultControl::Continue;
543 return ResultControl::Stop;
545 return ResultControl::Continue;
553 return ResultControl::Stop;
555 return ResultControl::Continue;
561 return NestingControl::Enter;
568 return NestingControl::Enter;
574 return ResultControl::Continue;
582 return ResultControl::Stop;
584 return ResultControl::Continue;
614 template<
typename... Args>
617 NBT_Print{}(lvl, fmt, std::forward<Args>(args)...);
NBT_Print_Level
用于指示信息打印等级的枚举
定义 NBT_Print.hpp:11
NBT_TAG
枚举NBT类型对应的类型标签值
定义 NBT_TAG.hpp:17
NBT_Visitor_ResultControl
控制流返回码(用于普通回调)
定义 NBT_Visitor.hpp:15
@ Stop
停止处理(终止解析)
定义 NBT_Visitor.hpp:18
@ Continue
继续处理(继续迭代)
定义 NBT_Visitor.hpp:16
@ Break
跳过剩余值(离开当前结构层级回到父层级)
定义 NBT_Visitor.hpp:17
NBT_Visitor_NestingControl
控制流返回码(用于嵌套结构回调)
定义 NBT_Visitor.hpp:23
@ Skip
跳过当前值(跳过递归进入嵌套结构或展开值)
定义 NBT_Visitor.hpp:25
@ Enter
进入当前值(递归进入嵌套结构或展开值)
定义 NBT_Visitor.hpp:24
std::pair< typename Compound::iterator, bool > Put(K &&sTagName, V &&vTagVal)
插入或替换键值对
定义 NBT_Compound.hpp:312
void Reserve(typename List::size_type szNewCap)
预留存储空间
定义 NBT_List.hpp:377
List::value_type & AddBack(V &&vTagVal)
在列表末尾插入元素
定义 NBT_List.hpp:251
一个用于打印信息到指定的C文件对象的工具类,作为库内大部分存在信息输出接口的默认实现。 实际可被使用此类为默认值参数的函数的调用方,以类似此类的仿函数参数重写的其它类型替换, 比如调用方实现了一个My_...
定义 NBT_Print.hpp:24
int8_t Byte
8位有符号整数
定义 NBT_Type.hpp:49
static constexpr bool IsNumericType_V
判断类型是否为NBT数值类型(包含所有整数和浮点数类型)
定义 NBT_Type.hpp:261
std::monostate End
结束标记类型,无数据
定义 NBT_Type.hpp:48
int16_t Short
16位有符号整数
定义 NBT_Type.hpp:50
static constexpr bool IsCompoundType_V
判断类型是否为NBT Compound类型
定义 NBT_Type.hpp:325
NBT_String< MUTF8_String, MUTF8_String_View > String
字符串类型,存储Java M-UTF-8字符串
定义 NBT_Type.hpp:65
int64_t Long
64位有符号整数
定义 NBT_Type.hpp:52
NBT_List< std::vector< NBT_Node > > List
列表类型,可顺序存储任意相同的NBT类型
定义 NBT_Type.hpp:69
std::conditional_t<(sizeof(float)==sizeof(Float_Raw)), float, Float_Raw > Float
单精度浮点类型
定义 NBT_Type.hpp:56
NBT_Array< std::vector< Byte > > ByteArray
存储 8位有符号整数的数组类型
定义 NBT_Type.hpp:60
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
std::conditional_t<(sizeof(double)==sizeof(Double_Raw)), double, Double_Raw > Double
双精度浮点类型
定义 NBT_Type.hpp:57
static constexpr bool IsArrayType_V
判断类型是否为NBT数组类型(包含所有数组类型)
定义 NBT_Type.hpp:291
static constexpr bool IsListType_V
判断类型是否为NBT List类型
定义 NBT_Type.hpp:318
int32_t Int
32位有符号整数
定义 NBT_Type.hpp:51
NBT 数据收集器,实现访问器接口,将扫描结果构建为完整的 Compound 树
定义 NBT_Visitor.hpp:322
std::vector< Frame > vStack
栈,记录当前嵌套的容器
定义 NBT_Visitor.hpp:345
NBT_Visitor_Collector(NBT_Visitor_Collector &&)=default
默认移动构造函数
ResultControl VisitListElementEnd(NBT_TAG enListElementTag, size_t szListIndex)
结束处理 List 中的一个元素
定义 NBT_Visitor.hpp:533
const NBT_Type::Compound & ViewRoot(void) const noexcept
获取根节点的常量引用
定义 NBT_Visitor.hpp:456
void VisitError(NBT_Print_Level lvl, const std::format_string< Args... > fmt, Args &&... args) noexcept
错误处理回调
定义 NBT_Visitor.hpp:615
NBT_Visitor_Collector & operator=(NBT_Visitor_Collector &&)=default
默认移动赋值运算符
ResultControl VisitStringResult(NBT_Type::String &&strResult)
处理字符串类型节点
定义 NBT_Visitor.hpp:494
ResultControl VisitCompoundEnd(void)
定义 NBT_Visitor.hpp:578
ResultControl VisitListEnd(void)
定义 NBT_Visitor.hpp:539
ResultControl VisitListBegin(NBT_TAG enListElementTag, size_t szListLength)
定义 NBT_Visitor.hpp:514
ResultControl VisitArrayResult(T &&tArrayResult)
处理数组类型节点(ByteArray/IntArray/LongArray)
定义 NBT_Visitor.hpp:484
bool PopStack(Frame::Type enTypeRequires)
弹出栈顶,并检查类型是否匹配
定义 NBT_Visitor.hpp:421
ResultControl VisitEndResult(void)
处理 End 标记节点
定义 NBT_Visitor.hpp:504
bool AppendStackTop(T &&tVal)
将值追加到当前栈顶的容器中
定义 NBT_Visitor.hpp:355
NBT_Type::String sPendingKey
暂存的键名,用于插入 Compound
定义 NBT_Visitor.hpp:344
NBT_Visitor_NestingControl NestingControl
控制流返回码(嵌套结构入口回调),直接映射 NBT_Visitor_NestingControl
定义 NBT_Visitor.hpp:452
NBT_Type::Compound && MoveRoot(void) noexcept
移动根节点(获取所有权)
定义 NBT_Visitor.hpp:463
NestingControl VisitListElementBegin(NBT_TAG enListElementTag, size_t szListIndex)
开始处理 List 中的一个元素
定义 NBT_Visitor.hpp:527
void VisitEnd(void)
整体扫描结束:清理栈帧
定义 NBT_Visitor.hpp:605
NBT_Visitor_Collector(const NBT_Visitor_Collector &)=delete
禁用拷贝构造函数
NestingControl VisitCompoundNextEntryType(NBT_TAG enCompoundEntryTag)
在 Compound 中,开始处理下一个条目之前,仅提供类型信息
定义 NBT_Visitor.hpp:559
ResultControl VisitNumericResult(T tNumericResult)
处理数值类型节点
定义 NBT_Visitor.hpp:472
void VisitBegin(void)
整体扫描开始:初始化栈,将根节点设为当前帧
定义 NBT_Visitor.hpp:589
NestingControl VisitCompoundEntryBegin(NBT_TAG enCompoundEntryTag, NBT_Type::String &&sName)
定义 NBT_Visitor.hpp:565
ResultControl VisitCompoundBegin(void)
定义 NBT_Visitor.hpp:549
NBT_Type::Compound cpdRoot
根 Compound 节点
定义 NBT_Visitor.hpp:346
ResultControl VisitCompoundEntryEnd(NBT_TAG enCompoundEntryTag, NBT_Type::String &&sName)
结束处理 Compound 中的一个条目
定义 NBT_Visitor.hpp:572
NBT_Visitor_Collector & operator=(const NBT_Visitor_Collector &)=delete
禁用拷贝赋值运算符
NBT_Visitor_ResultControl ResultControl
控制流返回码(普通回调),直接映射 NBT_Visitor_ResultControl
定义 NBT_Visitor.hpp:451
提示性实现类(鸭子类型),仅用于模板通过性验证与用户接口提示
定义 NBT_Visitor.hpp:35
void VisitError(NBT_Print_Level lvl, const std::format_string< Args... > fmt, Args &&... args) noexcept
错误处理回调
定义 NBT_Visitor.hpp:187
NestingControl VisitListElementBegin(NBT_TAG enListElementTag, size_t szListIndex)
开始处理 List 中的一个元素
定义 NBT_Visitor.hpp:97
NestingControl VisitCompoundEntryBegin(NBT_TAG enCompoundEntryTag, NBT_Type::String &&sName)
开始处理 Compound 中的一个条目(键值对)
定义 NBT_Visitor.hpp:142
ResultControl VisitCompoundEnd(void)
结束处理整个 Compound 节点
定义 NBT_Visitor.hpp:160
ResultControl VisitArrayResult(T &&tArrayResult)
处理数组类型节点(ByteArray/IntArray/LongArray)
定义 NBT_Visitor.hpp:59
ResultControl VisitListBegin(NBT_TAG enListElementTag, size_t szListLength)
开始处理一个 List 节点
定义 NBT_Visitor.hpp:87
ResultControl VisitListEnd(void)
结束处理整个 List 节点
定义 NBT_Visitor.hpp:115
void VisitBegin(void)
整个 NBT 扫描开始回调(根部调用)
定义 NBT_Visitor.hpp:167
ResultControl VisitListElementEnd(NBT_TAG enListElementTag, size_t szListIndex)
结束处理 List 中的一个元素
定义 NBT_Visitor.hpp:107
NBT_Visitor_ResultControl ResultControl
控制流返回码(普通回调),直接映射 NBT_Visitor_ResultControl
定义 NBT_Visitor.hpp:37
ResultControl VisitEndResult(void)
处理 End 标记节点
定义 NBT_Visitor.hpp:77
NestingControl VisitCompoundNextEntryType(NBT_TAG enCompoundEntryTag)
在 Compound 中,开始处理下一个条目之前,仅提供类型信息
定义 NBT_Visitor.hpp:132
void VisitEnd(void)
整个 NBT 扫描结束回调(根部调用)
定义 NBT_Visitor.hpp:174
ResultControl VisitNumericResult(T tNumericResult)
处理数值类型节点
定义 NBT_Visitor.hpp:47
NBT_Visitor_NestingControl NestingControl
控制流返回码(嵌套结构入口回调),直接映射 NBT_Visitor_NestingControl
定义 NBT_Visitor.hpp:38
ResultControl VisitStringResult(NBT_Type::String &&strResult)
处理字符串类型节点
定义 NBT_Visitor.hpp:68
ResultControl VisitCompoundEntryEnd(NBT_TAG enCompoundEntryTag, NBT_Type::String &&sName)
结束处理 Compound 中的一个条目
定义 NBT_Visitor.hpp:152
ResultControl VisitCompoundBegin(void)
开始处理一个 Compound 节点
定义 NBT_Visitor.hpp:123
检查类型是否符合 NBT 访问器(Visitor)的接口要求
定义 NBT_Visitor.hpp:200
Type
帧的容器类型
定义 NBT_Visitor.hpp:329
@ Compound
当前存储的是 Compound 类型
定义 NBT_Visitor.hpp:330
@ List
当前存储的是 List 类型
定义 NBT_Visitor.hpp:331
NBT_Type::Compound * pCompound
当前存储的 Compound 容器指针
定义 NBT_Visitor.hpp:338
Type enType
当前帧的容器类型
定义 NBT_Visitor.hpp:335
NBT_Type::List * pList
当前存储的 List 容器指针
定义 NBT_Visitor.hpp:339