Files
swift-mirror/stdlib/public/Cxx/CxxDictionary.swift
Egor Zhdan 919eea7045 [cxx-interop] Add CxxDictionary protocol for std::map ergonomics
This adds a protocol to the C++ standard library overlay which will improve the ergonomics of `std::map` and `std::unordered_map` when used from Swift code.

As of now, `CxxDictionary` adds a subscript with an optional return type that mimics the subscript of `Swift.Dictionary`.

Similar to https://github.com/apple/swift/pull/63244.
2023-02-09 14:31:06 +00:00

38 lines
1.1 KiB
Swift

//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2023 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
//
//===----------------------------------------------------------------------===//
public protocol CxxDictionary<Key, Value> {
associatedtype Key
associatedtype Value
associatedtype RawIterator: UnsafeCxxInputIterator
where RawIterator.Pointee: CxxPair<Key, Value>
/// Do not implement this function manually in Swift.
func __findUnsafe(_ key: Key) -> RawIterator
/// Do not implement this function manually in Swift.
func __endUnsafe() -> RawIterator
}
extension CxxDictionary {
@inlinable
public subscript(key: Key) -> Value? {
get {
let iter = __findUnsafe(key)
guard iter != __endUnsafe() else {
return nil
}
return iter.pointee.second
}
}
}