-
-let all_nodes tree = let root = Naive_tree.root tree in
- let acc1 = get_descendant tree [root] in
- root::acc1
-
-
-let element_by_tag tree tagset kind = let dom = all_nodes tree in
- List.filter (fun c ->
- Tree.NodeKind.is_a (Naive_tree.kind tree c) kind &&
- QNameSet.mem (Naive_tree.tag tree c) tagset ) dom
+
+
+let element_by_tag tree tagset kind = let v = Bitvector.create (Naive_tree.size tree) in
+ for i=0 to (Bitvector.length v)-1 do
+ let c = Naive_tree.by_preorder tree i in
+ if (Tree.NodeKind.is_a (Naive_tree.kind tree c) kind &&
+ QNameSet.mem (Naive_tree.tag tree c) tagset )
+ then Bitvector.set v i true
+ done;
+ v
+