@@ -38,170 +38,70 @@ extension ProgressManager {
38
38
}
39
39
40
40
internal func getUpdatedDoubleSummary( property: MetatypeWrapper < Double , Double > ) -> Double {
41
+ // Collect information from state
42
+ let updateInfo = state. withLock { state in
43
+ state. getDoubleSummaryUpdateInfo ( property: property)
44
+ }
45
+
46
+ // Get updated summary for each dirty child
47
+ let updatedSummaries = updateInfo. dirtyChildren. map { ( index, child) in
48
+ State . DoubleSummaryUpdate ( index: index, updatedSummary: child. getUpdatedDoubleSummary ( property: property) )
49
+ }
50
+
51
+ // Consolidate updated values
41
52
return state. withLock { state in
42
-
43
- var value : Double = property. defaultSummary
44
- property. reduce ( & value, state. propertiesDouble [ property] ?? property. defaultValue)
45
-
46
- guard !state. children. isEmpty else {
47
- return value
48
- }
49
-
50
- for (idx, childState) in state. children. enumerated ( ) {
51
- if let childPropertyState = childState. childPropertiesDouble [ property] {
52
- if childPropertyState. isDirty {
53
- // Update dirty path
54
- if let child = childState. child {
55
- let updatedSummary = child. getUpdatedDoubleSummary ( property: property)
56
- let newChildPropertyState = PropertyStateDouble ( value: updatedSummary, isDirty: false )
57
- state. children [ idx] . childPropertiesDouble [ property] = newChildPropertyState
58
- value = property. merge ( value, updatedSummary)
59
- }
60
- } else {
61
- if let _ = childState. child {
62
- // Merge non-dirty, updated value
63
- value = property. merge ( value, childPropertyState. value)
64
- } else {
65
- value = property. finalSummary ( value, childPropertyState. value)
66
- }
67
- }
68
- } else {
69
- // First fetch of value
70
- if let child = childState. child {
71
- let childSummary = child. getUpdatedDoubleSummary ( property: property)
72
- let newChildPropertyState = PropertyStateDouble ( value: childSummary, isDirty: false )
73
- state. children [ idx] . childPropertiesDouble [ property] = newChildPropertyState
74
- value = property. merge ( value, childSummary)
75
- }
76
- }
77
- }
78
- return value
53
+ state. updateDoubleSummary ( updateInfo, updatedSummaries)
79
54
}
80
55
}
81
56
82
57
internal func getUpdatedStringSummary( property: MetatypeWrapper < String ? , [ String ? ] > ) -> [ String ? ] {
58
+ // Collect information from state
59
+ let updateInfo = state. withLock { state in
60
+ state. getStringSummaryUpdateInfo ( property: property)
61
+ }
62
+
63
+ // Get updated summary for each dirty child
64
+ let updatedSummaries = updateInfo. dirtyChildren. map { ( index, child) in
65
+ State . StringSummaryUpdate ( index: index, updatedSummary: child. getUpdatedStringSummary ( property: property) )
66
+ }
67
+
68
+ // Consolidate updated values
83
69
return state. withLock { state in
84
-
85
- var value : [ String ? ] = property. defaultSummary
86
- property. reduce ( & value, state. propertiesString [ property] ?? property. defaultValue)
87
-
88
- guard !state. children. isEmpty else {
89
- return value
90
- }
91
-
92
- for (idx, childState) in state. children. enumerated ( ) {
93
- if let childPropertyState = childState. childPropertiesString [ property] {
94
- if childPropertyState. isDirty {
95
- // Update dirty path
96
- if let child = childState. child {
97
- let updatedSummary = child. getUpdatedStringSummary ( property: property)
98
- let newChildPropertyState = PropertyStateString ( value: updatedSummary, isDirty: false )
99
- state. children [ idx] . childPropertiesString [ property] = newChildPropertyState
100
- value = property. merge ( value, updatedSummary)
101
- }
102
- } else {
103
- if let _ = childState. child {
104
- // Merge non-dirty, updated value
105
- value = property. merge ( value, childPropertyState. value)
106
- } else {
107
- value = property. finalSummary ( value, childPropertyState. value)
108
- }
109
- }
110
- } else {
111
- // First fetch of value
112
- if let child = childState. child {
113
- let childSummary = child. getUpdatedStringSummary ( property: property)
114
- let newChildPropertyState = PropertyStateString ( value: childSummary, isDirty: false )
115
- state. children [ idx] . childPropertiesString [ property] = newChildPropertyState
116
- value = property. merge ( value, childSummary)
117
- }
118
- }
119
- }
120
- return value
70
+ state. updateStringSummary ( updateInfo, updatedSummaries)
121
71
}
122
72
}
123
73
124
74
internal func getUpdatedURLSummary( property: MetatypeWrapper < URL ? , [ URL ? ] > ) -> [ URL ? ] {
75
+ // Collect information from state
76
+ let updateInfo = state. withLock { state in
77
+ state. getURLSummaryUpdateInfo ( property: property)
78
+ }
79
+
80
+ // Get updated summary for each dirty child
81
+ let updatedSummaries = updateInfo. dirtyChildren. map { ( index, child) in
82
+ State . URLSummaryUpdate ( index: index, updatedSummary: child. getUpdatedURLSummary ( property: property) )
83
+ }
84
+
85
+ // Consolidate updated values
125
86
return state. withLock { state in
126
-
127
- var value : [ URL ? ] = property. defaultSummary
128
- property. reduce ( & value, state. propertiesURL [ property] ?? property. defaultValue)
129
-
130
- guard !state. children. isEmpty else {
131
- return value
132
- }
133
-
134
- for (idx, childState) in state. children. enumerated ( ) {
135
- if let childPropertyState = childState. childPropertiesURL [ property] {
136
- if childPropertyState. isDirty {
137
- // Update dirty path
138
- if let child = childState. child {
139
- let updatedSummary = child. getUpdatedURLSummary ( property: property)
140
- let newChildPropertyState = PropertyStateURL ( value: updatedSummary, isDirty: false )
141
- state. children [ idx] . childPropertiesURL [ property] = newChildPropertyState
142
- value = property. merge ( value, updatedSummary)
143
- }
144
- } else {
145
- if let _ = childState. child {
146
- // Merge non-dirty, updated value
147
- value = property. merge ( value, childPropertyState. value)
148
- } else {
149
- value = property. finalSummary ( value, childPropertyState. value)
150
- }
151
- }
152
- } else {
153
- // First fetch of value
154
- if let child = childState. child {
155
- let childSummary = child. getUpdatedURLSummary ( property: property)
156
- let newChildPropertyState = PropertyStateURL ( value: childSummary, isDirty: false )
157
- state. children [ idx] . childPropertiesURL [ property] = newChildPropertyState
158
- value = property. merge ( value, childSummary)
159
- }
160
- }
161
- }
162
- return value
87
+ state. updateURLSummary ( updateInfo, updatedSummaries)
163
88
}
164
89
}
165
90
166
91
internal func getUpdatedUInt64Summary( property: MetatypeWrapper < UInt64 , [ UInt64 ] > ) -> [ UInt64 ] {
92
+ // Collect information from state
93
+ let updateInfo = state. withLock { state in
94
+ state. getUInt64SummaryUpdateInfo ( property: property)
95
+ }
96
+
97
+ // Get updated summary for each dirty child
98
+ let updatedSummaries = updateInfo. dirtyChildren. map { ( index, child) in
99
+ State . UInt64SummaryUpdate ( index: index, updatedSummary: child. getUpdatedUInt64Summary ( property: property) )
100
+ }
101
+
102
+ // Consolidate updated values
167
103
return state. withLock { state in
168
-
169
- var value : [ UInt64 ] = property. defaultSummary
170
- property. reduce ( & value, state. propertiesUInt64 [ property] ?? property. defaultValue)
171
-
172
- guard !state. children. isEmpty else {
173
- return value
174
- }
175
-
176
- for (idx, childState) in state. children. enumerated ( ) {
177
- if let childPropertyState = childState. childPropertiesUInt64 [ property] {
178
- if childPropertyState. isDirty {
179
- // Update dirty path
180
- if let child = childState. child {
181
- let updatedSummary = child. getUpdatedUInt64Summary ( property: property)
182
- let newChildPropertyState = PropertyStateThroughput ( value: updatedSummary, isDirty: false )
183
- state. children [ idx] . childPropertiesUInt64 [ property] = newChildPropertyState
184
- value = property. merge ( value, updatedSummary)
185
- }
186
- } else {
187
- if let _ = childState. child {
188
- // Merge non-dirty, updated value
189
- value = property. merge ( value, childPropertyState. value)
190
- } else {
191
- value = property. finalSummary ( value, childPropertyState. value)
192
- }
193
- }
194
- } else {
195
- // First fetch of value
196
- if let child = childState. child {
197
- let childSummary = child. getUpdatedUInt64Summary ( property: property)
198
- let newChildPropertyState = PropertyStateThroughput ( value: childSummary, isDirty: false )
199
- state. children [ idx] . childPropertiesUInt64 [ property] = newChildPropertyState
200
- value = property. merge ( value, childSummary)
201
- }
202
- }
203
- }
204
- return value
104
+ state. updateUInt64Summary ( updateInfo, updatedSummaries)
205
105
}
206
106
}
207
107
0 commit comments