@@ -226,17 +226,38 @@ extension BidirectionalCollection where Element: Comparable {
226
226
// }
227
227
}
228
228
229
+ @available ( SwiftStdlib 5 . 7 , * )
230
+ struct RegexRangesCollection < Output> {
231
+ let base : RegexMatchesCollection < Output >
232
+
233
+ init ( string: Substring , regex: Regex < Output > ) {
234
+ self . base = RegexMatchesCollection ( base: string, regex: regex)
235
+ }
236
+ }
237
+
238
+ @available ( SwiftStdlib 5 . 7 , * )
239
+ extension RegexRangesCollection : Collection {
240
+ typealias Index = RegexMatchesCollection < Output > . Index
241
+
242
+ var startIndex : Index { base. startIndex }
243
+ var endIndex : Index { base. endIndex }
244
+ func index( after i: Index ) -> Index { base. index ( after: i) }
245
+ subscript( position: Index ) -> Range < String . Index > { base [ position] . range }
246
+ }
247
+
229
248
// MARK: Regex algorithms
230
249
231
- extension BidirectionalCollection where SubSequence == Substring {
250
+ extension Collection where SubSequence == Substring {
232
251
@available ( SwiftStdlib 5 . 7 , * )
233
252
@_disfavoredOverload
234
253
func _ranges< R: RegexComponent > (
235
254
of regex: R
236
- ) -> RangesCollection < RegexConsumer < R , Self > > {
237
- _ranges ( of : RegexConsumer ( regex) )
255
+ ) -> RegexRangesCollection < R . RegexOutput > {
256
+ RegexRangesCollection ( string : self [ ... ] , regex: regex . regex )
238
257
}
258
+ }
239
259
260
+ extension BidirectionalCollection where SubSequence == Substring {
240
261
@available ( SwiftStdlib 5 . 7 , * )
241
262
func _rangesFromBack< R: RegexComponent > (
242
263
of regex: R
0 commit comments