mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
240 undocumented public non-operator APIs remain in core Note: previous estimates were wrong because my regex was broken. The previous commit, for example, had 260 undocumented APIs. Swift SVN r22234
109 lines
3.3 KiB
Swift
109 lines
3.3 KiB
Swift
//===--- UnsafeBufferPointer.swift.gyb ------------------------*- swift -*-===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See http://swift.org/LICENSE.txt for license information
|
|
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
/// A generator for the elements in the buffer referenced by
|
|
/// `UnsafeBufferPointer` or `UnsafeMutableBufferPointer`
|
|
public struct UnsafeBufferPointerGenerator<T>: GeneratorType, SequenceType {
|
|
/// Advance to the next element and return it, or `nil` if no next
|
|
/// element exists.
|
|
public mutating func next() -> T? {
|
|
return position == end ? nil : (position++).memory
|
|
}
|
|
|
|
/// `UnsafeBufferPointerGenerator` is also a `SequenceType`, so it
|
|
/// `generate`\ 's a copy of itself
|
|
public func generate() -> UnsafeBufferPointerGenerator {
|
|
return self
|
|
}
|
|
|
|
var position, end: UnsafePointer<T>
|
|
}
|
|
|
|
%for Mutable in ('Mutable', ''):
|
|
/// A non-owning pointer to buffer of ${Mutable.lower()} `T`\ s stored
|
|
/// contiguously in memory, presenting a `Collection` interface to the
|
|
/// underlying elements.
|
|
public struct Unsafe${Mutable}BufferPointer<T> : ${Mutable}CollectionType {
|
|
|
|
/// Always zero, which is the index of the first element in a
|
|
/// non-empty buffer.
|
|
public var startIndex: Int {
|
|
return 0
|
|
}
|
|
|
|
/// The "past the end" position; always identical to `count`.
|
|
///
|
|
/// `endIndex` is not a valid argument to `subscript`, and is always
|
|
/// reachable from `startIndex` by zero or more applications of
|
|
/// `successor()`.
|
|
public var endIndex: Int {
|
|
return _end - _position
|
|
}
|
|
|
|
/// Access the `i`\ th element in the buffer.
|
|
public subscript(i: Int) -> T {
|
|
get {
|
|
_debugPrecondition(i >= 0)
|
|
_debugPrecondition(i < endIndex)
|
|
return _position[i]
|
|
}
|
|
%if Mutable:
|
|
nonmutating set {
|
|
_debugPrecondition(i >= 0)
|
|
_debugPrecondition(i < endIndex)
|
|
_position[i] = newValue
|
|
}
|
|
%end
|
|
}
|
|
|
|
/// Construct an Unsafe${Mutable}Pointer over the `count` contiguous
|
|
/// `T` instances beginning at `start`.
|
|
public init(start: Unsafe${Mutable}Pointer<T>, count: Int) {
|
|
_precondition(
|
|
count >= 0, "Unsafe${Mutable}BufferPointer with negative count")
|
|
_position = start
|
|
_end = start + count
|
|
}
|
|
|
|
/// Return a *generator* over the elements of this *sequence*.
|
|
///
|
|
/// Complexity: O(1)
|
|
public func generate() -> UnsafeBufferPointerGenerator<T> {
|
|
return UnsafeBufferPointerGenerator(position: _position, end: _end)
|
|
}
|
|
|
|
/// A pointer to the first element of the buffer
|
|
public var baseAddress: Unsafe${Mutable}Pointer<T> {
|
|
return _position
|
|
}
|
|
|
|
/// The number of elements in the buffer
|
|
public var count: Int {
|
|
return _end - _position
|
|
}
|
|
|
|
var _position, _end: Unsafe${Mutable}Pointer<T>
|
|
}
|
|
|
|
extension Unsafe${Mutable}BufferPointer : DebugPrintable {
|
|
/// A textual representation of `self`, suitable for debugging.
|
|
public var debugDescription: String {
|
|
return "Unsafe${Mutable}BufferPointer"
|
|
+ "(start: \(_position), length: \(_end - _position))"
|
|
}
|
|
}
|
|
%end
|
|
|
|
// ${'Local Variables'}:
|
|
// eval: (read-only-mode 1)
|
|
// End:
|