Class NodeRef

Inheritance Relationships

Base Type

Class Documentation

class NodeRef : public c4::yml::detail::RoNodeMethods<NodeRef, ConstNodeRef>

a reference to a node in an existing yaml tree, offering a more convenient API than the index-based API used in the tree.

construction

inline NodeRef()
inline NodeRef(Tree &t)
inline NodeRef(Tree *t)
inline NodeRef(Tree *t, size_t id)
inline NodeRef(Tree *t, size_t id, size_t seed_pos)
inline NodeRef(Tree *t, size_t id, csubstr seed_key)
inline NodeRef(std::nullptr_t)

assignment

NodeRef(NodeRef const&) = default
NodeRef(NodeRef&&) = default
NodeRef &operator=(NodeRef const&) = default
NodeRef &operator=(NodeRef&&) = default

state queries

inline bool valid() const
inline bool is_seed() const
inline void _clear_seed()

comparisons

inline bool operator==(NodeRef const &that) const
inline bool operator!=(NodeRef const &that) const
inline bool operator==(ConstNodeRef const &that) const
inline bool operator!=(ConstNodeRef const &that) const
inline bool operator==(std::nullptr_t) const
inline bool operator!=(std::nullptr_t) const
inline bool operator==(csubstr val) const
inline bool operator!=(csubstr val) const

node property getters

inline C4_ALWAYS_INLINE C4_PURE Tree * tree () noexcept
inline C4_ALWAYS_INLINE C4_PURE Tree const  * tree () const noexcept
inline C4_ALWAYS_INLINE C4_PURE size_t id () const noexcept

node modifiers

inline void change_type(NodeType t)
inline void set_type(NodeType t)
inline void set_key(csubstr key)
inline void set_val(csubstr val)
inline void set_key_tag(csubstr key_tag)
inline void set_val_tag(csubstr val_tag)
inline void set_key_anchor(csubstr key_anchor)
inline void set_val_anchor(csubstr val_anchor)
inline void set_key_ref(csubstr key_ref)
inline void set_val_ref(csubstr val_ref)
template<class T> inline size_t set_key_serialized (T const &C4_RESTRICT k)
template<class T> inline size_t set_val_serialized (T const &C4_RESTRICT v)
inline size_t set_val_serialized(std::nullptr_t)
size_t set_key_serialized(fmt::const_base64_wrapper w)

encode a blob as base64, then assign the result to the node’s key

Returns:

the size of base64-encoded blob

size_t set_val_serialized(fmt::const_base64_wrapper w)

encode a blob as base64, then assign the result to the node’s val

Returns:

the size of base64-encoded blob

inline void clear()
inline void clear_key()
inline void clear_val()
inline void clear_children()
inline void create()
inline void operator=(NodeType_e t)
inline void operator|=(NodeType_e t)
inline void operator=(NodeInit const &v)
inline void operator=(NodeScalar const &v)
inline void operator=(std::nullptr_t)
inline void operator=(csubstr v)
template<size_t N>
inline void operator=(const char (&v)[N])

serialization

template<class T> inline csubstr to_arena (T const &C4_RESTRICT s)

serialize a variable to the arena

inline NodeRef &operator<<(csubstr s)

serialize a variable, then assign the result to the node’s val

template<class T> inline NodeRef & operator<< (T const &C4_RESTRICT v)
template<class T> inline NodeRef & operator<< (Key< const T > const &C4_RESTRICT v)

serialize a variable, then assign the result to the node’s key

template<class T> inline NodeRef & operator<< (Key< T > const &C4_RESTRICT v)

serialize a variable, then assign the result to the node’s key

inline NodeRef &operator<<(Key<fmt::const_base64_wrapper> w)
inline NodeRef &operator<<(fmt::const_base64_wrapper w)

modification of hierarchy

inline NodeRef insert_child(NodeRef after)
inline NodeRef insert_child(NodeInit const &i, NodeRef after)
inline NodeRef prepend_child()
inline NodeRef prepend_child(NodeInit const &i)
inline NodeRef append_child()
inline NodeRef append_child(NodeInit const &i)
inline NodeRef insert_sibling(ConstNodeRef const &after)
inline NodeRef insert_sibling(NodeInit const &i, ConstNodeRef const &after)
inline NodeRef prepend_sibling()
inline NodeRef prepend_sibling(NodeInit const &i)
inline NodeRef append_sibling()
inline NodeRef append_sibling(NodeInit const &i)
inline void remove_child(NodeRef &child)
inline void remove_child(size_t pos)

remove the nth child of this node

inline void remove_child(csubstr key)

remove a child by name

inline void move(ConstNodeRef const &after)

change the node’s position within its parent, placing it after after. To move to the first position in the parent, simply pass an empty or default-constructed reference like this: n.move({}).

inline void move(NodeRef const &parent, ConstNodeRef const &after)

move the node to a different parent (which may belong to a different tree), placing it after after. When the destination parent is in a new tree, then this node’s tree pointer is reset to the tree of the parent node.

inline NodeRef duplicate(ConstNodeRef const &after) const

duplicate the current node somewhere within its parent, and place it after the node after. To place into the first position of the parent, simply pass an empty or default-constructed reference like this: n.move({}).

inline NodeRef duplicate(NodeRef const &parent, ConstNodeRef const &after) const

duplicate the current node somewhere into a different parent (possibly from a different tree), and place it after the node after. To place into the first position of the parent, simply pass an empty or default-constructed reference like this: n.move({}).

inline void duplicate_children(NodeRef const &parent, ConstNodeRef const &after) const

Public Types

using tree_type = Tree
using base_type = detail::RoNodeMethods<NodeRef, ConstNodeRef>

Friends

friend struct detail::RoNodeMethods< NodeRef, ConstNodeRef >