8
8
9
9
struct VersionSeed : CustomStringConvertible {
10
10
var value : UInt32
11
-
11
+
12
12
var description : String {
13
13
switch value {
14
- case VersionSeed . zero . value: " empty "
14
+ case VersionSeed . empty . value: " empty "
15
15
case VersionSeed . invalid. value: " invalid "
16
16
default : value. description
17
17
}
18
18
}
19
-
20
- static var zero : VersionSeed { VersionSeed ( value: . zero) }
19
+
20
+ @inline ( __always)
21
+ static var empty : VersionSeed { VersionSeed ( value: . zero) }
22
+
23
+ @inline ( __always)
21
24
static var invalid : VersionSeed { VersionSeed ( value: . max) }
22
-
23
- var isValid : Bool { value != VersionSeed . invalid. value }
24
-
25
- @_transparent
25
+
26
+ @inline ( __always)
27
+ var isInvalid : Bool { value == VersionSeed . invalid. value }
28
+
29
+ @inline ( __always)
30
+ var isEmpty : Bool { value == VersionSeed . empty. value }
31
+
26
32
@inline ( __always)
27
- func merge( _ seed: VersionSeed ) -> VersionSeed {
28
- if isValid, seed. value == . zero {
29
- self
30
- } else if value == . zero, seed. isValid {
31
- seed
32
- } else {
33
- VersionSeed ( value: merge32 ( value, seed. value) )
33
+ mutating func merge( _ other: VersionSeed ) {
34
+ guard !isInvalid, !other. isEmpty else {
35
+ return
34
36
}
37
+ guard !isEmpty, !other. isInvalid else {
38
+ self = other
39
+ return
40
+ }
41
+ self = VersionSeed ( value: merge32 ( value, other. value) )
42
+ }
43
+
44
+ @inline ( __always)
45
+ func merging( _ seed: VersionSeed ) -> VersionSeed {
46
+ var newValue = self
47
+ newValue. merge ( seed)
48
+ return newValue
35
49
}
36
50
}
37
51
@@ -57,11 +71,11 @@ struct VersionSeedTracker<Key: HostPreferenceKey> {
57
71
58
72
struct VersionSeedSetTracker {
59
73
private var values : [ Value ]
60
-
74
+
61
75
mutating func addPreference< Key: HostPreferenceKey > ( _: Key . Type ) {
62
76
values. append ( Value ( key: _AnyPreferenceKey< Key> . self , seed: . invalid) )
63
77
}
64
-
78
+
65
79
mutating func updateSeeds( to preferences: PreferenceList ) {
66
80
for index in values. indices {
67
81
var visitor = UpdateSeedVisitor ( preferences: preferences, seed: nil )
@@ -86,17 +100,17 @@ extension VersionSeedSetTracker {
86
100
let preferences : PreferenceList
87
101
var seed : VersionSeed
88
102
var matches : Bool ?
89
-
103
+
90
104
mutating func visit( key: ( some PreferenceKey ) . Type) {
91
105
let valueSeed = preferences [ key] . seed
92
- matches = seed. isValid && valueSeed. isValid && seed. value == valueSeed. value
106
+ matches = ! seed. isInvalid && ! valueSeed. isInvalid && seed. value == valueSeed. value
93
107
}
94
108
}
95
-
109
+
96
110
private struct UpdateSeedVisitor : PreferenceKeyVisitor {
97
111
let preferences : PreferenceList
98
112
var seed : VersionSeed ?
99
-
113
+
100
114
mutating func visit( key: ( some PreferenceKey ) . Type) {
101
115
seed = preferences [ key] . seed
102
116
}
0 commit comments