mirror of
https://github.com/apple/swift-foundation.git
synced 2025-05-23 22:13:35 +08:00
54 lines
1.5 KiB
Swift
54 lines
1.5 KiB
Swift
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2023 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
|
|
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
internal struct BufferViewIndex<Element> {
|
|
let _rawValue: UnsafeRawPointer
|
|
|
|
@inline(__always)
|
|
internal init(rawValue: UnsafeRawPointer) {
|
|
_rawValue = rawValue
|
|
}
|
|
|
|
@inline(__always)
|
|
var isAligned: Bool {
|
|
(Int(bitPattern: _rawValue) & (MemoryLayout<Element>.alignment - 1)) == 0
|
|
}
|
|
}
|
|
|
|
extension BufferViewIndex: Equatable {}
|
|
|
|
extension BufferViewIndex: Hashable {}
|
|
|
|
extension BufferViewIndex: Strideable {
|
|
typealias Stride = Int
|
|
|
|
@inline(__always)
|
|
func distance(to other: BufferViewIndex) -> Int {
|
|
_rawValue.distance(to: other._rawValue) / MemoryLayout<Element>.stride
|
|
}
|
|
|
|
@inline(__always)
|
|
func advanced(by n: Int) -> BufferViewIndex {
|
|
.init(rawValue: _rawValue.advanced(by: n &* MemoryLayout<Element>.stride))
|
|
}
|
|
}
|
|
|
|
extension BufferViewIndex: Comparable {
|
|
@inline(__always)
|
|
static func < (lhs: BufferViewIndex, rhs: BufferViewIndex) -> Bool {
|
|
lhs._rawValue < rhs._rawValue
|
|
}
|
|
}
|
|
|
|
@available(*, unavailable)
|
|
extension BufferViewIndex: Sendable {}
|