|
11 | 11 |
|
12 | 12 | // THIS FILE IS PART OF A SUBSET OF https://github.com/apple/swift-atomics/
|
13 | 13 |
|
14 |
| -extension Unmanaged: AtomicValue { |
15 |
| - @frozen |
16 |
| - public struct AtomicRepresentation { |
17 |
| - public typealias Value = Unmanaged |
18 |
| - @usableFromInline internal typealias Storage = Int.AtomicRepresentation |
19 |
| - |
20 |
| - @usableFromInline |
21 |
| - internal let _storage: Storage |
22 |
| - |
23 |
| - @inline(__always) @_alwaysEmitIntoClient |
24 |
| - public init(_ value: Value) { |
25 |
| - self._storage = .init(Self._encode(value)) |
26 |
| - } |
27 |
| - |
28 |
| - @inline(__always) @_alwaysEmitIntoClient |
29 |
| - public func dispose() -> Value { |
30 |
| - Self._decode(_storage.dispose()) |
31 |
| - } |
32 |
| - } |
33 |
| -} |
34 |
| - |
35 |
| -extension Unmanaged.AtomicRepresentation { |
36 |
| - @_transparent @_alwaysEmitIntoClient |
37 |
| - @usableFromInline |
38 |
| - internal static func _extract( |
39 |
| - _ ptr: UnsafeMutablePointer<Self> |
40 |
| - ) -> UnsafeMutablePointer<Storage> { |
41 |
| - // `Self` is layout-compatible with its only stored property. |
42 |
| - return UnsafeMutableRawPointer(ptr) |
43 |
| - .assumingMemoryBound(to: Storage.self) |
44 |
| - } |
45 |
| - |
46 |
| - @_transparent @_alwaysEmitIntoClient |
47 |
| - internal static func _decode(_ bitPattern: Int) -> Value { |
48 |
| - return Unmanaged.fromOpaque(UnsafeRawPointer(bitPattern: bitPattern)!) |
49 |
| - } |
50 |
| - |
51 |
| - @_transparent @_alwaysEmitIntoClient |
52 |
| - internal static func _encode(_ value: Value) -> Int { |
53 |
| - return Int(bitPattern: value.toOpaque()) |
54 |
| - } |
55 |
| -} |
56 |
| - |
57 |
| -extension Unmanaged.AtomicRepresentation: AtomicStorage { |
58 |
| - @_semantics("atomics.requires_constant_orderings") |
59 |
| - @_transparent @_alwaysEmitIntoClient |
60 |
| - public static func atomicLoad( |
61 |
| - at pointer: UnsafeMutablePointer<Self> |
62 |
| - ) -> Value { |
63 |
| - let encoded = Storage.atomicLoad(at: _extract(pointer)) |
64 |
| - return _decode(encoded) |
65 |
| - } |
66 |
| - |
67 |
| - @_semantics("atomics.requires_constant_orderings") |
68 |
| - @_transparent @_alwaysEmitIntoClient |
69 |
| - public static func atomicCompareExchange( |
70 |
| - expected: Value, |
71 |
| - desired: Value, |
72 |
| - at pointer: UnsafeMutablePointer<Self> |
73 |
| - ) -> (exchanged: Bool, original: Value) { |
74 |
| - let (exchanged, original) = Storage.atomicCompareExchange( |
75 |
| - expected: _encode(expected), |
76 |
| - desired: _encode(desired), |
77 |
| - at: _extract(pointer)) |
78 |
| - return (exchanged, _decode(original)) |
79 |
| - } |
80 |
| -} |
81 |
| - |
82 |
| -extension Unmanaged: AtomicOptionalWrappable { |
| 14 | +extension Unmanaged { |
83 | 15 | @frozen
|
84 | 16 | public struct AtomicOptionalRepresentation {
|
85 | 17 | public typealias Value = Unmanaged?
|
@@ -126,7 +58,7 @@ extension Unmanaged.AtomicOptionalRepresentation {
|
126 | 58 | }
|
127 | 59 | }
|
128 | 60 |
|
129 |
| -extension Unmanaged.AtomicOptionalRepresentation: AtomicStorage { |
| 61 | +extension Unmanaged.AtomicOptionalRepresentation { |
130 | 62 | @_semantics("atomics.requires_constant_orderings")
|
131 | 63 | @_transparent @_alwaysEmitIntoClient
|
132 | 64 | public static func atomicLoad(
|
|
0 commit comments