Skip to content

Commit 15904df

Browse files
committed
Review feedback from @lorentey
1 parent e01e964 commit 15904df

File tree

1 file changed

+9
-10
lines changed

1 file changed

+9
-10
lines changed

stdlib/public/core/Diffing.swift

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,6 @@ extension RangeReplaceableCollection {
6969
/// number of changes contained by the parameter.
7070
@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *)
7171
public func applying(_ difference: CollectionDifference<Element>) -> Self? {
72-
var result = Self()
73-
var enumeratedRemoves = 0
74-
var enumeratedInserts = 0
75-
var enumeratedOriginals = 0
76-
var currentIndex = self.startIndex
7772

7873
func append(
7974
into target: inout Self,
@@ -87,7 +82,12 @@ extension RangeReplaceableCollection {
8782
target.append(contentsOf: source[start..<index])
8883
}
8984

85+
var result = Self()
9086
do {
87+
var enumeratedRemoves = 0
88+
var enumeratedInserts = 0
89+
var enumeratedOriginals = 0
90+
var currentIndex = self.startIndex
9191
try difference._fastEnumeratedApply { change in
9292
switch change {
9393
case .remove(offset: let offset, element: _, associatedWith: _):
@@ -109,15 +109,14 @@ extension RangeReplaceableCollection {
109109
}
110110
_internalInvariant(enumeratedOriginals <= self.count)
111111
}
112-
let origCount = self.count - enumeratedOriginals
113-
try append(into: &result, contentsOf: self, from: &currentIndex, count: origCount)
114-
_internalInvariant(enumeratedOriginals + origCount == self.count)
112+
if currentIndex < self.endIndex {
113+
result.append(contentsOf: self[currentIndex...])
114+
}
115+
_internalInvariant(result.count == self.count + enumeratedInserts - enumeratedRemoves)
115116
} catch {
116117
return nil
117118
}
118119

119-
_internalInvariant(currentIndex == self.endIndex)
120-
_internalInvariant(result.count == self.count + enumeratedInserts - enumeratedRemoves)
121120
return result
122121
}
123122
}

0 commit comments

Comments
 (0)