12 #ifndef DOCWIRE_XML_NODES_VIEW_H
13 #define DOCWIRE_XML_NODES_VIEW_H
19 #include "xml_node_ref.h"
20 #include "xml_iterator_state.h"
21 #include "xml_reader.h"
32 template<safety_policy safety_level = default_safety_level>
45 : m_state(std::move(state)) {}
53 template<safety_policy safety_level>
59 using iterator_concept = std::input_iterator_tag;
60 using difference_type = std::ptrdiff_t;
65 bool operator==(
const sentinel& s)
const {
return !m_node.has_value(); }
66 reference operator*()
const {
return *m_node; }
67 pointer operator->()
const {
return &*m_node; }
70 if (!m_state->xml_reader.read_next())
75 m_node.emplace(m_state);
85 void reset() { m_node.reset(); }
89 : m_state(std::move(state))
103 template<safety_policy safety_level>
115 template<safety_policy safety_level>
A generic wrapper for dereferenceable types (like pointers and optionals) that provides checked acces...
A wrapper for pointer-like types that enforces a non-null invariant.
A reference to the current XML node in the reader.
const not_null< std::shared_ptr< iterator_state< safety_level > >, safety_level > & state() const
Returns the shared iterator state associated with this node reference.
Iterator for traversing a sequence of XML nodes.
void reset()
Resets the iterator to the end state (invalidates it).
A view over a sequence of XML nodes.
nodes_view(not_null< std::shared_ptr< iterator_state< safety_level >>, safety_level > state)
Constructs a view from an iterator state.
XML processing utilities.
nodes_view< safety_level > nodes(const node_ref< safety_level > &node)
Creates a view of nodes starting from the given node's state.
A sentinel type used to define the end of a range or view.
Shared state for XML iterators to coordinate traversal.