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
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift Collections open source project
//
// Copyright (c) 2021 - 2024 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
//
//===----------------------------------------------------------------------===//
extension OrderedDictionary: Sequence {
/// The element type of a dictionary: a tuple containing an individual
/// key-value pair.
public typealias Element = (key: Key, value: Value)
/// The type that allows iteration over an ordered dictionary's elements.
@frozen
public struct Iterator: IteratorProtocol {
@usableFromInline
internal let _base: OrderedDictionary
@usableFromInline
internal var _position: Int
@inlinable
@inline(__always)
internal init(_base: OrderedDictionary) {
self._base = _base
self._position = 0
}
/// Advances to the next element and returns it, or nil if no next
/// element exists.
///
/// - Complexity: O(1)
@inlinable
public mutating func next() -> Element? {
guard _position < _base._values.count else { return nil }
let result = (_base._keys[_position], _base._values[_position])
_position += 1
return result
}
}
/// The number of elements in the collection.
///
/// - Complexity: O(1)
@inlinable
@inline(__always)
public var underestimatedCount: Int {
count
}
/// Returns an iterator over the elements of this collection.
///
/// - Complexity: O(1)
@inlinable
@inline(__always)
public func makeIterator() -> Iterator {
Iterator(_base: self)
}
}
extension OrderedDictionary.Iterator: Sendable
where Key: Sendable, Value: Sendable {}
|