Safe closure version
authorkim <kim@3cdefd35-fc62-479d-8e8d-bae585ffb9ca>
Wed, 28 Apr 2010 06:46:09 +0000 (06:46 +0000)
committerkim <kim@3cdefd35-fc62-479d-8e8d-bae585ffb9ca>
Wed, 28 Apr 2010 06:46:09 +0000 (06:46 +0000)
git-svn-id: svn+ssh://idea.nguyen.vg/svn/sxsi/trunk/xpathcomp@807 3cdefd35-fc62-479d-8e8d-bae585ffb9ca

OCamlDriver.cpp
main.ml
utils.ml

index 7a97e18..03f06d5 100644 (file)
@@ -791,7 +791,9 @@ int iterfcns(XMLTree* tree, treeNode node){
   if (node == NULLT)
     return 0;
   else {
-    return 1+ iterfcns(tree,tree->NextSibling(node)) + iterfcns(tree,tree->FirstChild(node));    
+    int tmp = iterfcns(tree,tree->FirstElement(node));
+    tmp += iterfcns(tree,tree->NextElement(node));
+    return tmp+1;    
   };
 }
 
diff --git a/main.ml b/main.ml
index 0573e4a..0064adc 100644 (file)
--- a/main.ml
+++ b/main.ml
@@ -94,9 +94,9 @@ let main v query_string output =
       in
       let _ = Printf.eprintf "Number of nodes %i\n%!" (Tree.size v) in
 (*      let _ = test_text v in *)
-(*      let _ = Tree.stats v in
+(*      let _ = Tree.stats v in *)
       let _ = Printf.eprintf "Timing first_child/next_sibling %!" in
-      let _ = time (Tree.benchmark_fcns)  v in
+      let _ = time ~count:5 (Tree.benchmark_fcns)  v in (*
       let _ = Printf.eprintf "Timing last_child/prev_sibling %!" in
       let _ = time (Tree.benchmark_lcps)  v in
       let _ = Printf.eprintf "Timing jump to a %!" in
@@ -195,7 +195,7 @@ let main v query_string output =
                  if !Options.backward then Printf.eprintf "WARNING: couldn't find a jumping point, running top-down\n" 
                in
                if !Options.count_only then
-                 let r = time_mem ( top_down_count auto ) v in 
+                 let r = time ~count:5 ( top_down_count auto ) v in 
                  let _ = Printf.eprintf "Number of nodes in the result set : %i\n%!" r
                  in ()
                else      
index 2e02bc5..69754f5 100644 (file)
--- a/utils.ml
+++ b/utils.ml
@@ -83,14 +83,17 @@ let time_mem f x =
     Printf.eprintf "Final Mem: %s\n\n\n%!" s2;
     r
 ;;
-let time f x =
+let time f ?(count=1) x =
+  let rec loop i = 
   let t1 = Unix.gettimeofday () in
   let r = f x in
   let t2 = Unix.gettimeofday () in 
   let t = (1000. *. (t2 -. t1)) in
-    l:= t::!l;
-    Printf.eprintf "  %fms\n%!" t ;
-    r
+  if i > count then  (l:= t::!l;r)
+  else begin
+  Printf.eprintf "run %i/%i,  %fms\n%!" i count t;
+  loop (i+1) end
+  in loop 1
 ;;
 let total_time () =  List.fold_left (+.) 0. !l;;