SparseSet iterator implementation
This commit is contained in:
parent
19cab7af5d
commit
5dd149dd82
|
|
@ -65,15 +65,31 @@ public class SparseSet<Element>: UniformStorage, Sequence {
|
|||
sparse.removeAll(keepingCapacity: keepingCapacity)
|
||||
}
|
||||
|
||||
public func makeIterator() -> AnyIterator<Element> {
|
||||
public func makeIterator() -> SparseIterator<Element> {
|
||||
return SparseIterator<Element>(self)
|
||||
/*
|
||||
// NOTE: was optimized by using a dedicated iterator implementation
|
||||
var iter = dense.makeIterator()
|
||||
return AnyIterator<Element> {
|
||||
guard let next: Pair? = iter.next() else { return nil }
|
||||
guard let pair: Pair = next else { return nil }
|
||||
return pair.value
|
||||
}
|
||||
return AnyIterator<Element>.init {
|
||||
guard let next: Pair = iter.next() as? Pair else { return nil }
|
||||
return next.value
|
||||
}*/
|
||||
}
|
||||
|
||||
public struct SparseIterator<Element>: IteratorProtocol {
|
||||
private let sparseSet: SparseSet<Element>
|
||||
private var iterator: IndexingIterator<ContiguousArray<(key: Index, value: Element)?>>
|
||||
init(_ sparseSet: SparseSet<Element>) {
|
||||
self.sparseSet = sparseSet
|
||||
self.iterator = sparseSet.dense.makeIterator()
|
||||
}
|
||||
|
||||
mutating public func next() -> Element? {
|
||||
guard let next: Pair = iterator.next() as? Pair else { return nil }
|
||||
return next.value as? Element
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class SparseComponentSet: SparseSet<Component> {
|
||||
|
|
|
|||
Loading…
Reference in New Issue