- if !Options.count_only then
- let r = time ( run_count auto )v in
- let _ = Printf.eprintf "Number of nodes in the result set : %i\n%!" r
- in ()
- else
-(* let _ = Gc.set ({ Gc.get() with Gc.max_overhead = 1000000; Gc.space_overhead = 100 }) in *)
- let result,rcount = time (if !Options.time then run_time auto else run auto) v in
- Printf.eprintf "Number of nodes in the result set : %i\n" rcount;
- Printf.eprintf "\n%!";
- begin
- match output with
- | None -> ()
- | Some f ->
- Printf.eprintf "Serializing results : ";
- time( fun () ->
- let oc = open_out f in
- output_string oc "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
- TS.iter (fun t ->
- Tree.print_xml_fast oc t;
- output_char oc '\n') result) ();
- end;
+ let _ = Gc.full_major();Gc.compact() in
+ let _ = Printf.eprintf "%!" in
+ let _ = Gc.set (tuned_gc) in
+ if !Options.backward && ((snd test_list) != `NOTHING )then
+ if !Options.count_only then
+ let r = time_mem (bottom_up_count auto v )(snd test_list) in
+ let _ = Printf.eprintf "Number of nodes in the result set : %i\n%!" r
+ in ()
+ else begin
+ let r = time_mem (bottom_up auto v )(snd test_list) in
+ let _ = Printf.eprintf "Number of nodes in the result set : %i\n%!" (IdSet.length r)
+ in
+ match output with
+
+ | None -> ()
+ | Some f ->
+ Printf.eprintf "Serializing results : ";
+ time( fun () ->
+ (*let oc = open_out f in *)
+ let oc = Unix.openfile f [ Unix.O_WRONLY;Unix.O_TRUNC;Unix.O_CREAT] 0o644 in
+ (*output_string oc "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";*)
+ IdSet.iter (fun t ->
+ Tree.print_xml_fast3 v t oc;
+ (*output_char oc '\n'; *)
+ ) r) ();
+ end
+
+ else
+ let _ =
+ 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 ~count:5 ( top_down_count1 auto ) v in
+ let _ = Printf.eprintf "Number of nodes in the result set : %i\n%!" r
+ in ()
+ else
+ let module GR = Ata.Test(struct let doc = v end) in
+ let result = time ~count:5 (GR.top_down1 auto) v in
+ let _ = Printf.eprintf "Counting results " in
+ let rcount = time (GR.Results.length) result in
+ Printf.eprintf "Number of nodes in the result set : %i\n" rcount;
+ Printf.eprintf "\n%!";
+ begin
+ match output with
+ | None -> ()
+ | Some f ->
+ Printf.eprintf "Serializing results : ";
+ time( fun () ->
+ (*let oc = open_out f in *)
+ let oc = Unix.openfile f [ Unix.O_WRONLY;Unix.O_TRUNC;Unix.O_CREAT] 0o644 in
+ (*output_string oc "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";*)
+ let t1 = ref (Unix.gettimeofday()) in
+ let count = ref 1 in
+ let old_count = ref 1 in
+ GR.Results.iter (fun t ->
+ incr count;
+ begin
+ if (!count mod 15) == 0
+ then
+ let t2 = Unix.gettimeofday() in
+ let _ = Printf.eprintf "Printing %i elements in %f ms\n"
+ (!count - !old_count) (1000. *.(t2 -. !t1))
+ in
+ ( old_count := !count; t1 := Unix.gettimeofday())
+ end;
+ Tree.print_xml_fast3 v t oc;
+ (*output_char oc '\n'; *)
+ ) result) ();
+ end;