| author | wenzelm | 
| Tue, 23 Feb 2016 16:20:12 +0100 | |
| changeset 62387 | ad3eb2889f9a | 
| parent 61602 | a2f0f659a3c2 | 
| child 62571 | 2fd90993a928 | 
| 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: 
45667 
diff
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: 
40393 
diff
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: 
40852 
diff
changeset
 | 
17  | 
def ms(m: Long): Time = new Time(m)  | 
| 61528 | 18  | 
def now(): Time = ms(System.currentTimeMillis())  | 
19  | 
||
| 51587 | 20  | 
val zero: Time = ms(0)  | 
| 61528 | 21  | 
val start: Time = now()  | 
| 51533 | 22  | 
|
23  | 
def print_seconds(s: Double): String =  | 
|
24  | 
String.format(Locale.ROOT, "%.3f", s.asInstanceOf[AnyRef])  | 
|
| 40393 | 25  | 
}  | 
26  | 
||
| 56351 | 27  | 
final class Time private(val ms: Long) extends AnyVal  | 
| 
40848
 
8662b9b1f123
more abstract/uniform handling of time, preferring seconds as Double;
 
wenzelm 
parents: 
40393 
diff
changeset
 | 
28  | 
{
 | 
| 
 
8662b9b1f123
more abstract/uniform handling of time, preferring seconds as Double;
 
wenzelm 
parents: 
40393 
diff
changeset
 | 
29  | 
def seconds: Double = ms / 1000.0  | 
| 40852 | 30  | 
|
| 56691 | 31  | 
def + (t: Time): Time = new Time(ms + t.ms)  | 
32  | 
def - (t: Time): Time = new Time(ms - t.ms)  | 
|
33  | 
||
| 61602 | 34  | 
def compare(t: Time): Int = ms compare t.ms  | 
| 56691 | 35  | 
def < (t: Time): Boolean = ms < t.ms  | 
36  | 
def <= (t: Time): Boolean = ms <= t.ms  | 
|
37  | 
def > (t: Time): Boolean = ms > t.ms  | 
|
38  | 
def >= (t: Time): Boolean = ms >= t.ms  | 
|
39  | 
||
40  | 
def min(t: Time): Time = if (this < t) this else t  | 
|
41  | 
def max(t: Time): Time = if (this > t) this else t  | 
|
| 40852 | 42  | 
|
| 
53292
 
f567c1c7b180
option to insert unique completion immediately into buffer;
 
wenzelm 
parents: 
51587 
diff
changeset
 | 
43  | 
def is_zero: Boolean = ms == 0  | 
| 46768 | 44  | 
def is_relevant: Boolean = ms >= 1  | 
45  | 
||
| 57912 | 46  | 
override def toString: String = Time.print_seconds(seconds)  | 
| 46768 | 47  | 
|
| 
40848
 
8662b9b1f123
more abstract/uniform handling of time, preferring seconds as Double;
 
wenzelm 
parents: 
40393 
diff
changeset
 | 
48  | 
def message: String = toString + "s"  | 
| 
 
8662b9b1f123
more abstract/uniform handling of time, preferring seconds as Double;
 
wenzelm 
parents: 
40393 
diff
changeset
 | 
49  | 
}  | 
| 
 
8662b9b1f123
more abstract/uniform handling of time, preferring seconds as Double;
 
wenzelm 
parents: 
40393 
diff
changeset
 | 
50  |