mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
43 lines
1.1 KiB
Swift
43 lines
1.1 KiB
Swift
//===--- Mutex+Extensions.swift -------------------------------------------===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2025 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
import Synchronization
|
|
|
|
extension Mutex {
|
|
init() where Value == Void {
|
|
self.init(())
|
|
}
|
|
|
|
init<T>() where Value == T? {
|
|
self.init(nil)
|
|
}
|
|
|
|
init<T>() where Value == [T] {
|
|
self.init([])
|
|
}
|
|
|
|
init<T, U>() where Value == [T: U] {
|
|
self.init([:])
|
|
}
|
|
}
|
|
|
|
/// Having to write `_ in` when the value is `Void` is annoying.
|
|
extension Mutex where Value == Void {
|
|
borrowing func withLock<Result: ~Copyable & Sendable, E>(
|
|
_ body: () throws(E) -> sending Result
|
|
) throws(E) -> sending Result {
|
|
return try self.withLock { _ throws(E) in
|
|
try body()
|
|
}
|
|
}
|
|
}
|