| author | desharna | 
| Sat, 04 Jun 2022 16:00:14 +0200 | |
| changeset 75504 | 75e1b94396c6 | 
| parent 75393 | 87ebf5a50283 | 
| child 78357 | 0cecb7236298 | 
| permissions | -rw-r--r-- | 
| 45674 | 1 | /* Title: Pure/General/time.scala | 
| 40393 | 2 | Author: Makarius | 
| 3 | ||
| 45674 | 4 | Time based on milliseconds. | 
| 40393 | 5 | */ | 
| 6 | ||
| 7 | package isabelle | |
| 8 | ||
| 45664 | 9 | |
| 50298 | 10 | import java.util.Locale | 
| 64056 | 11 | import java.time.Instant | 
| 50298 | 12 | |
| 13 | ||
| 75393 | 14 | object Time {
 | 
| 47993 | 15 | def seconds(s: Double): Time = new Time((s * 1000.0).round) | 
| 74158 | 16 | def minutes(m: Double): Time = new Time((m * 60000.0).round) | 
| 17 | def ms(ms: Long): Time = new Time(ms) | |
| 63700 | 18 | def hms(h: Int, m: Int, s: Double): Time = seconds(s + 60 * m + 3600 * h) | 
| 63686 | 19 | |
| 61528 | 20 | def now(): Time = ms(System.currentTimeMillis()) | 
| 21 | ||
| 51587 | 22 | val zero: Time = ms(0) | 
| 51533 | 23 | |
| 24 | def print_seconds(s: Double): String = | |
| 25 | String.format(Locale.ROOT, "%.3f", s.asInstanceOf[AnyRef]) | |
| 64056 | 26 | |
| 64058 | 27 | def instant(t: Instant): Time = ms(t.getEpochSecond * 1000L + t.getNano / 1000000L) | 
| 40393 | 28 | } | 
| 29 | ||
| 75393 | 30 | final class Time private(val ms: Long) extends AnyVal {
 | 
| 65616 | 31 | def proper_ms: Option[Long] = if (ms == 0) None else Some(ms) | 
| 32 | ||
| 40848 
8662b9b1f123
more abstract/uniform handling of time, preferring seconds as Double;
 wenzelm parents: 
40393diff
changeset | 33 | def seconds: Double = ms / 1000.0 | 
| 63688 
cc57255bf6ae
gnuplot presentation similar to former isatest-statistics;
 wenzelm parents: 
63686diff
changeset | 34 | def minutes: Double = ms / 60000.0 | 
| 40852 | 35 | |
| 56691 | 36 | def + (t: Time): Time = new Time(ms + t.ms) | 
| 37 | def - (t: Time): Time = new Time(ms - t.ms) | |
| 38 | ||
| 61602 | 39 | def compare(t: Time): Int = ms compare t.ms | 
| 56691 | 40 | def < (t: Time): Boolean = ms < t.ms | 
| 41 | def <= (t: Time): Boolean = ms <= t.ms | |
| 42 | def > (t: Time): Boolean = ms > t.ms | |
| 43 | def >= (t: Time): Boolean = ms >= t.ms | |
| 44 | ||
| 45 | def min(t: Time): Time = if (this < t) this else t | |
| 46 | def max(t: Time): Time = if (this > t) this else t | |
| 40852 | 47 | |
| 53292 
f567c1c7b180
option to insert unique completion immediately into buffer;
 wenzelm parents: 
51587diff
changeset | 48 | def is_zero: Boolean = ms == 0 | 
| 46768 | 49 | def is_relevant: Boolean = ms >= 1 | 
| 50 | ||
| 57912 | 51 | override def toString: String = Time.print_seconds(seconds) | 
| 46768 | 52 | |
| 40848 
8662b9b1f123
more abstract/uniform handling of time, preferring seconds as Double;
 wenzelm parents: 
40393diff
changeset | 53 | def message: String = toString + "s" | 
| 62571 | 54 | |
| 75393 | 55 |   def message_hms: String = {
 | 
| 62571 | 56 | val s = ms / 1000 | 
| 57 | String.format(Locale.ROOT, "%d:%02d:%02d", | |
| 71163 | 58 | java.lang.Long.valueOf(s / 3600), | 
| 59 | java.lang.Long.valueOf((s / 60) % 60), | |
| 60 | java.lang.Long.valueOf(s % 60)) | |
| 62571 | 61 | } | 
| 64056 | 62 | |
| 63 | def instant: Instant = Instant.ofEpochMilli(ms) | |
| 71684 | 64 | |
| 73702 
7202e12cb324
tuned signature --- following hints by IntelliJ IDEA;
 wenzelm parents: 
73385diff
changeset | 65 | def sleep(): Unit = Thread.sleep(ms) | 
| 40848 
8662b9b1f123
more abstract/uniform handling of time, preferring seconds as Double;
 wenzelm parents: 
40393diff
changeset | 66 | } |