Skip to content

Commit a94c72c

Browse files
committed
Build replace/replacing on top of _ranges
These can be a higher-order operation that replace each range from a given collection instead of doing the searching directly.
1 parent 8157a38 commit a94c72c

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

Sources/_StringProcessing/Algorithms/Algorithms/Replace.swift

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@
1212
// MARK: `CollectionSearcher` algorithms
1313

1414
extension RangeReplaceableCollection {
15-
func _replacing<Searcher: CollectionSearcher, Replacement: Collection>(
16-
_ searcher: Searcher,
15+
func _replacing<Ranges: Collection, Replacement: Collection>(
16+
_ ranges: Ranges,
1717
with replacement: Replacement,
1818
subrange: Range<Index>,
1919
maxReplacements: Int = .max
20-
) -> Self where Searcher.Searched == SubSequence,
20+
) -> Self where Ranges.Element == Range<Index>,
2121
Replacement.Element == Element
2222
{
2323
precondition(maxReplacements >= 0)
@@ -26,7 +26,7 @@ extension RangeReplaceableCollection {
2626
var result = Self()
2727
result.append(contentsOf: self[..<index])
2828

29-
for range in self[subrange]._ranges(of: searcher).prefix(maxReplacements) {
29+
for range in ranges.prefix(maxReplacements) {
3030
result.append(contentsOf: self[index..<range.lowerBound])
3131
result.append(contentsOf: replacement)
3232
index = range.upperBound
@@ -36,29 +36,29 @@ extension RangeReplaceableCollection {
3636
return result
3737
}
3838

39-
func _replacing<Searcher: CollectionSearcher, Replacement: Collection>(
40-
_ searcher: Searcher,
39+
func _replacing<Ranges: Collection, Replacement: Collection>(
40+
_ ranges: Ranges,
4141
with replacement: Replacement,
4242
maxReplacements: Int = .max
43-
) -> Self where Searcher.Searched == SubSequence,
43+
) -> Self where Ranges.Element == Range<Index>,
4444
Replacement.Element == Element
4545
{
4646
_replacing(
47-
searcher,
47+
ranges,
4848
with: replacement,
4949
subrange: startIndex..<endIndex,
5050
maxReplacements: maxReplacements)
5151
}
5252

5353
mutating func _replace<
54-
Searcher: CollectionSearcher, Replacement: Collection
54+
Ranges: Collection, Replacement: Collection
5555
>(
56-
_ searcher: Searcher,
56+
_ ranges: Ranges,
5757
with replacement: Replacement,
5858
maxReplacements: Int = .max
59-
) where Searcher.Searched == SubSequence, Replacement.Element == Element {
59+
) where Ranges.Element == Range<Index>, Replacement.Element == Element {
6060
self = _replacing(
61-
searcher,
61+
ranges,
6262
with: replacement,
6363
maxReplacements: maxReplacements)
6464
}
@@ -85,7 +85,7 @@ extension RangeReplaceableCollection where Element: Equatable {
8585
maxReplacements: Int = .max
8686
) -> Self where C.Element == Element, Replacement.Element == Element {
8787
_replacing(
88-
ZSearcher(pattern: Array(other), by: ==),
88+
_ranges(of: other),
8989
with: replacement,
9090
subrange: subrange,
9191
maxReplacements: maxReplacements)
@@ -143,7 +143,7 @@ extension RangeReplaceableCollection
143143
maxReplacements: Int = .max
144144
) -> Self where C.Element == Element, Replacement.Element == Element {
145145
_replacing(
146-
PatternOrEmpty(searcher: TwoWaySearcher(pattern: Array(other))),
146+
_ranges(of: other),
147147
with: replacement,
148148
subrange: subrange,
149149
maxReplacements: maxReplacements)
@@ -195,7 +195,7 @@ extension RangeReplaceableCollection where SubSequence == Substring {
195195
maxReplacements: Int = .max
196196
) -> Self where Replacement.Element == Element {
197197
_replacing(
198-
RegexConsumer(regex),
198+
_ranges(of: regex),
199199
with: replacement,
200200
subrange: subrange,
201201
maxReplacements: maxReplacements)

0 commit comments

Comments
 (0)