Theory Promela.PromelaStatistics
theory PromelaStatistics
imports 
  CAVA_Base.CAVA_Base
begin
code_printing
  code_module PromelaStatistics ⇀ (SML) ‹
    structure PromelaStatistics = struct
      val active = Unsynchronized.ref false
      val parseTime = Unsynchronized.ref Time.zeroTime
      val time = Unsynchronized.ref Time.zeroTime
      fun is_active () = !active
      fun start () = (
            active := true; 
            if !parseTime = Time.zeroTime then () else parseTime := Time.- (Time.now (), !parseTime);
            time := Time.now ())
      fun start_parse () = (active := true; parseTime := Time.now())
      fun stop_timer () = (time := Time.- (Time.now (), !time))
      fun to_string () = let
        val t = Time.toMilliseconds (!time)
        val pt = Time.toMilliseconds (!parseTime)
      in
        (if pt = 0 then "" else 
        "Parsing time : " ^ IntInf.toString pt ^ "ms\n")
      ^ "Building time: " ^ IntInf.toString t ^ "ms\n"
      end
        
      val _ = Statistics.register_stat ("Promela",is_active,to_string)
    end
›
code_reserved (SML) PromelaStatistics
ML_val ‹@{code hd}›
consts 
  start :: "unit ⇒ unit"
  start_parse :: "unit ⇒ unit"
  stop_timer :: "unit ⇒ unit"
code_printing
  constant start ⇀ (SML) "PromelaStatistics.start"
| constant start_parse ⇀ (SML) "PromelaStatistics.start'_parse"
| constant stop_timer ⇀ (SML) "PromelaStatistics.stop'_timer"
hide_const (open) start start_parse stop_timer
end