1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift Collections open source project
//
// Copyright (c) 2021 - 2024 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
//
//===----------------------------------------------------------------------===//
#if !COLLECTIONS_SINGLE_MODULE
import InternalCollectionsUtilities
#endif
extension RandomAccessCollection {
#if SWIFT_PACKAGE
@inline(__always)
internal func _index(at offset: Int) -> Index {
index(startIndex, offsetBy: offset)
}
@inline(__always)
internal func _offset(of index: Index) -> Int {
distance(from: startIndex, to: index)
}
@inline(__always)
internal subscript(_offset offset: Int) -> Element {
self[_index(at: offset)]
}
#endif
@inline(__always)
internal func _indexRange(at offsets: Range<Int>) -> Range<Index> {
_index(at: offsets.lowerBound) ..< _index(at: offsets.upperBound)
}
@inline(__always)
internal func _indexRange<R: RangeExpression>(at offsets: R) -> Range<Index>
where R.Bound == Int {
return _indexRange(at: offsets.relative(to: 0 ..< self.count))
}
@inline(__always)
internal func _offsetRange(of range: Range<Index>) -> Range<Int> {
_offset(of: range.lowerBound) ..< _offset(of: range.upperBound)
}
@inline(__always)
internal func _offsetRange<R: RangeExpression>(of range: R) -> Range<Int>
where R.Bound == Index {
return _offsetRange(of: range.relative(to: self))
}
@inline(__always)
internal subscript(_offsets range: Range<Int>) -> SubSequence {
self[_indexRange(at: range)]
}
@inline(__always)
internal subscript<R: RangeExpression>(_offsets range: R) -> SubSequence
where R.Bound == Int {
self[_offsets: range.relative(to: 0 ..< count)]
}
}
|