| author | wenzelm | 
| Tue, 18 Mar 2014 12:25:17 +0100 | |
| changeset 56202 | 0a11d17eeeff | 
| parent 53292 | f567c1c7b180 | 
| child 56351 | 1c735e46acf0 | 
| permissions | -rw-r--r-- | 
| 45674 | 1 | /* Title: Pure/General/time.scala | 
| 45673 
cd41e3903fbf
separate compilation of PIDE vs. Pure sources, which enables independent Scala library;
 wenzelm parents: 
45667diff
changeset | 2 | Module: PIDE | 
| 40393 | 3 | Author: Makarius | 
| 4 | ||
| 45674 | 5 | Time based on milliseconds. | 
| 40393 | 6 | */ | 
| 7 | ||
| 8 | package isabelle | |
| 9 | ||
| 45664 | 10 | |
| 50298 | 11 | import java.util.Locale | 
| 12 | ||
| 13 | ||
| 40848 
8662b9b1f123
more abstract/uniform handling of time, preferring seconds as Double;
 wenzelm parents: 
40393diff
changeset | 14 | object Time | 
| 40393 | 15 | {
 | 
| 47993 | 16 | def seconds(s: Double): Time = new Time((s * 1000.0).round) | 
| 44699 
5199ee17c7d7
property "tooltip-dismiss-delay" is edited in ms, not seconds;
 wenzelm parents: 
40852diff
changeset | 17 | def ms(m: Long): Time = new Time(m) | 
| 51587 | 18 | val zero: Time = ms(0) | 
| 51533 | 19 | |
| 20 | def print_seconds(s: Double): String = | |
| 21 | String.format(Locale.ROOT, "%.3f", s.asInstanceOf[AnyRef]) | |
| 40393 | 22 | } | 
| 23 | ||
| 46712 | 24 | final class Time private(val ms: Long) | 
| 40848 
8662b9b1f123
more abstract/uniform handling of time, preferring seconds as Double;
 wenzelm parents: 
40393diff
changeset | 25 | {
 | 
| 51587 | 26 | def + (t: Time): Time = new Time(ms + t.ms) | 
| 27 | ||
| 40848 
8662b9b1f123
more abstract/uniform handling of time, preferring seconds as Double;
 wenzelm parents: 
40393diff
changeset | 28 | def seconds: Double = ms / 1000.0 | 
| 40852 | 29 | |
| 30 | def min(t: Time): Time = if (ms < t.ms) this else t | |
| 31 | def max(t: Time): Time = if (ms > t.ms) this else t | |
| 32 | ||
| 53292 
f567c1c7b180
option to insert unique completion immediately into buffer;
 wenzelm parents: 
51587diff
changeset | 33 | def is_zero: Boolean = ms == 0 | 
| 46768 | 34 | def is_relevant: Boolean = ms >= 1 | 
| 35 | ||
| 51587 | 36 | override def hashCode: Int = ms.hashCode | 
| 37 | override def equals(that: Any): Boolean = | |
| 38 |     that match {
 | |
| 39 | case other: Time => ms == other.ms | |
| 40 | case _ => false | |
| 41 | } | |
| 42 | ||
| 51533 | 43 | override def toString = Time.print_seconds(seconds) | 
| 46768 | 44 | |
| 40848 
8662b9b1f123
more abstract/uniform handling of time, preferring seconds as Double;
 wenzelm parents: 
40393diff
changeset | 45 | def message: String = toString + "s" | 
| 
8662b9b1f123
more abstract/uniform handling of time, preferring seconds as Double;
 wenzelm parents: 
40393diff
changeset | 46 | } | 
| 
8662b9b1f123
more abstract/uniform handling of time, preferring seconds as Double;
 wenzelm parents: 
40393diff
changeset | 47 |