Skip to content

Commit cf9f768

Browse files
committed
Apply same CountableRange changes as in swiftlang/swift#12913
1 parent 7157437 commit cf9f768

File tree

2 files changed

+29
-81
lines changed

2 files changed

+29
-81
lines changed

Foundation/Data.swift

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,7 +1005,7 @@ public struct Data : ReferenceConvertible, Equatable, Hashable, RandomAccessColl
10051005
public typealias Base64DecodingOptions = NSData.Base64DecodingOptions
10061006

10071007
public typealias Index = Int
1008-
public typealias Indices = CountableRange<Int>
1008+
public typealias Indices = Range<Int>
10091009

10101010
@_versioned internal var _backing : _DataStorage
10111011
@_versioned internal var _sliceRange: Range<Index>
@@ -1546,12 +1546,6 @@ public struct Data : ReferenceConvertible, Equatable, Hashable, RandomAccessColl
15461546
}
15471547
}
15481548

1549-
@inline(__always)
1550-
public mutating func replaceSubrange(_ subrange: CountableRange<Index>, with data: Data) {
1551-
let range: Range<Int> = subrange.lowerBound..<subrange.upperBound
1552-
replaceSubrange(range, with: data)
1553-
}
1554-
15551549
/// Replace a region of bytes in the data with new bytes from a buffer.
15561550
///
15571551
/// This will resize the data if required, to fit the entire contents of `buffer`.
@@ -1752,7 +1746,7 @@ public struct Data : ReferenceConvertible, Equatable, Hashable, RandomAccessColl
17521746
return i + 1
17531747
}
17541748

