open Table
-let compteur = ref 0
+let query_tree_size = ref 0
+
let table_qtree = QTreeHash.create 97
match q.desc with
| Start -> start
| Dom -> Bitvector.create ~init:true (Naive_tree.size tree)
- (*let v = Bitvector.create (Naive_tree.size tree) in
- for i=0 to (Bitvector.length v)-1 do
- Bitvector.set v i true
- done;
- v*)
| Tag (t,k) -> element_by_tag tree t k
| Axis (a,q1) -> let v = eval_qtree tree start q1 in
eval_axis tree v a
| Binop (op,q1,q2)-> begin
let v1 = eval_qtree tree start q1 in
let v2 = eval_qtree tree start q2 in
+ Table.node_compteur := !Table.node_compteur + 2*Bitvector.length v1;
match op with
| Union -> Bitvector.union v1 v2
| Inter -> Bitvector.inter v1 v2
end
in
QTreeHash.add table_qtree q res;
- compteur := !compteur + Bitvector.length res; (*????8*)
res
end
in
(* debug tree q resultat;*)
+ incr query_tree_size;
resultat
+let node_compteur = ref 0
+
type query_tree_desc = Binop of op * query_tree * query_tree
| Axis of Xpath.Ast.axis * query_tree
| Start
else let n1 = Naive_tree.first_child tree n in
let j = Naive_tree.preorder tree n in
Bitvector.set acc j true;
+ incr node_compteur;
let acc1 = aux n1 acc in
let n2 = Naive_tree.next_sibling tree n in
aux n2 acc1
in
let v0 = Bitvector.create (Naive_tree.size tree) in
- (* let v = bitvector_of_nodes tree ln in*)
if c then begin
for i = 0 to (Bitvector.length v)-1 do
if Bitvector.get v i then
let n = Naive_tree.by_preorder tree i in
let n1 = Naive_tree.first_child tree n in
let _ = aux n1 v0 in
- Bitvector.set v0 i true
+ Bitvector.set v0 i true;
+ incr node_compteur
done; end
else
for i = 0 to (Bitvector.length v)-1 do
else
let n1 = Naive_tree.next_sibling tree n in
Bitvector.set acc (Naive_tree.preorder tree n) true;
+ incr node_compteur;
aux n1 acc
in
let v0 = Bitvector.create (Naive_tree.size tree) in
- (*let v = bitvector_of_nodes tree ln in*)
for i = 0 to (Bitvector.length v)-1 do
if Bitvector.get v i then
let n = Naive_tree.by_preorder tree i in
if n1 == Naive_tree.nil then acc
else begin
Bitvector.set acc (Naive_tree.preorder tree n1) true;
+ incr node_compteur;
aux n1 acc end
in
let v0 = Bitvector.create (Naive_tree.size tree) in
- (* let v = bitvector_of_nodes tree ln in*)
for i = 0 to (Bitvector.length v)-1 do
if Bitvector.get v i then
let n = Naive_tree.by_preorder tree i in
let get_parent tree v =
let v0 = Bitvector.create (Naive_tree.size tree) in
- (* let v = bitvector_of_nodes tree ln in*)
for i = 0 to (Bitvector.length v)-1 do
if Bitvector.get v i then
let n = Naive_tree.by_preorder tree i in
let n1 = get_firstBling tree n Naive_tree.nil in
let n2 = Naive_tree.parent_of_first tree n1 in
if n2 != Naive_tree.nil then begin let j = Naive_tree.preorder tree n2 in
- Bitvector.set v0 j true
+ Bitvector.set v0 j true;
+ incr node_compteur
end
done;
v0
let get_ancestor tree b v =
let v0 = Bitvector.create (Naive_tree.size tree) in
- (* let v = bitvector_of_nodes tree ln in *)
if b then
begin
for i = (Bitvector.length v)-1 downto 0 do
if Bitvector.get v i then
begin
Bitvector.set v0 i true;
+ incr node_compteur;
let n = Naive_tree.by_preorder tree i in
let n0 = ref n in
while !n0 != Naive_tree.nil do
if n2 != Naive_tree.nil then begin let j = Naive_tree.preorder tree n2 in
Bitvector.set v0 j true;
Bitvector.set v j true;
+ node_compteur := !node_compteur + 2;
end
done;
end
if n2 != Naive_tree.nil then begin let j = Naive_tree.preorder tree n2 in
Bitvector.set v0 j true;
Bitvector.set v j true;
+ node_compteur := !node_compteur + 2;
end
done;
end
if n1 == Naive_tree.nil then acc
else begin
Bitvector.set acc (Naive_tree.preorder tree n1) true;
+ incr node_compteur;
aux n1 acc end
in
let v0 = Bitvector.create (Naive_tree.size tree) in
- (* let v = bitvector_of_nodes tree ln in*)
for i = 0 to (Bitvector.length v)-1 do
if Bitvector.get v i then
let n = Naive_tree.by_preorder tree i in