From 7d5819edfd1d1ff5bba6a62e55b9acd7277239bd Mon Sep 17 00:00:00 2001
From: Erwan Jahier <erwan.jahier@univ-grenoble-alpes.fr>
Date: Wed, 19 Feb 2020 08:55:17 +0100
Subject: [PATCH] Update: compute the move and round numbers in batch (core)
 mode.

---
 src/sasaMain.ml | 32 +++++++++++++++++++++++++-------
 1 file changed, 25 insertions(+), 7 deletions(-)

diff --git a/src/sasaMain.ml b/src/sasaMain.ml
index 411ba1d5..149c632f 100644
--- a/src/sasaMain.ml
+++ b/src/sasaMain.ml
@@ -31,17 +31,34 @@ let (print_step : int -> int -> SasArg.t -> 'v Env.t -> 'v Process.t list -> str
   )
   
 exception Silent of int
-
+let moves  = ref 0
+let rounds = ref 0
+let round_mask = ref []
+    
+let (update_round : bool list list -> bool list list -> unit) =
+  fun acti_ll enab_ll ->
+  if !round_mask = [] then round_mask := enab_ll;
+  round_mask := List.map2 (List.map2 (&&)) !round_mask enab_ll;
+  round_mask := List.map2 (List.map2 (fun m a -> m && not a)) !round_mask acti_ll;
+  if List.for_all (List.for_all (not)) !round_mask then (
+    round_mask := enab_ll;
+    incr rounds
+  );
+  ()
+  
 let (simustep: int -> int -> SasArg.t -> string -> 
       ('v Process.t * 'v Register.neighbor list) list -> 'v Env.t -> 'v Env.t * string) =
   fun n i args activate_val pl_n e ->
     (* 1: Get enable processes *)
     let all, enab_ll = Sasacore.Main.get_enable_processes pl_n e in
     let pl = fst(List.split pl_n) in
+    List.iter (List.iter (fun b -> if b then incr moves)) enab_ll;
+    
     if
       not (args.rif) && List.for_all (fun b -> not b) (List.flatten enab_ll)
     then (
       print_step n i args e pl activate_val enab_ll;
+      incr rounds;
       raise (Silent (n-i+1))
     ) else 
     if args.daemon = Daemon.Custom then
@@ -51,6 +68,7 @@ let (simustep: int -> int -> SasArg.t -> string ->
     let next_activate_val, pnal = Daemon.f args.dummy_input
         (args.verbose > 1) args.daemon pl all enab_ll get_action_value 
     in
+    update_round next_activate_val enab_ll;
     let next_activate_val =
       String.concat " " 
         (List.map
@@ -68,11 +86,10 @@ let (simustep: int -> int -> SasArg.t -> string ->
 let rec (simuloop: int -> int -> SasArg.t -> string -> 
          ('v Process.t * 'v Register.neighbor list) list -> 'v Env.t -> unit) =
   fun n i args activate_val pl_n e ->
-
-    let ne, next_activate_val = simustep n i args activate_val pl_n e in
-    if i > 0 then simuloop n (i-1) args next_activate_val pl_n ne else (
-      print_string "#q\n"; flush stdout
-)
+  let ne, next_activate_val = simustep n i args activate_val pl_n e in
+  if i > 0 then simuloop n (i-1) args next_activate_val pl_n ne else (
+    print_string "#q\n"; flush stdout
+  )
 
 let () =
   let args, pl_n, e = Sasacore.Main.make true Sys.argv in
@@ -83,7 +100,8 @@ let () =
   | Failure msg -> Printf.eprintf " [sasa] Error: %s\n%!" msg
   | Silent i ->
     let str = if args.rif then "#" else "" in
-    Printf.eprintf "\n%sThis algo is silent after %i steps\n" str i ;
+    Printf.eprintf "\n%sThis algo is silent after %i moves, %i steps, %i rounds.\n"
+      str !moves i !rounds;
     flush stderr;
     flush stdout;
     print_string "\n#quit\n"; 
-- 
GitLab