From 343ce6fc6c893c69b4820a17b4b6a0be7cd50d87 Mon Sep 17 00:00:00 2001 From: kim Date: Wed, 28 Apr 2010 06:46:09 +0000 Subject: [PATCH] Safe closure version git-svn-id: svn+ssh://idea.nguyen.vg/svn/sxsi/trunk/xpathcomp@807 3cdefd35-fc62-479d-8e8d-bae585ffb9ca --- OCamlDriver.cpp | 4 +++- main.ml | 6 +++--- utils.ml | 11 +++++++---- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/OCamlDriver.cpp b/OCamlDriver.cpp index 7a97e18..03f06d5 100644 --- a/OCamlDriver.cpp +++ b/OCamlDriver.cpp @@ -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 --- 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 diff --git a/utils.ml b/utils.ml index 2e02bc5..69754f5 100644 --- 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;; -- 2.17.1