Skip to content

Commit c8895f0

Browse files
committed
wip [ci skip]
1 parent 0cd41e5 commit c8895f0

11 files changed

Lines changed: 416 additions & 451 deletions

File tree

src/c4/yml/detail/print.hpp

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,14 @@ C4_SUPPRESS_WARNING_GCC("-Wattributes")
2323

2424
inline const char* _container_style_code(Tree const& p, id_type node)
2525
{
26-
if(p.is_container(node))
26+
NodeType ty = p.type(node);
27+
if(ty.is_container())
2728
{
28-
if(p._p(node)->m_type & (FLOW_SL|FLOW_ML))
29+
if(ty & (FLOW_SL|FLOW_ML))
2930
{
3031
return "[FLOW]";
3132
}
32-
if(p._p(node)->m_type & (BLOCK))
33+
if(ty & (BLOCK))
3334
{
3435
return "[BLCK]";
3536
}
@@ -88,14 +89,15 @@ inline C4_NO_INLINE id_type print_node(Tree const& p, id_type node, int level, i
8889
csubstr typestr = type.type_str(typebuf);
8990
_RYML_CHECK_BASIC(typestr.str);
9091
printf(" %.*s", (int)typestr.len, typestr.str);
91-
if(p.has_key(node))
92+
NodeType ty = p.type(node);
93+
if(ty.has_key())
9294
{
93-
if(p.has_key_anchor(node))
95+
if(ty.has_key_anchor())
9496
{
9597
csubstr ka = p.key_anchor(node);
9698
printf(" &%.*s", (int)ka.len, ka.str);
9799
}
98-
if(p.has_key_tag(node))
100+
if(ty.has_key_tag())
99101
{
100102
csubstr kt = p.key_tag(node);
101103
if(kt.begins_with('<'))
@@ -107,20 +109,20 @@ inline C4_NO_INLINE id_type print_node(Tree const& p, id_type node, int level, i
107109
csubstr k = p.key(node);
108110
printf(" %c%.*s%c :", code, (int)k.len, k.str, code);
109111
}
110-
if(p.has_val_anchor(node))
112+
if(ty.has_val_anchor())
111113
{
112114
csubstr a = p.val_anchor(node);
113115
printf(" &%.*s", (int)a.len, a.str);
114116
}
115-
if(p.has_val_tag(node))
117+
if(ty.has_val_tag())
116118
{
117119
csubstr vt = p.val_tag(node);
118120
if(vt.begins_with('<'))
119121
printf(" %.*s", (int)vt.len, vt.str);
120122
else
121123
printf(" <%.*s>", (int)vt.len, vt.str);
122124
}
123-
if(p.has_val(node))
125+
if(ty.has_val())
124126
{
125127
const char code = _scalar_code_val(p, node);
126128
csubstr v = p.val(node);
@@ -130,7 +132,7 @@ inline C4_NO_INLINE id_type print_node(Tree const& p, id_type node, int level, i
130132

131133
++count;
132134

133-
if(!p.is_container(node))
135+
if(!ty.is_container())
134136
{
135137
printf("\n");
136138
}

src/c4/yml/emit.def.hpp

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -167,19 +167,20 @@ void Emitter<Writer>::_visit_stream(id_type id)
167167
++m_depth;
168168
for(id_type child = first_child; child != NONE; child = m_tree->next_sibling(child))
169169
{
170+
NodeType ty = m_tree->type(child);
170171
m_ilevel = 0;
171172
_write_pws_and_pend(_PWS_NONE);
172173
_top_open_entry(child);
173174
_visit_doc(child);
174175
_top_close_entry(child);
175-
if(m_tree->is_val(child))
176+
if(ty.is_val())
176177
{
177-
if(m_tree->type(child) & VALNIL)
178+
if(ty & VALNIL)
178179
_pend_newl();
179180
}
180-
else if(m_tree->is_container(child))
181+
else if(ty.is_container())
181182
{
182-
if(m_tree->is_flow(child))
183+
if(ty.is_flow())
183184
_pend_newl();
184185
}
185186
if(m_tree->next_sibling(child) != NONE)
@@ -243,7 +244,7 @@ void Emitter<Writer>::_visit_doc_val(id_type id)
243244
_indent(m_ilevel);
244245
}
245246
_write_pws_and_pend(_PWS_NONE);
246-
if(m_tree->is_val_ref(id))
247+
if(ty.is_val_ref())
247248
{
248249
_write_ref(val);
249250
}
@@ -324,7 +325,8 @@ void Emitter<Writer>::_top_open_entry(id_type node)
324325
template<class Writer>
325326
void Emitter<Writer>::_top_close_entry(id_type node)
326327
{
327-
if(m_tree->is_val(node) && !(m_tree->type(node) & VALNIL))
328+
NodeType ty = m_tree->type(node);
329+
if(ty.is_val() && !(ty & VALNIL))
328330
{
329331
_pend_newl();
330332
}
@@ -474,8 +476,8 @@ void Emitter<Writer>::_blck_write_qmrk(id_type node, csubstr key, type_bits ty,
474476
template<class Writer>
475477
void Emitter<Writer>::_blck_map_open_entry(id_type node)
476478
{
477-
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->has_key(node), m_tree, node);
478479
NodeType ty = m_tree->type(node);
480+
_RYML_ASSERT_VISIT_(m_tree->callbacks(), ty.has_key(), m_tree, node);
479481
csubstr key = m_tree->key(node);
480482
if(!(ty & (KEY_STYLE|KEYREF)))
481483
ty |= (scalar_style_choose(key) & KEY_STYLE);
@@ -549,7 +551,7 @@ void Emitter<Writer>::_blck_close_entry(id_type node)
549551
template<class Writer>
550552
void Emitter<Writer>::_visit_blck_seq(id_type node)
551553
{
552-
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->is_seq(node), m_tree, node);
554+
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->type(node).is_seq(), m_tree, node);
553555
bool empty = true;
554556
for(id_type child = m_tree->first_child(node); child != NONE; child = m_tree->next_sibling(child))
555557
{
@@ -595,7 +597,7 @@ void Emitter<Writer>::_visit_blck_seq(id_type node)
595597
template<class Writer>
596598
void Emitter<Writer>::_visit_blck_map(id_type node)
597599
{
598-
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->is_map(node), m_tree, node);
600+
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->type(node).is_map(), m_tree, node);
599601
bool empty = true;
600602
for(id_type child = m_tree->first_child(node); child != NONE; child = m_tree->next_sibling(child))
601603
{
@@ -641,7 +643,7 @@ void Emitter<Writer>::_visit_blck_map(id_type node)
641643
template<class Writer>
642644
void Emitter<Writer>::_visit_flow_sl_seq(id_type node)
643645
{
644-
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->is_seq(node), m_tree, node);
646+
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->type(node).is_seq(), m_tree, node);
645647
_write('[');
646648
for(id_type child = m_tree->first_child(node), last = m_tree->last_child(node); child != NONE; child = m_tree->next_sibling(child))
647649
{
@@ -680,7 +682,7 @@ void Emitter<Writer>::_visit_flow_sl_seq(id_type node)
680682
template<class Writer>
681683
void Emitter<Writer>::_visit_flow_ml_seq(id_type node)
682684
{
683-
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->is_seq(node), m_tree, node);
685+
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->type(node).is_seq(), m_tree, node);
684686
_write('[');
685687
_pend_newl();
686688
if(m_opts.indent_flow_ml()) ++m_ilevel;
@@ -723,7 +725,7 @@ void Emitter<Writer>::_visit_flow_ml_seq(id_type node)
723725
template<class Writer>
724726
void Emitter<Writer>::_visit_flow_sl_map(id_type node)
725727
{
726-
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->is_map(node), m_tree, node);
728+
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->type(node).is_map(), m_tree, node);
727729
_write('{');
728730
for(id_type child = m_tree->first_child(node), last = m_tree->last_child(node); child != NONE; child = m_tree->next_sibling(child))
729731
{
@@ -763,7 +765,7 @@ void Emitter<Writer>::_visit_flow_sl_map(id_type node)
763765
template<class Writer>
764766
void Emitter<Writer>::_visit_flow_ml_map(id_type node)
765767
{
766-
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->is_map(node), m_tree, node);
768+
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->type(node).is_map(), m_tree, node);
767769
_write('{');
768770
_pend_newl();
769771
if(m_opts.indent_flow_ml()) ++m_ilevel;
@@ -806,12 +808,12 @@ void Emitter<Writer>::_visit_flow_ml_map(id_type node)
806808
template<class Writer>
807809
void Emitter<Writer>::_visit_blck(id_type node)
808810
{
809-
_RYML_ASSERT_VISIT_(m_tree->callbacks(), !m_tree->is_stream(node), m_tree, node);
810-
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->is_container(node) || m_tree->is_doc(node), m_tree, node);
811+
const NodeType ty = m_tree->type(node);
812+
_RYML_ASSERT_VISIT_(m_tree->callbacks(), !ty.is_stream(), m_tree, node);
813+
_RYML_ASSERT_VISIT_(m_tree->callbacks(), ty.is_container() || ty.is_doc(), m_tree, node);
811814
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->is_root(node) || (m_tree->parent_is_map(node) || m_tree->parent_is_seq(node)), m_tree, node);
812815
if(C4_UNLIKELY(m_depth > m_opts.max_depth()))
813816
_RYML_ERR_VISIT_(m_tree->callbacks(), m_tree, node, "max depth exceeded");
814-
const NodeType ty = m_tree->type(node);
815817
if(ty.is_seq())
816818
{
817819
_visit_blck_seq(node);
@@ -829,12 +831,12 @@ void Emitter<Writer>::_visit_blck(id_type node)
829831
template<class Writer>
830832
void Emitter<Writer>::_visit_flow_sl(id_type node)
831833
{
832-
_RYML_ASSERT_VISIT_(m_tree->callbacks(), !m_tree->is_stream(node), m_tree, node);
833-
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->is_container(node) || m_tree->is_doc(node), m_tree, node);
834+
const NodeType ty = m_tree->type(node);
835+
_RYML_ASSERT_VISIT_(m_tree->callbacks(), !ty.is_stream(), m_tree, node);
836+
_RYML_ASSERT_VISIT_(m_tree->callbacks(), ty.is_container() || ty.is_doc(), m_tree, node);
834837
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->is_root(node) || (m_tree->parent_is_map(node) || m_tree->parent_is_seq(node)), m_tree, node);
835838
if(C4_UNLIKELY(m_depth > m_opts.max_depth()))
836839
_RYML_ERR_VISIT_(m_tree->callbacks(), m_tree, node, "max depth exceeded");
837-
const NodeType ty = m_tree->type(node);
838840
if(ty.is_seq())
839841
{
840842
_visit_flow_sl_seq(node);
@@ -852,12 +854,12 @@ void Emitter<Writer>::_visit_flow_sl(id_type node)
852854
template<class Writer>
853855
void Emitter<Writer>::_visit_flow_ml(id_type node)
854856
{
855-
_RYML_ASSERT_VISIT_(m_tree->callbacks(), !m_tree->is_stream(node), m_tree, node);
856-
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->is_container(node) || m_tree->is_doc(node), m_tree, node);
857+
const NodeType ty = m_tree->type(node);
858+
_RYML_ASSERT_VISIT_(m_tree->callbacks(), !ty.is_stream(), m_tree, node);
859+
_RYML_ASSERT_VISIT_(m_tree->callbacks(), ty.is_container() || ty.is_doc(), m_tree, node);
857860
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->is_root(node) || (m_tree->parent_is_map(node) || m_tree->parent_is_seq(node)), m_tree, node);
858861
if(C4_UNLIKELY(m_depth > m_opts.max_depth()))
859862
_RYML_ERR_VISIT_(m_tree->callbacks(), m_tree, node, "max depth exceeded");
860-
const NodeType ty = m_tree->type(node);
861863
if(ty.is_seq())
862864
{
863865
_visit_flow_ml_seq(node);
@@ -1275,10 +1277,10 @@ void Emitter<Writer>::_json_emit(id_type id)
12751277
template<class Writer>
12761278
void Emitter<Writer>::_json_visit_sl(id_type id, id_type depth)
12771279
{
1278-
_RYML_CHECK_VISIT_(m_tree->callbacks(), !m_tree->is_stream(id), m_tree, id); // JSON does not have streams
1280+
NodeType ty = m_tree->type(id);
1281+
_RYML_CHECK_VISIT_(m_tree->callbacks(), !ty.is_stream(), m_tree, id); // JSON does not have streams
12791282
if(C4_UNLIKELY(depth > m_opts.max_depth()))
12801283
_RYML_ERR_VISIT_(m_tree->callbacks(), m_tree, id, "max depth exceeded");
1281-
NodeType ty = m_tree->type(id);
12821284
if(ty.is_keyval())
12831285
{
12841286
_json_writek(id, ty);
@@ -1318,10 +1320,10 @@ void Emitter<Writer>::_json_visit_sl(id_type id, id_type depth)
13181320
template<class Writer>
13191321
void Emitter<Writer>::_json_visit_ml(id_type id, id_type depth)
13201322
{
1321-
_RYML_CHECK_VISIT_(m_tree->callbacks(), !m_tree->is_stream(id), m_tree, id); // JSON does not have streams
1323+
NodeType ty = m_tree->type(id);
1324+
_RYML_CHECK_VISIT_(m_tree->callbacks(), !ty.is_stream(), m_tree, id); // JSON does not have streams
13221325
if(C4_UNLIKELY(depth > m_opts.max_depth()))
13231326
_RYML_ERR_VISIT_(m_tree->callbacks(), m_tree, id, "max depth exceeded");
1324-
NodeType ty = m_tree->type(id);
13251327
if(ty.is_keyval())
13261328
{
13271329
_json_writek(id, ty);

src/c4/yml/event_handler_tree.hpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ struct EventHandlerTree : public EventHandlerStack<EventHandlerTree, EventHandle
7575
if(C4_UNLIKELY(id >= tree->capacity()))
7676
_RYML_ERR_BASIC_(tree->callbacks(), "invalid node");
7777
if(C4_UNLIKELY(!tree->is_root(id)))
78-
if(C4_UNLIKELY(tree->is_map(tree->parent(id))))
79-
if(C4_UNLIKELY(!tree->has_key(id)))
78+
if(C4_UNLIKELY(tree->parent_is_map(id)))
79+
if(C4_UNLIKELY(!tree->type(id).has_key()))
8080
_RYML_ERR_BASIC_(tree->callbacks(), "destination node belongs to a map and has no key");
8181
m_tree = tree;
8282
if(m_tree->is_root(id))
@@ -183,7 +183,7 @@ struct EventHandlerTree : public EventHandlerStack<EventHandlerTree, EventHandle
183183
{
184184
_c4dbgp("begin_doc_expl");
185185
_RYML_ASSERT_VISIT_(m_stack.m_callbacks, m_tree->root_id() == m_curr->node_id, m_tree, m_curr->node_id);
186-
if(m_tree->is_stream(m_tree->root_id())) //if(_should_push_on_begin_doc())
186+
if(m_tree->type(m_tree->root_id()).is_stream())
187187
{
188188
_c4dbgp("push!");
189189
_push();
@@ -194,9 +194,9 @@ struct EventHandlerTree : public EventHandlerStack<EventHandlerTree, EventHandle
194194
_set_root_as_stream();
195195
const id_type root = m_tree->root_id();
196196
const id_type first = m_tree->first_child(root);
197-
_RYML_ASSERT_VISIT_(m_stack.m_callbacks, m_tree->is_stream(root), m_tree, root);
197+
_RYML_ASSERT_VISIT_(m_stack.m_callbacks, m_tree->type(root).is_stream(), m_tree, root);
198198
_RYML_ASSERT_VISIT_(m_stack.m_callbacks, m_tree->num_children(root) == 1u, m_tree, root);
199-
if(m_tree->is_container(first) || m_tree->is_val(first))
199+
if(m_tree->type(first).is_container() || m_tree->type(first).is_val())
200200
{
201201
_c4dbgp("push!");
202202
_push();
@@ -356,12 +356,12 @@ struct EventHandlerTree : public EventHandlerStack<EventHandlerTree, EventHandle
356356
*/
357357
void actually_val_is_first_key_of_new_map_flow()
358358
{
359-
if(C4_UNLIKELY(m_tree->is_container(m_curr->node_id)))
359+
if(C4_UNLIKELY(m_tree->type(m_curr->node_id).is_container()))
360360
_RYML_ERR_PARSE_(m_stack.m_callbacks, m_curr->pos, "ryml trees cannot handle containers as keys");
361361
_RYML_ASSERT_BASIC_(m_stack.m_callbacks, m_parent);
362-
_RYML_ASSERT_VISIT_(m_stack.m_callbacks, m_tree->is_seq(m_parent->node_id), m_tree, m_parent->node_id);
363-
_RYML_ASSERT_VISIT_(m_stack.m_callbacks, !m_tree->is_container(m_curr->node_id), m_tree, m_curr->node_id);
364-
_RYML_ASSERT_VISIT_(m_stack.m_callbacks, !m_tree->has_key(m_curr->node_id), m_tree, m_curr->node_id);
362+
_RYML_ASSERT_VISIT_(m_stack.m_callbacks, m_tree->type(m_parent->node_id).is_seq(), m_tree, m_parent->node_id);
363+
_RYML_ASSERT_VISIT_(m_stack.m_callbacks, !m_tree->type(m_curr->node_id).is_container(), m_tree, m_curr->node_id);
364+
_RYML_ASSERT_VISIT_(m_stack.m_callbacks, !m_tree->type(m_curr->node_id).has_key(), m_tree, m_curr->node_id);
365365
const NodeData tmp = _val2key_(*m_curr->tr_data);
366366
_disable_(_VALMASK|VAL_STYLE|VALNIL);
367367
m_curr->tr_data->m_val = {};
@@ -703,9 +703,9 @@ struct EventHandlerTree : public EventHandlerStack<EventHandlerTree, EventHandle
703703
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->root_id() == 0u, m_tree, m_tree->root_id());
704704
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_curr->node_id == 0u, m_tree, m_curr->node_id);
705705
m_tree->set_root_as_stream();
706-
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->is_stream(m_tree->root_id()), m_tree, m_tree->root_id());
706+
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->type(m_tree->root_id()).is_stream(), m_tree, m_tree->root_id());
707707
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->has_children(m_tree->root_id()), m_tree, m_tree->root_id());
708-
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->is_doc(m_tree->first_child(m_tree->root_id())), m_tree, m_tree->root_id());
708+
_RYML_ASSERT_VISIT_(m_tree->callbacks(), m_tree->type(m_tree->first_child(m_tree->root_id())).is_doc(), m_tree, m_tree->root_id());
709709
_set_state_(m_curr, m_tree->root_id());
710710
}
711711

0 commit comments

Comments
 (0)