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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
public struct AnotherView : ~Escapable {
let ptr: UnsafeRawBufferPointer
@lifetime(borrow ptr)
public init(_ ptr: UnsafeRawBufferPointer) {
self.ptr = ptr
}
}
public struct BufferView : ~Escapable {
public let ptr: UnsafeRawBufferPointer
@inlinable
@lifetime(borrow ptr)
public init(_ ptr: UnsafeRawBufferPointer) {
self.ptr = ptr
}
@lifetime(borrow a)
public init(_ ptr: UnsafeRawBufferPointer, _ a: borrowing Array<Int>) {
self.ptr = ptr
}
@lifetime(a)
public init(_ ptr: UnsafeRawBufferPointer, _ a: consuming AnotherView) {
self.ptr = ptr
}
@lifetime(a, borrow b)
public init(_ ptr: UnsafeRawBufferPointer, _ a: consuming AnotherView, _ b: borrowing Array<Int>) {
self.ptr = ptr
}
}
public struct MutableBufferView : ~Escapable, ~Copyable {
let ptr: UnsafeMutableRawBufferPointer
@lifetime(borrow ptr)
public init(_ ptr: UnsafeMutableRawBufferPointer) {
self.ptr = ptr
}
}
@inlinable
@lifetime(borrow x)
public func derive(_ x: borrowing BufferView) -> BufferView {
return BufferView(x.ptr)
}
public func use(_ x: borrowing BufferView) {}
@lifetime(borrow view)
public func borrowAndCreate(_ view: borrowing BufferView) -> BufferView {
return BufferView(view.ptr)
}
@lifetime(view)
public func consumeAndCreate(_ view: consuming BufferView) -> BufferView {
return BufferView(view.ptr)
}
@lifetime(borrow this, that)
public func deriveThisOrThat(_ this: borrowing BufferView, _ that: borrowing BufferView) -> BufferView {
if (Int.random(in: 1..<100) == 0) {
return BufferView(this.ptr)
}
return BufferView(that.ptr)
}
public struct Wrapper : ~Escapable {
var _view: BufferView
public init(_ view: consuming BufferView) {
self._view = view
}
public var view: BufferView {
_read {
yield _view
}
_modify {
yield &_view
}
}
}
public enum FakeOptional<Wrapped: ~Escapable>: ~Escapable {
case none, some(Wrapped)
}
extension FakeOptional: Escapable where Wrapped: Escapable {}
extension FakeOptional where Wrapped: ~Escapable {
@lifetime(immortal)
public init(_ nilLiteral: ()) {
self = .none
}
}
|