1755-
public var indices: CountableRange<Int> {
1749+
public var indices: Range<Int> {
17561750
@inline(__always)
17571751
get {
17581752
return startIndex..<endIndex

Foundation/IndexSet.swift

Lines changed: 27 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public struct IndexSet : ReferenceConvertible, Equatable, BidirectionalCollectio
105105
return IndexingIterator(_elements: self)
106106
}
107107

108-
public subscript(index : Index) -> CountableRange<IndexSet.Element> {
108+
public subscript(index : Index) -> Range<IndexSet.Element> {
109109
let indexSetRange = indexSet._range(at: index)
110110
if let intersectingRange = intersectingRange {
111111
return Swift.max(intersectingRange.lowerBound, indexSetRange.lowerBound)..<Swift.min(intersectingRange.upperBound, indexSetRange.upperBound)
@@ -159,11 +159,9 @@ public struct IndexSet : ReferenceConvertible, Equatable, BidirectionalCollectio
159159
}
160160

161161
/// Initialize an `IndexSet` with a range of integers.
162-
public init(integersIn range: ClosedRange<Element>) { self.init(integersIn: Range(range)) }
163-
/// Initialize an `IndexSet` with a range of integers.
164-
public init(integersIn range: CountableClosedRange<Element>) { self.init(integersIn: Range(range)) }
165-
/// Initialize an `IndexSet` with a range of integers.
166-
public init(integersIn range: CountableRange<Element>) { self.init(integersIn: Range(range)) }
162+
public init<R: RangeExpression>(integersIn range: R) where R.Bound == Element {
163+
self.init(integersIn: range.relative(to: 0..<Int.max))
164+
}
167165

168166
/// Initialize an `IndexSet` with a single integer.
169167
public init(integer: Element) {
@@ -205,16 +203,9 @@ public struct IndexSet : ReferenceConvertible, Equatable, BidirectionalCollectio
205203
/// Returns a `Range`-based view of `self`.
206204
///
207205
/// - parameter range: A subrange of `self` to view.
208-
public func rangeView(of range : ClosedRange<Element>) -> RangeView { return self.rangeView(of: Range(range)) }
209-
/// Returns a `Range`-based view of `self`.
210-
///
211-
/// - parameter range: A subrange of `self` to view.
212-
public func rangeView(of range : CountableClosedRange<Element>) -> RangeView { return self.rangeView(of: Range(range)) }
213-
/// Returns a `Range`-based view of `self`.
214-
///
215-
/// - parameter range: A subrange of `self` to view.
216-
public func rangeView(of range : CountableRange<Element>) -> RangeView { return self.rangeView(of: Range(range)) }
217-
206+
public func rangeView<R: RangeExpression>(of range : R) -> RangeView where R.Bound == Element {
207+
return self.rangeView(of: range.relative(to: 0..<Int.max))
208+
}
218209

219210
private func _indexOfRange(containing integer : Element) -> RangeView.Index? {
220211
let result = _handle.map {
@@ -344,32 +335,19 @@ public struct IndexSet : ReferenceConvertible, Equatable, BidirectionalCollectio
344335
/// The resulting range is the range of the intersection of the integers in `range` with the index set.
345336
///
346337
/// - parameter range: The range of integers to include.
347-
public func indexRange(in range: CountableRange<Element>) -> Range<Index> { return self.indexRange(in: Range(range)) }
348-
/// Return a `Range<IndexSet.Index>` which can be used to subscript the index set.
349-
///
350-
/// The resulting range is the range of the intersection of the integers in `range` with the index set.
351-
///
352-
/// - parameter range: The range of integers to include.
353-
public func indexRange(in range: ClosedRange<Element>) -> Range<Index> { return self.indexRange(in: Range(range)) }
354-
/// Return a `Range<IndexSet.Index>` which can be used to subscript the index set.
355-
///
356-
/// The resulting range is the range of the intersection of the integers in `range` with the index set.
357-
///
358-
/// - parameter range: The range of integers to include.
359-
public func indexRange(in range: CountableClosedRange<Element>) -> Range<Index> { return self.indexRange(in: Range(range)) }
360-
338+
public func indexRange<R: RangeExpression>(in range: R) -> Range<Index> where R.Bound == Element {
339+
return self.indexRange(in: range.relative(to: 0..<Int.max))
340+
}
361341

362342
/// Returns the count of integers in `self` that intersect `range`.
363343
public func count(in range: Range<Element>) -> Int {
364344
return _handle.map { $0.countOfIndexes(in: _toNSRange(range)) }
365345
}
366346

367347
/// Returns the count of integers in `self` that intersect `range`.
368-
public func count(in range: CountableRange<Element>) -> Int { return self.count(in: Range(range)) }
369-
/// Returns the count of integers in `self` that intersect `range`.
370-
public func count(in range: ClosedRange<Element>) -> Int { return self.count(in: Range(range)) }
371-
/// Returns the count of integers in `self` that intersect `range`.
372-
public func count(in range: CountableClosedRange<Element>) -> Int { return self.count(in: Range(range)) }
348+
public func count<R: RangeExpression>(in range: R) -> Int where R.Bound == Element {
349+
return self.count(in: range.relative(to: 0..<Int.max))
350+
}
373351

374352
/// Returns `true` if `self` contains `integer`.
375353
public func contains(_ integer: Element) -> Bool {
@@ -381,13 +359,10 @@ public struct IndexSet : ReferenceConvertible, Equatable, BidirectionalCollectio
381359
return _handle.map { $0.contains(in: _toNSRange(range)) }
382360
}
383361

384-
/// Returns `true` if `self` contains all of the integers in `range`.
385-
public func contains(integersIn range: CountableRange<Element>) -> Bool { return self.contains(integersIn: Range(range)) }
386-
/// Returns `true` if `self` contains all of the integers in `range`.
387-
public func contains(integersIn range: ClosedRange<Element>) -> Bool { return self.contains(integersIn: Range(range)) }
388-
/// Returns `true` if `self` contains all of the integers in `range`.
389-
public func contains(integersIn range: CountableClosedRange<Element>) -> Bool { return self.contains(integersIn: Range(range)) }
390-
362+
/// Returns `true` if `self` intersects any of the integers in `range`.
363+
public func intersects<R: RangeExpression>(integersIn range: R) -> Bool where R.Bound == Element {
364+
return self.intersects(integersIn: range.relative(to: 0..<Int.max))
365+
}
391366

392367
/// Returns `true` if `self` contains all of the integers in `indexSet`.
393368
public func contains(integersIn indexSet: IndexSet) -> Bool {
@@ -400,11 +375,9 @@ public struct IndexSet : ReferenceConvertible, Equatable, BidirectionalCollectio
400375
}
401376

402377
/// Returns `true` if `self` intersects any of the integers in `range`.
403-
public func intersects(integersIn range: CountableRange<Element>) -> Bool { return self.intersects(integersIn: Range(range)) }
404-
/// Returns `true` if `self` intersects any of the integers in `range`.
405-
public func intersects(integersIn range: ClosedRange<Element>) -> Bool { return self.intersects(integersIn: Range(range)) }
406-
/// Returns `true` if `self` intersects any of the integers in `range`.
407-
public func intersects(integersIn range: CountableClosedRange<Element>) -> Bool { return self.intersects(integersIn: Range(range)) }
378+
public func intersects<R: RangeExpression>(integersIn range: R) -> Bool where R.Bound == Element {
379+
return self.intersects(integersIn: range.relative(to: 0..<Int.max))
380+
}
408381

409382
// MARK: -
410383
// Collection
@@ -619,23 +592,14 @@ public struct IndexSet : ReferenceConvertible, Equatable, BidirectionalCollectio
619592
}
620593

621594
/// Insert a range of integers into the `IndexSet`.
622-
public mutating func insert(integersIn range: CountableRange<Element>) { self.insert(integersIn: Range(range)) }
623-
/// Insert a range of integers into the `IndexSet`.
624-
public mutating func insert(integersIn range: ClosedRange<Element>) { self.insert(integersIn: Range(range)) }
625-
/// Insert a range of integers into the `IndexSet`.
626-
public mutating func insert(integersIn range: CountableClosedRange<Element>) { self.insert(integersIn: Range(range)) }
627-
628-
/// Remove a range of integers from the `IndexSet`.
629-
public mutating func remove(integersIn range: Range<Element>) {
630-
_applyMutation { $0.remove(in: _toNSRange(range)) }
595+
public mutating func insert<R: RangeExpression>(integersIn range: R) where R.Bound == Element {
596+
self.insert(integersIn: range.relative(to: 0..<Int.max))
631597
}
632598

633599
/// Remove a range of integers from the `IndexSet`.
634-
public mutating func remove(integersIn range: CountableRange<Element>) { self.remove(integersIn: Range(range)) }
635-
/// Remove a range of integers from the `IndexSet`.
636-
public mutating func remove(integersIn range: ClosedRange<Element>) { self.remove(integersIn: Range(range)) }
637-
/// Remove a range of integers from the `IndexSet`.
638-
public mutating func remove(integersIn range: CountableClosedRange<Element>) { self.remove(integersIn: Range(range)) }
600+
public mutating func remove(integersIn range: ClosedRange<Element>) {
601+
self.remove(integersIn: Range(range))
602+
}
639603

640604
/// Returns `true` if self contains no values.
641605
public var isEmpty : Bool {
@@ -668,21 +632,11 @@ public struct IndexSet : ReferenceConvertible, Equatable, BidirectionalCollectio
668632
}
669633
}
670634

671-
/// Returns an IndexSet filtered according to the result of `includeInteger`.
672-
///
673-
/// - parameter range: A range of integers. For each integer in the range that intersects the integers in the IndexSet, then the `includeInteger` predicate will be invoked.
674-
/// - parameter includeInteger: The predicate which decides if an integer will be included in the result or not.
675-
public func filteredIndexSet(in range : CountableRange<Element>, includeInteger: (Element) throws -> Bool) rethrows -> IndexSet { return try self.filteredIndexSet(in: Range(range), includeInteger: includeInteger) }
676635
/// Returns an IndexSet filtered according to the result of `includeInteger`.
677636
///
678637
/// - parameter range: A range of integers. For each integer in the range that intersects the integers in the IndexSet, then the `includeInteger` predicate will be invoked.
679638
/// - parameter includeInteger: The predicate which decides if an integer will be included in the result or not.
680639
public func filteredIndexSet(in range : ClosedRange<Element>, includeInteger: (Element) throws -> Bool) rethrows -> IndexSet { return try self.filteredIndexSet(in: Range(range), includeInteger: includeInteger) }
681-
/// Returns an IndexSet filtered according to the result of `includeInteger`.
682-
///
683-
/// - parameter range: A range of integers. For each integer in the range that intersects the integers in the IndexSet, then the `includeInteger` predicate will be invoked.
684-
/// - parameter includeInteger: The predicate which decides if an integer will be included in the result or not.
685-
public func filteredIndexSet(in range : CountableClosedRange<Element>, includeInteger: (Element) throws -> Bool) rethrows -> IndexSet { return try self.filteredIndexSet(in: Range(range), includeInteger: includeInteger) }
686640

687641
/// Returns an IndexSet filtered according to the result of `includeInteger`.
688642
///
@@ -762,8 +716,8 @@ private struct IndexSetBoundaryIterator : IteratorProtocol {
762716

763717
private var i1: IndexSet.RangeView.Iterator
764718
private var i2: IndexSet.RangeView.Iterator
765-
private var i1Range: CountableRange<Element>?
766-
private var i2Range: CountableRange<Element>?
719+
private var i1Range: Range<Element>?
720+
private var i2Range: Range<Element>?
767721
private var i1UsedLower: Bool
768722
private var i2UsedLower: Bool
769723

0 commit comments

Comments
 (0)