une version marché et correcte avec bitvector
[tatoo.git] / src / table_driver.ml
index 767cfdc..e961abb 100644 (file)
@@ -5,6 +5,8 @@ open Query_tree
 let parse_xpath p =
   Xpath.Parser.parse (Ulexing.from_utf8_string p)
 
+let display = ref false
+
 let main () = 
   let () = Table_options.parse () in
   let doc =
@@ -18,27 +20,36 @@ let main () =
     close_fd(); 
     doc
   in
-  (*Hashtbl.clear Query_tree.table_query_tree;  il faut vider le hashtbl?????????????????*)
   let queries =
     List.map ( fun q ->
       parse_xpath q) 
       !Table_options.queries
   in
+  let t1 = Unix.gettimeofday () in
   let query_tree_list =
     List.map (fun query -> compile_xpath query) queries
   in
   let mini_qtree_list = 
     List.map (fun qtree -> Query_tree.minimize_qtree qtree) query_tree_list 
   in
+  let root = Bitvector.create (Naive_tree.size doc) in
+  Bitvector.set root 0 true;
   List.iter ( fun q -> 
-    let res = eval_qtree doc [ (Naive_tree.root doc) ] q in
-    print_string "<xml_result num=\"1\" >\n";
-    print_node_list doc res;
-    print_string "</xml_result>\n";
+    let v = eval_qtree doc root q in
+    if !display then begin
+      let res = decode_bit doc v in
+      
+      print_string "<xml_result num=\"1\" >\n";
+      print_node_list doc res;
+      print_string "</xml_result>\n";
+    end;
+    ()
   ) mini_qtree_list ;
   
+  let t2 = Unix.gettimeofday () in
+  let t = (t2 -. t1) *. 1000. in
   let _ = if !Table_options.count then 
-       Format.fprintf Format.std_formatter "there are %i nodes\n" !Query_tree.compteur;
+       Format.fprintf Format.std_formatter "there are %i nodes\nit takes %fms\n" !Query_tree.compteur t;
   in
   exit 0