Path: blob/master/dep/rapidyaml/include/c4/yml/detail/print.hpp
4270 views
#ifndef C4_YML_DETAIL_PRINT_HPP_1#define C4_YML_DETAIL_PRINT_HPP_23#include "c4/yml/tree.hpp"4#include "c4/yml/node.hpp"567namespace c4 {8namespace yml {910C4_SUPPRESS_WARNING_GCC_CLANG_WITH_PUSH("-Wold-style-cast")1112inline size_t print_node(Tree const& p, size_t node, int level, size_t count, bool print_children)13{14printf("[%zd]%*s[%zd] %p", count, (2*level), "", node, (void const*)p.get(node));15if(p.is_root(node))16{17printf(" [ROOT]");18}19printf(" %s:", p.type_str(node));20if(p.has_key(node))21{22if(p.has_key_anchor(node))23{24csubstr ka = p.key_anchor(node);25printf(" &%.*s", (int)ka.len, ka.str);26}27if(p.has_key_tag(node))28{29csubstr kt = p.key_tag(node);30csubstr k = p.key(node);31printf(" %.*s '%.*s'", (int)kt.len, kt.str, (int)k.len, k.str);32}33else34{35csubstr k = p.key(node);36printf(" '%.*s'", (int)k.len, k.str);37}38}39else40{41RYML_ASSERT( ! p.has_key_tag(node));42}43if(p.has_val(node))44{45if(p.has_val_tag(node))46{47csubstr vt = p.val_tag(node);48csubstr v = p.val(node);49printf(" %.*s '%.*s'", (int)vt.len, vt.str, (int)v.len, v.str);50}51else52{53csubstr v = p.val(node);54printf(" '%.*s'", (int)v.len, v.str);55}56}57else58{59if(p.has_val_tag(node))60{61csubstr vt = p.val_tag(node);62printf(" %.*s", (int)vt.len, vt.str);63}64}65if(p.has_val_anchor(node))66{67auto &a = p.val_anchor(node);68printf(" valanchor='&%.*s'", (int)a.len, a.str);69}70printf(" (%zd sibs)", p.num_siblings(node));7172++count;7374if(p.is_container(node))75{76printf(" %zd children:\n", p.num_children(node));77if(print_children)78{79for(size_t i = p.first_child(node); i != NONE; i = p.next_sibling(i))80{81count = print_node(p, i, level+1, count, print_children);82}83}84}85else86{87printf("\n");88}8990return count;91}929394//-----------------------------------------------------------------------------95//-----------------------------------------------------------------------------96//-----------------------------------------------------------------------------9798inline void print_node(ConstNodeRef const& p, int level=0)99{100print_node(*p.tree(), p.id(), level, 0, true);101}102103104//-----------------------------------------------------------------------------105//-----------------------------------------------------------------------------106//-----------------------------------------------------------------------------107108inline size_t print_tree(Tree const& p, size_t node=NONE)109{110printf("--------------------------------------\n");111size_t ret = 0;112if(!p.empty())113{114if(node == NONE)115node = p.root_id();116ret = print_node(p, node, 0, 0, true);117}118printf("#nodes=%zd vs #printed=%zd\n", p.size(), ret);119printf("--------------------------------------\n");120return ret;121}122123C4_SUPPRESS_WARNING_GCC_CLANG_POP124125} /* namespace yml */126} /* namespace c4 */127128129#endif /* C4_YML_DETAIL_PRINT_HPP_ */130131132