5
5
// Audited for RELEASE_2021
6
6
// Status: Complete
7
7
8
+ #if canImport(QuartzCore)
9
+ import QuartzCore
10
+ #endif
11
+
8
12
struct Time : Comparable , Hashable {
9
13
var seconds : Double
10
14
@@ -14,4 +18,76 @@ struct Time: Comparable, Hashable {
14
18
15
19
static let zero = Time ( seconds: . zero)
16
20
static let infinity = Time ( seconds: . infinity)
21
+
22
+ #if canImport(QuartzCore)
23
+ @inline ( __always)
24
+ static var now : Time {
25
+ Time ( seconds: CACurrentMediaTime ( ) )
26
+ }
27
+ #endif
28
+
29
+ @inline ( __always)
30
+ private init ( seconds: Double ) {
31
+ self . seconds = seconds
32
+ }
33
+
34
+ @inline ( __always)
35
+ static func seconds( _ value: Double ) -> Time {
36
+ Time ( seconds: value)
37
+ }
38
+
39
+ @inline ( __always)
40
+ static func seconds( _ value: Int ) -> Time {
41
+ Time ( seconds: Double ( value) )
42
+ }
43
+
44
+ @inline ( __always)
45
+ static func microseconds( _ value: Double ) -> Time {
46
+ Time ( seconds: value * 1e-3 )
47
+ }
48
+
49
+ @inline ( __always)
50
+ static func milliseconds( _ value: Double ) -> Time {
51
+ Time ( seconds: value * 1e-6 )
52
+ }
53
+
54
+ @inline ( __always)
55
+ static func nanoseconds( _ value: Double ) -> Time {
56
+ Time ( seconds: value * 1e-9 )
57
+ }
58
+
59
+ @inline ( __always)
60
+ static func += ( lhs: inout Time , rhs: Time ) {
61
+ lhs. seconds = lhs. seconds + rhs. seconds
62
+ }
63
+
64
+ @inline ( __always)
65
+ static func + ( lhs: Time , rhs: Time ) -> Time {
66
+ Time ( seconds: lhs. seconds + rhs. seconds)
67
+ }
68
+
69
+ @inline ( __always)
70
+ static func -= ( lhs: inout Time , rhs: Time ) {
71
+ lhs. seconds = lhs. seconds - rhs. seconds
72
+ }
73
+
74
+ @inline ( __always)
75
+ static func - ( lhs: Time , rhs: Time ) -> Time {
76
+ Time ( seconds: lhs. seconds - rhs. seconds)
77
+ }
78
+
79
+ @inline ( __always)
80
+ mutating func advancing( by seconds: Double ) {
81
+ self . seconds += seconds
82
+ }
83
+
84
+ @inline ( __always)
85
+ func advanced( by seconds: Double ) -> Time {
86
+ Time ( seconds: self . seconds + seconds)
87
+ }
88
+
89
+ @inline ( __always)
90
+ func distance( to other: Time ) -> Double {
91
+ seconds. distance ( to: other. seconds)
92
+ }
17
93
}
0 commit comments