return (Val_int(XMLTREE(tree)->TaggedDescendant(TREENODEVAL(node), TAGVAL(tag))));
}
+NoAlloc extern "C" value caml_xml_tree_tagged_next(value tree, value node, value tag){
+ return (Val_int(XMLTREE(tree)->TaggedNext(TREENODEVAL(node), TAGVAL(tag))));
+}
+
NoAlloc extern "C" value caml_xml_tree_select_descendant(value tree, value node, value tags){
return (Val_int(XMLTREE(tree)->SelectDescendant(TREENODEVAL(node), HSET(tags))));
}
let tag_fold f tree t tag acc =
let rec loop close node acc =
- if node == Tree.nil then acc
+ if node > Tree.nil && node < close then acc
else
let acc = f node acc in
- let acc' = loop close (Tree.tagged_descendant tree node tag) acc in
- loop close (Tree.tagged_following_before tree node tag close) acc'
+ loop close (Tree.tagged_next tree node tag) acc
in
- let t = fst_tagged tree t tag in
- loop (Tree.closing tree t) t acc
+ let t' = fst_tagged tree t tag in
+ loop (Tree.closing tree t) t' acc
let tag_iter f tree t tag =
let rec loop close node =
- if node != Tree.nil then begin
+ if node > Tree.nil && node < close then begin
f node;
- loop close (Tree.tagged_descendant tree node tag);
- loop close (Tree.tagged_following_before tree node tag close);
+ loop close (Tree.tagged_next tree node tag);
end
in
let t' = fst_tagged tree t tag in
external tree_tagged_descendant : tree -> [`Tree ] Node.t -> Tag.t -> [`Tree ] Node.t = "caml_xml_tree_tagged_descendant" "noalloc"
let tagged_descendant t n tag = tree_tagged_descendant t.doc n tag
+external tree_tagged_next : tree -> [`Tree ] Node.t -> Tag.t -> [`Tree ] Node.t = "caml_xml_tree_tagged_next" "noalloc"
+let tagged_next t n tag = tree_tagged_next t.doc n tag
+
external tree_select_descendant : tree -> [`Tree ] Node.t -> unordered_set -> [`Tree] Node.t = "caml_xml_tree_select_descendant" "noalloc"
let select_descendant t n tag_set = tree_select_descendant t.doc n tag_set
val select_following_sibling : t -> node -> unordered_set -> node
val tagged_descendant : t -> node -> Tag.t -> node
+val tagged_next : t -> node -> Tag.t -> node
val select_descendant : t -> node -> unordered_set -> node
val tagged_following_before : t -> node -> Tag.t -> node -> node