-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 table_qtree = QTreeHash.create 97
+
+
+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
+