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