Struct NodeInit
Synopsis
#include <src/c4/yml/tree.hpp>
struct NodeInit
Description
convenience class to initialize nodes
Summary
NodeInit overload | initialize as an empty node | |
NodeInit overload | initialize as a typed node | |
NodeInit overload | initialize as a sequence member | |
NodeInit overload | initialize as a mapping member | |
NodeInit overload | initialize as a mapping member with explicit type | |
NodeInit overload | initialize as a mapping member with explicit type (eg SEQ or MAP) | |
clear |
Source
Lines 337-393 in src/c4/yml/tree.hpp.
struct NodeInit
{
NodeType type;
NodeScalar key;
NodeScalar val;
public:
/// initialize as an empty node
NodeInit() : type(NOTYPE), key(), val() {}
/// initialize as a typed node
NodeInit(NodeType_e t) : type(t), key(), val() {}
/// initialize as a sequence member
NodeInit(NodeScalar const& v) : type(VAL), key(), val(v) { _add_flags(); }
/// initialize as a mapping member
NodeInit( NodeScalar const& k, NodeScalar const& v) : type(KEYVAL), key(k.tag, k.scalar), val(v.tag, v.scalar) { _add_flags(); }
/// initialize as a mapping member with explicit type
NodeInit(NodeType_e t, NodeScalar const& k, NodeScalar const& v) : type(t ), key(k.tag, k.scalar), val(v.tag, v.scalar) { _add_flags(); }
/// initialize as a mapping member with explicit type (eg SEQ or MAP)
NodeInit(NodeType_e t, NodeScalar const& k ) : type(t ), key(k.tag, k.scalar), val( ) { _add_flags(KEY); }
public:
void clear()
{
type.clear();
key.clear();
val.clear();
}
void _add_flags(type_bits more_flags=0)
{
type = (type|more_flags);
if( ! key.tag.empty())
type = (type|KEYTAG);
if( ! val.tag.empty())
type = (type|VALTAG);
if( ! key.anchor.empty())
type = (type|KEYANCH);
if( ! val.anchor.empty())
type = (type|VALANCH);
}
bool _check() const
{
// key cannot be empty
RYML_ASSERT(key.scalar.empty() == ((type & KEY) == 0));
// key tag cannot be empty
RYML_ASSERT(key.tag.empty() == ((type & KEYTAG) == 0));
// val may be empty even though VAL is set. But when VAL is not set, val must be empty
RYML_ASSERT(((type & VAL) != 0) || val.scalar.empty());
// val tag cannot be empty
RYML_ASSERT(val.tag.empty() == ((type & VALTAG) == 0));
return true;
}
};