Skip to content

Commit 30c540a

Browse files
committed
Correctly replace only within specified subrange
1 parent 5dff33a commit 30c540a

File tree

1 file changed

+4
-23
lines changed

1 file changed

+4
-23
lines changed

Sources/_StringProcessing/Algorithms/Algorithms/Replace.swift

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,14 @@ extension RangeReplaceableCollection {
1515
func _replacing<Ranges: Collection, Replacement: Collection>(
1616
_ ranges: Ranges,
1717
with replacement: Replacement,
18-
subrange: Range<Index>,
1918
maxReplacements: Int = .max
2019
) -> Self where Ranges.Element == Range<Index>,
2120
Replacement.Element == Element
2221
{
2322
precondition(maxReplacements >= 0)
2423

25-
var index = subrange.lowerBound
2624
var result = Self()
27-
result.append(contentsOf: self[..<index])
25+
var index = startIndex
2826

2927
for range in ranges.prefix(maxReplacements) {
3028
result.append(contentsOf: self[index..<range.lowerBound])
@@ -36,20 +34,6 @@ extension RangeReplaceableCollection {
3634
return result
3735
}
3836

39-
func _replacing<Ranges: Collection, Replacement: Collection>(
40-
_ ranges: Ranges,
41-
with replacement: Replacement,
42-
maxReplacements: Int = .max
43-
) -> Self where Ranges.Element == Range<Index>,
44-
Replacement.Element == Element
45-
{
46-
_replacing(
47-
ranges,
48-
with: replacement,
49-
subrange: startIndex..<endIndex,
50-
maxReplacements: maxReplacements)
51-
}
52-
5337
mutating func _replace<
5438
Ranges: Collection, Replacement: Collection
5539
>(
@@ -85,9 +69,8 @@ extension RangeReplaceableCollection where Element: Equatable {
8569
maxReplacements: Int = .max
8670
) -> Self where C.Element == Element, Replacement.Element == Element {
8771
_replacing(
88-
_ranges(of: other),
72+
self[subrange]._ranges(of: other),
8973
with: replacement,
90-
subrange: subrange,
9174
maxReplacements: maxReplacements)
9275
}
9376

@@ -143,9 +126,8 @@ extension RangeReplaceableCollection
143126
maxReplacements: Int = .max
144127
) -> Self where C.Element == Element, Replacement.Element == Element {
145128
_replacing(
146-
_ranges(of: other),
129+
self[subrange]._ranges(of: other),
147130
with: replacement,
148-
subrange: subrange,
149131
maxReplacements: maxReplacements)
150132
}
151133

@@ -195,9 +177,8 @@ extension RangeReplaceableCollection where SubSequence == Substring {
195177
maxReplacements: Int = .max
196178
) -> Self where Replacement.Element == Element {
197179
_replacing(
198-
_ranges(of: regex),
180+
self[subrange]._ranges(of: regex),
199181
with: replacement,
200-
subrange: subrange,
201182
maxReplacements: maxReplacements)
202183
}
203184

0 commit comments

Comments
 (0)