//Node_T tests
+ /**
+ * [is_leaf(n)] returns true if [n] is a leaf (i.e. if [num_children(n)]
+ * returns 0
+ * Runs in O(1)
+ */
inline bool is_leaf(node_t) const;
+
+ /**
+ * [is_ancestor(n, m)] returns true if [n] is an ancestor of [m], false
+ * otherwise
+ * Runs in O(1)
+ */
inline bool is_ancestor(node_t, node_t) const;
+
+ /**
+ * [is_right_descendant(n, m)] returns true if [m] is a descendant-or-self of
+ * a following-sibling of [n], false otherwise
+ * Runs in O(1)
+ */
inline bool is_right_descendant(node_t, node_t) const;
+
+ /**
+ * [is_child(n, m)] returns true if [m] is a child of [n]
+ * Runs in O(1)
+ */
bool is_child(node_t, node_t) const;
+
+ /**
+ * [is_first_child(n, m)] returns true if [m] is the first child of [n]
+ * Runs in O(1)
+ */
inline bool is_first_child(node_t) const;
+
+ /**
+ * [is_nil(n)] returns true if [n] is equal to xml_tree::NIL
+ * Runs in O(1)
+ */
inline bool is_nil(node_t) const;
+
+ /**
+ * [is_open(n)] returns true if [n], seen as an index in the
+ * underlying BP representation corresponds to an opening parenthesis.
+ * Runs in O(1)
+ */
inline bool is_open(node_t) const;
+ //Numbering functions
+ /**
+ * [depth(n)] returns the depths of node [n]. The root has depth 1.
+ * Runs in O(1)
+ */
uint32_t depth(node_t) const;
+
+ /**
+ * [preorder(n)] returns the preorder of node [n]. Equivalent to calling
+ * rank on the underlying BP representation.
+ * Runs in O(1)
+ */
uint32_t preorder(node_t) const;
+
+ /**
+ * [preorder(n)] returns the postorder of node [n].
+ * Runs in O(1)
+ */
uint32_t postorder(node_t) const;
//Tag functions
+ /**
+ * [tag(n)] returns the tag of node [n] which must be a valid node identifier
+ * (in particular not NIL)
+ * Runs in O(1)
+ */
inline tag_t tag(node_t) const;
+
+ /**
+ * [get_tag_name_by_ref(t)] returns the string representation of tag [t]
+ * For elements, the string representation is the tag name itself
+ * Returns <!INVALID!> if [t] is not a proper tag identifier.
+ * Runs in O(1)
+ */
const char* get_tag_name_by_ref(tag_t) const;
+
+ /**
+ * [register_tag(s)] returns the tag identifier for the tag represented
+ * by the string [s]. If no such tag exists in the document, return a
+ * fresh tag identifier [i]. Subsequent calls with the same [s] will return
+ * the same identifier.
+ * Runs in O(1)
+ */
tag_t register_tag(char *s);
//Navigation functions