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
|
public struct AnotherView : ~Escapable {
let ptr: UnsafeRawBufferPointer
@_unsafeNonescapableResult
public init(_ ptr: UnsafeRawBufferPointer) {
self.ptr = ptr
}
}
public struct BufferView : ~Escapable {
public let ptr: UnsafeRawBufferPointer
@_unsafeNonescapableResult
@inlinable
public init(_ ptr: UnsafeRawBufferPointer) {
self.ptr = ptr
}
public init(_ ptr: UnsafeRawBufferPointer, _ a: borrowing Array<Int>) -> dependsOn(a) Self {
self.ptr = ptr
return self
}
public init(_ ptr: UnsafeRawBufferPointer, _ a: consuming AnotherView) -> dependsOn(a) Self {
self.ptr = ptr
return self
}
public init(_ ptr: UnsafeRawBufferPointer, _ a: consuming AnotherView, _ b: borrowing Array<Int>) -> dependsOn(a) dependsOn(b) Self {
self.ptr = ptr
return self
}
}
public struct MutableBufferView : ~Escapable, ~Copyable {
let ptr: UnsafeMutableRawBufferPointer
@_unsafeNonescapableResult
public init(_ ptr: UnsafeMutableRawBufferPointer) {
self.ptr = ptr
}
}
@inlinable
public func derive(_ x: borrowing BufferView) -> dependsOn(scoped x) BufferView {
return BufferView(x.ptr)
}
public func use(_ x: borrowing BufferView) {}
public func borrowAndCreate(_ view: borrowing BufferView) -> dependsOn(scoped view) BufferView {
return BufferView(view.ptr)
}
public func consumeAndCreate(_ view: consuming BufferView) -> dependsOn(view) BufferView {
return BufferView(view.ptr)
}
public func deriveThisOrThat(_ this: borrowing BufferView, _ that: borrowing BufferView) -> dependsOn(scoped this, that) 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
}
}
}
|