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