| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- //
- // Locked.swift
- // LoopKit
- //
- // Copyright © 2018 LoopKit Authors. All rights reserved.
- //
- import os.lock
- internal class Locked<T> {
- private var lock = os_unfair_lock()
- private var _value: T
- init(_ value: T) {
- os_unfair_lock_lock(&lock)
- defer { os_unfair_lock_unlock(&lock) }
- _value = value
- }
- var value: T {
- get {
- os_unfair_lock_lock(&lock)
- defer { os_unfair_lock_unlock(&lock) }
- return _value
- }
- set {
- os_unfair_lock_lock(&lock)
- defer { os_unfair_lock_unlock(&lock) }
- _value = newValue
- }
- }
- @discardableResult
- func mutate(_ changes: (_ value: inout T) -> Void) -> T {
- os_unfair_lock_lock(&lock)
- defer { os_unfair_lock_unlock(&lock) }
- changes(&_value)
- return _value
- }
- }
|