X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=src%2Ftable.ml;h=1c10693bdab68888e3a51830e7b3b094d3e555d8;hp=c40e93b9df2c0a10b0d984f8ff017c93d17516f6;hb=refs%2Fheads%2Ffeature%2Fstage-huibo;hpb=c5480c3711c7431e70f78871c738f2d86ecb96ac diff --git a/src/table.ml b/src/table.ml index c40e93b..1c10693 100644 --- a/src/table.ml +++ b/src/table.ml @@ -1,4 +1,6 @@ +let node_compteur = ref 0 + type query_tree_desc = Binop of op * query_tree * query_tree | Axis of Xpath.Ast.axis * query_tree | Start @@ -150,19 +152,20 @@ let get_descendant tree c v = 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 @@ -179,10 +182,10 @@ let get_child tree v = 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 @@ -198,10 +201,10 @@ let get_followingSibling tree v = 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 @@ -215,27 +218,27 @@ let rec get_firstBling tree n pred = 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 @@ -245,6 +248,7 @@ let get_ancestor tree b v = 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 @@ -263,6 +267,7 @@ let get_ancestor tree b v = 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 @@ -275,10 +280,10 @@ let get_preSibling tree v = 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