Merge pull request #4085 from apple/stdlib-make-array-implementation-internal-3
stdlib: make Array implementation internal, part 2
diff --git a/stdlib/public/core/ArrayBuffer.swift b/stdlib/public/core/ArrayBuffer.swift
index cd65004..4ec63b9 100644
--- a/stdlib/public/core/ArrayBuffer.swift
+++ b/stdlib/public/core/ArrayBuffer.swift
@@ -22,14 +22,14 @@
= _BridgeStorage<_ContiguousArrayStorageBase, _NSArrayCore>
@_fixed_layout
-public struct _ArrayBuffer<Element> : _ArrayBufferProtocol {
+internal struct _ArrayBuffer<Element> : _ArrayBufferProtocol {
/// Create an empty buffer.
- public init() {
+ internal init() {
_storage = _ArrayBridgeStorage(native: _emptyArrayStorage)
}
- public init(nsArray: _NSArrayCore) {
+ internal init(nsArray: _NSArrayCore) {
_sanityCheck(_isClassOrObjCExistential(Element.self))
_storage = _ArrayBridgeStorage(objC: nsArray)
}
@@ -46,7 +46,7 @@
/// The spare bits that are set when a native array needs deferred
/// element type checking.
- var deferredTypeCheckMask: Int { return 1 }
+ internal var deferredTypeCheckMask: Int { return 1 }
/// Returns an `_ArrayBuffer<U>` containing the same elements,
/// deferring checking each element's `U`-ness until it is accessed.
@@ -68,7 +68,7 @@
native: _native._storage, bits: deferredTypeCheckMask))
}
- var needsElementTypeCheck: Bool {
+ internal var needsElementTypeCheck: Bool {
// NSArray's need an element typecheck when the element type isn't AnyObject
return !_isNativeTypeChecked && !(AnyObject.self is Element.Type)
}
@@ -83,18 +83,18 @@
extension _ArrayBuffer {
/// Adopt the storage of `source`.
- public init(_buffer source: NativeBuffer, shiftedToStartIndex: Int) {
+ internal init(_buffer source: NativeBuffer, shiftedToStartIndex: Int) {
_sanityCheck(shiftedToStartIndex == 0, "shiftedToStartIndex must be 0")
_storage = _ArrayBridgeStorage(native: source._storage)
}
/// `true`, if the array is native and does not need a deferred type check.
- var arrayPropertyIsNativeTypeChecked: Bool {
+ internal var arrayPropertyIsNativeTypeChecked: Bool {
return _isNativeTypeChecked
}
/// Returns `true` iff this buffer's storage is uniquely-referenced.
- mutating func isUniquelyReferenced() -> Bool {
+ internal mutating func isUniquelyReferenced() -> Bool {
if !_isClassOrObjCExistential(Element.self) {
return _storage.isUniquelyReferenced_native_noSpareBits()
}
@@ -103,7 +103,7 @@
/// Returns `true` iff this buffer's storage is either
/// uniquely-referenced or pinned.
- mutating func isUniquelyReferencedOrPinned() -> Bool {
+ internal mutating func isUniquelyReferencedOrPinned() -> Bool {
if !_isClassOrObjCExistential(Element.self) {
return _storage.isUniquelyReferencedOrPinned_native_noSpareBits()
}
@@ -113,7 +113,7 @@
/// Convert to an NSArray.
///
/// O(1) if the element type is bridged verbatim, O(N) otherwise.
- public func _asCocoaArray() -> _NSArrayCore {
+ internal func _asCocoaArray() -> _NSArrayCore {
return _fastPath(_isNative) ? _native._asCocoaArray() : _nonNative
}
@@ -121,7 +121,7 @@
/// `_ContiguousArrayBuffer` that can be grown in-place to allow the self
/// buffer store minimumCapacity elements, returns that buffer.
/// Otherwise, returns `nil`.
- public mutating func requestUniqueMutableBackingBuffer(minimumCapacity: Int)
+ internal mutating func requestUniqueMutableBackingBuffer(minimumCapacity: Int)
-> NativeBuffer? {
if _fastPath(isUniquelyReferenced()) {
let b = _native
@@ -132,18 +132,18 @@
return nil
}
- public mutating func isMutableAndUniquelyReferenced() -> Bool {
+ internal mutating func isMutableAndUniquelyReferenced() -> Bool {
return isUniquelyReferenced()
}
- public mutating func isMutableAndUniquelyReferencedOrPinned() -> Bool {
+ internal mutating func isMutableAndUniquelyReferencedOrPinned() -> Bool {
return isUniquelyReferencedOrPinned()
}
/// If this buffer is backed by a `_ContiguousArrayBuffer`
/// containing the same number of elements as `self`, return it.
/// Otherwise, return `nil`.
- public func requestNativeBuffer() -> NativeBuffer? {
+ internal func requestNativeBuffer() -> NativeBuffer? {
if !_isClassOrObjCExistential(Element.self) {
return _native
}
@@ -170,7 +170,7 @@
}
}
- func _typeCheck(_ subRange: Range<Int>) {
+ internal func _typeCheck(_ subRange: Range<Int>) {
if !_isClassOrObjCExistential(Element.self) {
return
}
@@ -189,7 +189,7 @@
/// memory starting at `target`. Return a pointer "past the end" of the
/// just-initialized memory.
@discardableResult
- public func _copyContents(
+ internal func _copyContents(
subRange bounds: Range<Int>,
initializing target: UnsafeMutablePointer<Element>
) -> UnsafeMutablePointer<Element> {
@@ -221,7 +221,7 @@
/// Returns a `_SliceBuffer` containing the given sub-range of elements in
/// `bounds` from this buffer.
- public subscript(bounds: Range<Int>) -> _SliceBuffer<Element> {
+ internal subscript(bounds: Range<Int>) -> _SliceBuffer<Element> {
get {
_typeCheck(bounds)
@@ -254,7 +254,7 @@
// No contiguous storage found; we must allocate
let result = _ContiguousArrayBuffer<Element>(
- uninitializedCount: boundsCount, minimumCapacity: 0)
+ _uninitializedCount: boundsCount, minimumCapacity: 0)
// Tell Cocoa to copy the objects into our storage
cocoa.buffer.getObjects(
@@ -273,17 +273,17 @@
/// A pointer to the first element.
///
/// - Precondition: The elements are known to be stored contiguously.
- public var firstElementAddress: UnsafeMutablePointer<Element> {
+ internal var firstElementAddress: UnsafeMutablePointer<Element> {
_sanityCheck(_isNative, "must be a native buffer")
return _native.firstElementAddress
}
- public var firstElementAddressIfContiguous: UnsafeMutablePointer<Element>? {
+ internal var firstElementAddressIfContiguous: UnsafeMutablePointer<Element>? {
return _fastPath(_isNative) ? firstElementAddress : nil
}
/// The number of elements the buffer stores.
- public var count: Int {
+ internal var count: Int {
@inline(__always)
get {
return _fastPath(_isNative) ? _native.count : _nonNative.count
@@ -331,13 +331,13 @@
}
/// The number of elements the buffer can store without reallocation.
- public var capacity: Int {
+ internal var capacity: Int {
return _fastPath(_isNative) ? _native.capacity : _nonNative.count
}
@_versioned
@inline(__always)
- func getElement(_ i: Int, wasNativeTypeChecked: Bool) -> Element {
+ internal func getElement(_ i: Int, wasNativeTypeChecked: Bool) -> Element {
if _fastPath(wasNativeTypeChecked) {
return _nativeTypeChecked[i]
}
@@ -346,7 +346,7 @@
@_versioned
@inline(never)
- func _getElementSlowPath(_ i: Int) -> AnyObject {
+ internal func _getElementSlowPath(_ i: Int) -> AnyObject {
_sanityCheck(
_isClassOrObjCExistential(Element.self),
"Only single reference elements can be indexed here.")
@@ -372,7 +372,7 @@
}
/// Get or set the value of the ith element.
- public subscript(i: Int) -> Element {
+ internal subscript(i: Int) -> Element {
get {
return getElement(i, wasNativeTypeChecked: _isNativeTypeChecked)
}
@@ -394,7 +394,7 @@
/// Call `body(p)`, where `p` is an `UnsafeBufferPointer` over the
/// underlying contiguous storage. If no such storage exists, it is
/// created on-demand.
- public func withUnsafeBufferPointer<R>(
+ internal func withUnsafeBufferPointer<R>(
_ body: (UnsafeBufferPointer<Element>) throws -> R
) rethrows -> R {
if _fastPath(_isNative) {
@@ -409,7 +409,7 @@
/// over the underlying contiguous storage.
///
/// - Precondition: Such contiguous storage exists or the buffer is empty.
- public mutating func withUnsafeMutableBufferPointer<R>(
+ internal mutating func withUnsafeMutableBufferPointer<R>(
_ body: (UnsafeMutableBufferPointer<Element>) throws -> R
) rethrows -> R {
_sanityCheck(
@@ -422,14 +422,14 @@
}
/// An object that keeps the elements stored in this buffer alive.
- public var owner: AnyObject {
+ internal var owner: AnyObject {
return _fastPath(_isNative) ? _native._storage : _nonNative
}
/// An object that keeps the elements stored in this buffer alive.
///
/// - Precondition: This buffer is backed by a `_ContiguousArrayBuffer`.
- public var nativeOwner: AnyObject {
+ internal var nativeOwner: AnyObject {
_sanityCheck(_isNative, "Expect a native array")
return _native._storage
}
@@ -437,7 +437,7 @@
/// A value that identifies the storage used by the buffer. Two
/// buffers address the same elements when they have the same
/// identity and count.
- public var identity: UnsafeRawPointer {
+ internal var identity: UnsafeRawPointer {
if _isNative {
return _native.identity
}
@@ -450,7 +450,7 @@
/// The position of the first element in a non-empty collection.
///
/// In an empty collection, `startIndex == endIndex`.
- public var startIndex: Int {
+ internal var startIndex: Int {
return 0
}
@@ -459,18 +459,18 @@
/// `endIndex` is not a valid argument to `subscript`, and is always
/// reachable from `startIndex` by zero or more applications of
/// `index(after:)`.
- public var endIndex: Int {
+ internal var endIndex: Int {
return count
}
- public typealias Indices = CountableRange<Int>
+ internal typealias Indices = CountableRange<Int>
//===--- private --------------------------------------------------------===//
- typealias Storage = _ContiguousArrayStorage<Element>
- public typealias NativeBuffer = _ContiguousArrayBuffer<Element>
+ internal typealias Storage = _ContiguousArrayStorage<Element>
+ internal typealias NativeBuffer = _ContiguousArrayBuffer<Element>
@_versioned
- var _isNative: Bool {
+ internal var _isNative: Bool {
if !_isClassOrObjCExistential(Element.self) {
return true
} else {
@@ -479,7 +479,7 @@
}
/// `true`, if the array is native and does not need a deferred type check.
- var _isNativeTypeChecked: Bool {
+ internal var _isNativeTypeChecked: Bool {
if !_isClassOrObjCExistential(Element.self) {
return true
} else {
@@ -491,7 +491,7 @@
///
/// - Precondition: `_isNative`.
@_versioned
- var _native: NativeBuffer {
+ internal var _native: NativeBuffer {
return NativeBuffer(
_isClassOrObjCExistential(Element.self)
? _storage.nativeInstance : _storage.nativeInstance_noSpareBits)
@@ -501,12 +501,12 @@
///
/// - Precondition: `_isNativeTypeChecked`.
@_versioned
- var _nativeTypeChecked: NativeBuffer {
+ internal var _nativeTypeChecked: NativeBuffer {
return NativeBuffer(_storage.nativeInstance_noSpareBits)
}
@_versioned
- var _nonNative: _NSArrayCore {
+ internal var _nonNative: _NSArrayCore {
@inline(__always)
get {
_sanityCheck(_isClassOrObjCExistential(Element.self))
diff --git a/stdlib/public/core/ArrayBufferProtocol.swift b/stdlib/public/core/ArrayBufferProtocol.swift
index 08db658..6bfef6f 100644
--- a/stdlib/public/core/ArrayBufferProtocol.swift
+++ b/stdlib/public/core/ArrayBufferProtocol.swift
@@ -12,7 +12,7 @@
/// The underlying buffer for an ArrayType conforms to
/// `_ArrayBufferProtocol`. This buffer does not provide value semantics.
-public protocol _ArrayBufferProtocol
+internal protocol _ArrayBufferProtocol
: MutableCollection, RandomAccessCollection {
associatedtype Indices : RandomAccessCollection = CountableRange<Int>
@@ -127,11 +127,11 @@
extension _ArrayBufferProtocol where Index == Int {
- public var subscriptBaseAddress: UnsafeMutablePointer<Element> {
+ internal var subscriptBaseAddress: UnsafeMutablePointer<Element> {
return firstElementAddress
}
- public mutating func replace<C>(
+ internal mutating func replace<C>(
subRange: Range<Int>,
with newCount: Int,
elementsOf newValues: C
diff --git a/stdlib/public/core/ArrayType.swift b/stdlib/public/core/ArrayType.swift
index ee2ca36..fa73850 100644
--- a/stdlib/public/core/ArrayType.swift
+++ b/stdlib/public/core/ArrayType.swift
@@ -10,8 +10,7 @@
//
//===----------------------------------------------------------------------===//
-public // @testable
-protocol _ArrayProtocol
+internal protocol _ArrayProtocol
: RangeReplaceableCollection,
ExpressibleByArrayLiteral
{
diff --git a/stdlib/public/core/Arrays.swift.gyb b/stdlib/public/core/Arrays.swift.gyb
index ed975cd..4913744 100644
--- a/stdlib/public/core/Arrays.swift.gyb
+++ b/stdlib/public/core/Arrays.swift.gyb
@@ -782,7 +782,7 @@
// FIXME(ABI): move to an initializer on _Buffer.
static internal func _copyBuffer(_ buffer: inout _Buffer) {
let newBuffer = _ContiguousArrayBuffer<Element>(
- uninitializedCount: buffer.count, minimumCapacity: buffer.count)
+ _uninitializedCount: buffer.count, minimumCapacity: buffer.count)
buffer._copyContents(
subRange: Range(buffer.indices),
initializing: newBuffer.firstElementAddress)
@@ -865,33 +865,32 @@
%if Self == 'Array':
#if _runtime(_ObjC)
- public typealias _Buffer = _ArrayBuffer<Element>
+ internal typealias _Buffer = _ArrayBuffer<Element>
#else
- public typealias _Buffer = _ContiguousArrayBuffer<Element>
+ internal typealias _Buffer = _ContiguousArrayBuffer<Element>
#endif
%elif Self == 'ArraySlice':
- public typealias _Buffer = _SliceBuffer<Element>
+ internal typealias _Buffer = _SliceBuffer<Element>
%else:
- public typealias _Buffer = _${Self.strip('_')}Buffer<Element>
+ internal typealias _Buffer = _${Self.strip('_')}Buffer<Element>
%end
/// Initialization from an existing buffer does not have "array.init"
/// semantics because the caller may retain an alias to buffer.
- public // @testable
- init(_buffer: _Buffer) {
+ internal init(_buffer: _Buffer) {
self._buffer = _buffer
}
%if Self == 'ArraySlice':
/// Initialization from an existing buffer does not have "array.init"
/// semantics because the caller may retain an alias to buffer.
- public // @testable
- init(_buffer buffer: _ContiguousArrayBuffer<Element>) {
+ internal init(_buffer buffer: _ContiguousArrayBuffer<Element>) {
self.init(_buffer: _Buffer(_buffer: buffer, shiftedToStartIndex: 0))
}
%end
- public var _buffer: _Buffer
+ @_versioned
+ internal var _buffer: _Buffer
}
extension ${Self} : ExpressibleByArrayLiteral {
@@ -1065,7 +1064,7 @@
minimumCapacity: Int
) -> _Buffer {
let newBuffer = _ContiguousArrayBuffer<Element>(
- uninitializedCount: 0, minimumCapacity: minimumCapacity)
+ _uninitializedCount: 0, minimumCapacity: minimumCapacity)
return _Buffer(_buffer: newBuffer, shiftedToStartIndex: 0)
}
@@ -1200,7 +1199,7 @@
minimumCapacity: minimumCapacity) == nil {
let newBuffer = _ContiguousArrayBuffer<Element>(
- uninitializedCount: count, minimumCapacity: minimumCapacity)
+ _uninitializedCount: count, minimumCapacity: minimumCapacity)
_buffer._copyContents(
subRange: Range(_buffer.indices),
@@ -1626,6 +1625,25 @@
// Invoke the body.
return try body(&inoutBufferPointer)
}
+
+ @discardableResult
+ public func _copyContents(
+ initializing ptr: UnsafeMutablePointer<Element>
+ ) -> UnsafeMutablePointer<Element> {
+ if let s = self._baseAddressIfContiguous {
+ let count = self.count
+ ptr.initialize(from: s, count: count)
+ _fixLifetime(self._owner)
+ return ptr + count
+ } else {
+ var p = ptr
+ for x in self {
+ p.initialize(to: x)
+ p += 1
+ }
+ return p
+ }
+ }
}
%end
@@ -1853,7 +1871,7 @@
? _growArrayCapacity(source.capacity) : source.capacity)
return _ContiguousArrayBuffer(
- uninitializedCount: countForBuffer, minimumCapacity: minimumCapacity)
+ _uninitializedCount: countForBuffer, minimumCapacity: minimumCapacity)
}
internal protocol _PointerFunction {
diff --git a/stdlib/public/core/Collection.swift b/stdlib/public/core/Collection.swift
index e69b144..f46a11f 100644
--- a/stdlib/public/core/Collection.swift
+++ b/stdlib/public/core/Collection.swift
@@ -1649,30 +1649,6 @@
}
}
-// TODO: swift-3-indexing-model - review the following
-extension Sequence
- where Self : _ArrayProtocol, Self.Element == Self.Iterator.Element {
- // A fast implementation for when you are backed by a contiguous array.
- @discardableResult
- public func _copyContents(
- initializing ptr: UnsafeMutablePointer<Iterator.Element>
- ) -> UnsafeMutablePointer<Iterator.Element> {
- if let s = self._baseAddressIfContiguous {
- let count = self.count
- ptr.initialize(from: s, count: count)
- _fixLifetime(self._owner)
- return ptr + count
- } else {
- var p = ptr
- for x in self {
- p.initialize(to: x)
- p += 1
- }
- return p
- }
- }
-}
-
extension Collection {
public func _preprocessingPass<R>(
_ preprocess: () throws -> R
diff --git a/stdlib/public/core/ContiguousArrayBuffer.swift b/stdlib/public/core/ContiguousArrayBuffer.swift
index 5e1b2be..85add43 100644
--- a/stdlib/public/core/ContiguousArrayBuffer.swift
+++ b/stdlib/public/core/ContiguousArrayBuffer.swift
@@ -184,14 +184,16 @@
}
@_fixed_layout
-public // @testable
-struct _ContiguousArrayBuffer<Element> : _ArrayBufferProtocol {
+internal struct _ContiguousArrayBuffer<Element> : _ArrayBufferProtocol {
/// Make a buffer with uninitialized elements. After using this
/// method, you must either initialize the `count` elements at the
/// result's `.firstElementAddress` or set the result's `.count`
/// to zero.
- public init(uninitializedCount: Int, minimumCapacity: Int) {
+ internal init(
+ _uninitializedCount uninitializedCount: Int,
+ minimumCapacity: Int
+ ) {
let realMinimumCapacity = Swift.max(uninitializedCount, minimumCapacity)
if realMinimumCapacity == 0 {
self = _ContiguousArrayBuffer<Element>()
@@ -248,22 +250,22 @@
}
/// True, if the array is native and does not need a deferred type check.
- var arrayPropertyIsNativeTypeChecked: Bool {
+ internal var arrayPropertyIsNativeTypeChecked: Bool {
return true
}
/// A pointer to the first element.
- public var firstElementAddress: UnsafeMutablePointer<Element> {
+ internal var firstElementAddress: UnsafeMutablePointer<Element> {
return __bufferPointer._elementPointer
}
- public var firstElementAddressIfContiguous: UnsafeMutablePointer<Element>? {
+ internal var firstElementAddressIfContiguous: UnsafeMutablePointer<Element>? {
return firstElementAddress
}
/// Call `body(p)`, where `p` is an `UnsafeBufferPointer` over the
/// underlying contiguous storage.
- public func withUnsafeBufferPointer<R>(
+ internal func withUnsafeBufferPointer<R>(
_ body: (UnsafeBufferPointer<Element>) throws -> R
) rethrows -> R {
defer { _fixLifetime(self) }
@@ -273,7 +275,7 @@
/// Call `body(p)`, where `p` is an `UnsafeMutableBufferPointer`
/// over the underlying contiguous storage.
- public mutating func withUnsafeMutableBufferPointer<R>(
+ internal mutating func withUnsafeMutableBufferPointer<R>(
_ body: (UnsafeMutableBufferPointer<Element>) throws -> R
) rethrows -> R {
defer { _fixLifetime(self) }
@@ -283,17 +285,17 @@
//===--- _ArrayBufferProtocol conformance -----------------------------------===//
/// Create an empty buffer.
- public init() {
+ internal init() {
__bufferPointer = ManagedBufferPointer(
_uncheckedUnsafeBufferObject: _emptyArrayStorage)
}
- public init(_buffer buffer: _ContiguousArrayBuffer, shiftedToStartIndex: Int) {
+ internal init(_buffer buffer: _ContiguousArrayBuffer, shiftedToStartIndex: Int) {
_sanityCheck(shiftedToStartIndex == 0, "shiftedToStartIndex must be 0")
self = buffer
}
- public mutating func requestUniqueMutableBackingBuffer(
+ internal mutating func requestUniqueMutableBackingBuffer(
minimumCapacity: Int
) -> _ContiguousArrayBuffer<Element>? {
if _fastPath(isUniquelyReferenced() && capacity >= minimumCapacity) {
@@ -302,29 +304,29 @@
return nil
}
- public mutating func isMutableAndUniquelyReferenced() -> Bool {
+ internal mutating func isMutableAndUniquelyReferenced() -> Bool {
return isUniquelyReferenced()
}
- public mutating func isMutableAndUniquelyReferencedOrPinned() -> Bool {
+ internal mutating func isMutableAndUniquelyReferencedOrPinned() -> Bool {
return isUniquelyReferencedOrPinned()
}
/// If this buffer is backed by a `_ContiguousArrayBuffer`
/// containing the same number of elements as `self`, return it.
/// Otherwise, return `nil`.
- public func requestNativeBuffer() -> _ContiguousArrayBuffer<Element>? {
+ internal func requestNativeBuffer() -> _ContiguousArrayBuffer<Element>? {
return self
}
@_versioned
- func getElement(_ i: Int) -> Element {
+ internal func getElement(_ i: Int) -> Element {
_sanityCheck(i >= 0 && i < count, "Array index out of range")
return firstElementAddress[i]
}
/// Get or set the value of the ith element.
- public subscript(i: Int) -> Element {
+ internal subscript(i: Int) -> Element {
get {
return getElement(i)
}
@@ -342,7 +344,7 @@
}
/// The number of elements the buffer stores.
- public var count: Int {
+ internal var count: Int {
get {
return __bufferPointer.header.count
}
@@ -368,7 +370,7 @@
}
/// The number of elements the buffer can store without reallocation.
- public var capacity: Int {
+ internal var capacity: Int {
return __bufferPointer.header.capacity
}
@@ -376,7 +378,7 @@
/// memory starting at `target`. Return a pointer "past the end" of the
/// just-initialized memory.
@discardableResult
- public func _copyContents(
+ internal func _copyContents(
subRange bounds: Range<Int>,
initializing target: UnsafeMutablePointer<Element>
) -> UnsafeMutablePointer<Element> {
@@ -393,7 +395,7 @@
/// Returns a `_SliceBuffer` containing the given `bounds` of values
/// from this buffer.
- public subscript(bounds: Range<Int>) -> _SliceBuffer<Element> {
+ internal subscript(bounds: Range<Int>) -> _SliceBuffer<Element> {
get {
return _SliceBuffer(
owner: __bufferPointer.buffer,
@@ -411,14 +413,14 @@
/// - Note: This does not mean the buffer is mutable. Other factors
/// may need to be considered, such as whether the buffer could be
/// some immutable Cocoa container.
- public mutating func isUniquelyReferenced() -> Bool {
+ internal mutating func isUniquelyReferenced() -> Bool {
return __bufferPointer.isUniqueReference()
}
/// Returns `true` iff this buffer's storage is either
/// uniquely-referenced or pinned. NOTE: this does not mean
/// the buffer is mutable; see the comment on isUniquelyReferenced.
- public mutating func isUniquelyReferencedOrPinned() -> Bool {
+ internal mutating func isUniquelyReferencedOrPinned() -> Bool {
return __bufferPointer._isUniqueOrPinnedReference()
}
@@ -428,7 +430,7 @@
/// - Precondition: `Element` is bridged to Objective-C.
///
/// - Complexity: O(1).
- public func _asCocoaArray() -> _NSArrayCore {
+ internal func _asCocoaArray() -> _NSArrayCore {
if count == 0 {
return _emptyArrayStorage
}
@@ -440,12 +442,12 @@
#endif
/// An object that keeps the elements stored in this buffer alive.
- public var owner: AnyObject {
+ internal var owner: AnyObject {
return _storage
}
/// An object that keeps the elements stored in this buffer alive.
- public var nativeOwner: AnyObject {
+ internal var nativeOwner: AnyObject {
return _storage
}
@@ -453,7 +455,7 @@
///
/// Two buffers address the same elements when they have the same
/// identity and count.
- public var identity: UnsafeRawPointer {
+ internal var identity: UnsafeRawPointer {
return UnsafeRawPointer(firstElementAddress)
}
@@ -495,7 +497,7 @@
}
/// Append the elements of `rhs` to `lhs`.
-public func += <Element, C : Collection>(
+internal func += <Element, C : Collection>(
lhs: inout _ContiguousArrayBuffer<Element>, rhs: C
) where C.Iterator.Element == Element {
@@ -508,7 +510,7 @@
}
else {
var newLHS = _ContiguousArrayBuffer<Element>(
- uninitializedCount: newCount,
+ _uninitializedCount: newCount,
minimumCapacity: _growArrayCapacity(lhs.capacity))
newLHS.firstElementAddress.moveInitialize(
@@ -523,7 +525,7 @@
/// The position of the first element in a non-empty collection.
///
/// In an empty collection, `startIndex == endIndex`.
- public var startIndex: Int {
+ internal var startIndex: Int {
return 0
}
/// The collection's "past the end" position.
@@ -531,11 +533,11 @@
/// `endIndex` is not a valid argument to `subscript`, and is always
/// reachable from `startIndex` by zero or more applications of
/// `index(after:)`.
- public var endIndex: Int {
+ internal var endIndex: Int {
return count
}
- public typealias Indices = CountableRange<Int>
+ internal typealias Indices = CountableRange<Int>
}
extension Sequence {
@@ -576,7 +578,7 @@
}
extension _ContiguousArrayBuffer {
- public func _copyToContiguousArray() -> ContiguousArray<Element> {
+ internal func _copyToContiguousArray() -> ContiguousArray<Element> {
return ContiguousArray(_buffer: self)
}
}
@@ -599,7 +601,7 @@
}
let result = _ContiguousArrayBuffer<C.Iterator.Element>(
- uninitializedCount: count,
+ _uninitializedCount: count,
minimumCapacity: 0)
var p = result.firstElementAddress
@@ -632,7 +634,7 @@
result = _ContiguousArrayBuffer()
} else {
result = _ContiguousArrayBuffer(
- uninitializedCount: initialCapacity,
+ _uninitializedCount: initialCapacity,
minimumCapacity: 0)
}
@@ -647,7 +649,7 @@
// Reallocate.
let newCapacity = max(_growArrayCapacity(result.capacity), 1)
var newResult = _ContiguousArrayBuffer<Element>(
- uninitializedCount: newCapacity, minimumCapacity: 0)
+ _uninitializedCount: newCapacity, minimumCapacity: 0)
p = newResult.firstElementAddress + result.capacity
remainingCapacity = newResult.capacity - result.capacity
newResult.firstElementAddress.moveInitialize(
diff --git a/stdlib/public/core/SliceBuffer.swift b/stdlib/public/core/SliceBuffer.swift
index 8e96bc1..94db40e 100644
--- a/stdlib/public/core/SliceBuffer.swift
+++ b/stdlib/public/core/SliceBuffer.swift
@@ -11,12 +11,14 @@
//===----------------------------------------------------------------------===//
/// Buffer type for `ArraySlice<Element>`.
-public // @testable
-struct _SliceBuffer<Element> : _ArrayBufferProtocol, RandomAccessCollection {
+internal struct _SliceBuffer<Element>
+ : _ArrayBufferProtocol,
+ RandomAccessCollection
+{
internal typealias NativeStorage = _ContiguousArrayStorage<Element>
- public typealias NativeBuffer = _ContiguousArrayBuffer<Element>
+ internal typealias NativeBuffer = _ContiguousArrayBuffer<Element>
- init(
+ internal init(
owner: AnyObject, subscriptBaseAddress: UnsafeMutablePointer<Element>,
indices: Range<Int>, hasNativeBuffer: Bool
) {
@@ -28,7 +30,7 @@
_invariantCheck()
}
- public init() {
+ internal init() {
let empty = _ContiguousArrayBuffer<Element>()
self.owner = empty.owner
self.subscriptBaseAddress = empty.firstElementAddress
@@ -37,7 +39,7 @@
_invariantCheck()
}
- public init(_buffer buffer: NativeBuffer, shiftedToStartIndex: Int) {
+ internal init(_buffer buffer: NativeBuffer, shiftedToStartIndex: Int) {
let shift = buffer.startIndex - shiftedToStartIndex
self.init(
owner: buffer.owner,
@@ -46,7 +48,7 @@
hasNativeBuffer: true)
}
- func _invariantCheck() {
+ internal func _invariantCheck() {
let isNative = _hasNativeBuffer
let isNativeStorage: Bool = (owner as? _ContiguousArrayStorageBase) != nil
_sanityCheck(isNativeStorage == isNative)
@@ -55,17 +57,17 @@
}
}
- var _hasNativeBuffer: Bool {
+ internal var _hasNativeBuffer: Bool {
return (endIndexAndFlags & 1) != 0
}
- var nativeBuffer: NativeBuffer {
+ internal var nativeBuffer: NativeBuffer {
_sanityCheck(_hasNativeBuffer)
return NativeBuffer(
owner as? _ContiguousArrayStorageBase ?? _emptyArrayStorage)
}
- public var nativeOwner: AnyObject {
+ internal var nativeOwner: AnyObject {
_sanityCheck(_hasNativeBuffer, "Expect a native array")
return owner
}
@@ -76,7 +78,7 @@
/// - Precondition: This buffer is backed by a uniquely-referenced
/// `_ContiguousArrayBuffer` and
/// `insertCount <= numericCast(newValues.count)`.
- public mutating func replace<C>(
+ internal mutating func replace<C>(
subRange: Range<Int>,
with insertCount: Int,
elementsOf newValues: C
@@ -111,28 +113,28 @@
/// A value that identifies the storage used by the buffer. Two
/// buffers address the same elements when they have the same
/// identity and count.
- public var identity: UnsafeRawPointer {
+ internal var identity: UnsafeRawPointer {
return UnsafeRawPointer(firstElementAddress)
}
/// An object that keeps the elements stored in this buffer alive.
- public var owner: AnyObject
- public let subscriptBaseAddress: UnsafeMutablePointer<Element>
+ internal var owner: AnyObject
+ internal let subscriptBaseAddress: UnsafeMutablePointer<Element>
- public var firstElementAddress: UnsafeMutablePointer<Element> {
+ internal var firstElementAddress: UnsafeMutablePointer<Element> {
return subscriptBaseAddress + startIndex
}
- public var firstElementAddressIfContiguous: UnsafeMutablePointer<Element>? {
+ internal var firstElementAddressIfContiguous: UnsafeMutablePointer<Element>? {
return firstElementAddress
}
/// [63:1: 63-bit index][0: has a native buffer]
- var endIndexAndFlags: UInt
+ internal var endIndexAndFlags: UInt
//===--- Non-essential bits ---------------------------------------------===//
- public mutating func requestUniqueMutableBackingBuffer(
+ internal mutating func requestUniqueMutableBackingBuffer(
minimumCapacity: Int
) -> NativeBuffer? {
_invariantCheck()
@@ -161,18 +163,18 @@
return nil
}
- public mutating func isMutableAndUniquelyReferenced() -> Bool {
+ internal mutating func isMutableAndUniquelyReferenced() -> Bool {
return _hasNativeBuffer && isUniquelyReferenced()
}
- public mutating func isMutableAndUniquelyReferencedOrPinned() -> Bool {
+ internal mutating func isMutableAndUniquelyReferencedOrPinned() -> Bool {
return _hasNativeBuffer && isUniquelyReferencedOrPinned()
}
/// If this buffer is backed by a `_ContiguousArrayBuffer`
/// containing the same number of elements as `self`, return it.
/// Otherwise, return `nil`.
- public func requestNativeBuffer() -> _ContiguousArrayBuffer<Element>? {
+ internal func requestNativeBuffer() -> _ContiguousArrayBuffer<Element>? {
_invariantCheck()
if _fastPath(_hasNativeBuffer && nativeBuffer.count == count) {
return nativeBuffer
@@ -181,7 +183,7 @@
}
@discardableResult
- public func _copyContents(
+ internal func _copyContents(
subRange bounds: Range<Int>,
initializing target: UnsafeMutablePointer<Element>
) -> UnsafeMutablePointer<Element> {
@@ -195,12 +197,11 @@
}
/// True, if the array is native and does not need a deferred type check.
- var arrayPropertyIsNativeTypeChecked: Bool {
+ internal var arrayPropertyIsNativeTypeChecked: Bool {
return _hasNativeBuffer
}
- public
- var count: Int {
+ internal var count: Int {
get {
return endIndex - startIndex
}
@@ -221,7 +222,7 @@
index >= startIndex && index < endIndex, "Index out of bounds")
}
- public var capacity: Int {
+ internal var capacity: Int {
let count = self.count
if _slowPath(!_hasNativeBuffer) {
return count
@@ -234,16 +235,16 @@
return count
}
- mutating func isUniquelyReferenced() -> Bool {
+ internal mutating func isUniquelyReferenced() -> Bool {
return isKnownUniquelyReferenced(&owner)
}
- mutating func isUniquelyReferencedOrPinned() -> Bool {
+ internal mutating func isUniquelyReferencedOrPinned() -> Bool {
return _isKnownUniquelyReferencedOrPinned(&owner)
}
@_versioned
- func getElement(_ i: Int) -> Element {
+ internal func getElement(_ i: Int) -> Element {
_sanityCheck(i >= startIndex, "negative slice index is out of range")
_sanityCheck(i < endIndex, "slice index out of range")
return subscriptBaseAddress[i]
@@ -253,7 +254,7 @@
///
/// - Precondition: `position` is a valid position in `self` and
/// `position != endIndex`.
- public subscript(position: Int) -> Element {
+ internal subscript(position: Int) -> Element {
get {
return getElement(position)
}
@@ -264,7 +265,7 @@
}
}
- public subscript(bounds: Range<Int>) -> _SliceBuffer {
+ internal subscript(bounds: Range<Int>) -> _SliceBuffer {
get {
_sanityCheck(bounds.lowerBound >= startIndex)
_sanityCheck(bounds.upperBound >= bounds.lowerBound)
@@ -284,14 +285,14 @@
/// The position of the first element in a non-empty collection.
///
/// In an empty collection, `startIndex == endIndex`.
- public var startIndex: Int
+ internal var startIndex: Int
/// The collection's "past the end" position---that is, the position one
/// greater than the last valid subscript argument.
///
/// `endIndex` is always reachable from `startIndex` by zero or more
/// applications of `index(after:)`.
- public var endIndex: Int {
+ internal var endIndex: Int {
get {
return Int(endIndexAndFlags >> 1)
}
@@ -300,13 +301,12 @@
}
}
- public typealias Indices = CountableRange<Int>
+ internal typealias Indices = CountableRange<Int>
//===--- misc -----------------------------------------------------------===//
/// Call `body(p)`, where `p` is an `UnsafeBufferPointer` over the
/// underlying contiguous storage.
- public
- func withUnsafeBufferPointer<R>(
+ internal func withUnsafeBufferPointer<R>(
_ body: (UnsafeBufferPointer<Element>) throws -> R
) rethrows -> R {
defer { _fixLifetime(self) }
@@ -316,8 +316,7 @@
/// Call `body(p)`, where `p` is an `UnsafeMutableBufferPointer`
/// over the underlying contiguous storage.
- public
- mutating func withUnsafeMutableBufferPointer<R>(
+ internal mutating func withUnsafeMutableBufferPointer<R>(
_ body: (UnsafeMutableBufferPointer<Element>) throws -> R
) rethrows -> R {
defer { _fixLifetime(self) }
@@ -327,7 +326,7 @@
}
extension _SliceBuffer {
- public func _copyToContiguousArray() -> ContiguousArray<Element> {
+ internal func _copyToContiguousArray() -> ContiguousArray<Element> {
if _hasNativeBuffer {
let n = nativeBuffer
if count == n.count {
@@ -336,7 +335,7 @@
}
let result = _ContiguousArrayBuffer<Element>(
- uninitializedCount: count,
+ _uninitializedCount: count,
minimumCapacity: 0)
result.firstElementAddress.initialize(
from: firstElementAddress, count: count)
diff --git a/test/Misc/misc_diagnostics.swift b/test/Misc/misc_diagnostics.swift
index 7987284..c1845b6 100644
--- a/test/Misc/misc_diagnostics.swift
+++ b/test/Misc/misc_diagnostics.swift
@@ -99,11 +99,11 @@
var col = 2
var coord = (row, col)
- match += (1, 2) // expected-error{{argument type '(Int, Int)' does not conform to expected type 'Sequence'}}
+ match += (1, 2) // expected-error{{binary operator '+=' cannot be applied to operands of type '[(Int, Int)]' and '(Int, Int)'}} expected-note {{overloads for '+=' exist}}
- match += (row, col) // expected-error{{argument type '(@lvalue Int, @lvalue Int)' does not conform to expected type 'Sequence'}}
+ match += (row, col) // expected-error{{binary operator '+=' cannot be applied to operands of type '[(Int, Int)]' and '(Int, Int)'}} expected-note {{overloads for '+=' exist}}
- match += coord // expected-error{{argument type '@lvalue (Int, Int)' does not conform to expected type 'Sequence'}}
+ match += coord // expected-error{{binary operator '+=' cannot be applied to operands of type '[(Int, Int)]' and '(Int, Int)'}} expected-note {{overloads for '+=' exist}}
match.append(row, col) // expected-error{{extra argument in call}}