Files
swift-mirror/stdlib/public/core/BridgingBuffer.swift
Mike Ash fa5888fb3f [Stdlib][Overlays] Rename various classes to avoid conflicting ObjC names.
Old Swift and new Swift runtimes and overlays need to coexist in the same process. This means there must not be any classes which have the same ObjC runtime name in old and new, because the ObjC runtime doesn't like name collisions.

When possible without breaking source compatibility, classes were renamed in Swift, which results in a different ObjC name.

Public classes were renamed only on the ObjC side using the @_objcRuntimeName attribute.

This is similar to the work done in pull request #19295. That only renamed @objc classes. This renames all of the others, since even pure Swift classes still get an ObjC name.

rdar://problem/46646438
2019-01-15 12:21:20 -05:00

71 lines
1.9 KiB
Swift

//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 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 _BridgingBufferHeader {
internal init(_ count: Int) { self.count = count }
internal var count: Int
}
// NOTE: older runtimes called this class _BridgingBufferStorage.
// The two must coexist without a conflicting ObjC class name, so it
// was renamed. The old name must not be used in the new runtime.
internal final class __BridgingBufferStorage
: ManagedBuffer<_BridgingBufferHeader, AnyObject> {
}
internal typealias _BridgingBuffer
= ManagedBufferPointer<_BridgingBufferHeader, AnyObject>
extension ManagedBufferPointer
where Header == _BridgingBufferHeader, Element == AnyObject {
internal init(_ count: Int) {
self.init(
_uncheckedBufferClass: __BridgingBufferStorage.self,
minimumCapacity: count)
self.withUnsafeMutablePointerToHeader {
$0.initialize(to: Header(count))
}
}
internal var count: Int {
@inline(__always)
get {
return header.count
}
@inline(__always)
set {
return header.count = newValue
}
}
internal subscript(i: Int) -> Element {
@inline(__always)
get {
return withUnsafeMutablePointerToElements { $0[i] }
}
}
internal var baseAddress: UnsafeMutablePointer<Element> {
@inline(__always)
get {
return withUnsafeMutablePointerToElements { $0 }
}
}
internal var storage: AnyObject? {
@inline(__always)
get {
return buffer
}
}
}