diff --git a/Sources/FirebladeECS/Nexus.swift b/Sources/FirebladeECS/Nexus.swift index ac6f407..2adbf19 100644 --- a/Sources/FirebladeECS/Nexus.swift +++ b/Sources/FirebladeECS/Nexus.swift @@ -10,15 +10,16 @@ public typealias EntityComponentHash = Int public typealias ComponentIdsByEntityIndex = Int public typealias ComponentTypeHash = Int // component object identifier hash value public typealias UniformComponents = ManagedContiguousArray -public typealias UniformEntityIdentifiers = SparseEntityIdentifierSet +public typealias UniformEntityIdentifiers = UnorderedSparseSet public typealias ComponentIdentifiers = ContiguousArray public typealias ComponentSet = Set -public typealias Entities = SparseEntitySet +public typealias Entities = UnorderedSparseSet public typealias EntityIdSet = Set public typealias FamilyTraitSetHash = Int public typealias TraitEntityIdHash = Int public typealias EntityIdInFamilyIndex = Int public typealias TraitEntityIdHashSet = [TraitEntityIdHash: EntityIdInFamilyIndex] +public typealias SparseComponentIdentifierSet = UnorderedSparseSet public protocol NexusDelegate: class { func nexusEventOccurred(_ event: ECSEvent) diff --git a/Sources/FirebladeECS/SparseSet.swift b/Sources/FirebladeECS/UnorderedSparseSet.swift similarity index 69% rename from Sources/FirebladeECS/SparseSet.swift rename to Sources/FirebladeECS/UnorderedSparseSet.swift index e54391d..7768332 100644 --- a/Sources/FirebladeECS/SparseSet.swift +++ b/Sources/FirebladeECS/UnorderedSparseSet.swift @@ -1,11 +1,11 @@ // -// SparseSet.swift +// UnorderedSparseSet.swift // FirebladeECS // // Created by Christian Treffs on 30.10.17. // -public class SparseSet: Sequence { +public class UnorderedSparseSet: Sequence { public typealias Index = Int public typealias Key = Int @@ -95,8 +95,8 @@ public class SparseSet: Sequence { dense.removeAll(keepingCapacity: keepingCapacity) } - public func makeIterator() -> SparseSetIterator { - return SparseSetIterator(self) + public func makeIterator() -> UnorderedSparseSetIterator { + return UnorderedSparseSetIterator(self) } /// Removes an element from the set and retuns it in O(1). @@ -121,58 +121,32 @@ public class SparseSet: Sequence { return (denseIndex, entry.element) } - // MARK: - SparseIterator - public struct SparseSetIterator: IteratorProtocol { - private let sparseSet: SparseSet - private var sortedSparseIterator: IndexingIterator<[(key: SparseSet.Index, value: SparseSet.Key)]> + // MARK: - UnorderedSparseSetIterator - init(_ sparseSet: SparseSet) { - self.sparseSet = sparseSet + public struct UnorderedSparseSetIterator: IteratorProtocol { - let sortedSparse = sparseSet.sparse.sorted { first, next -> Bool in - first.key < next.key - } + private var iterator: IndexingIterator.Entry>> - sortedSparseIterator = sortedSparse.makeIterator() + init(_ sparseSet: UnorderedSparseSet) { + iterator = sparseSet.dense.makeIterator() } mutating public func next() -> Element? { - guard let (key, _) = sortedSparseIterator.next() else { - return nil - } - - return sparseSet.get(at: key) - + return iterator.next()?.element } - } } -extension SparseSet.Entry: Equatable where SparseSet.Element: Equatable { - public static func == (lhs: SparseSet.Entry, rhs: SparseSet.Entry) -> Bool { +extension UnorderedSparseSet.Entry: Equatable where UnorderedSparseSet.Element: Equatable { + public static func == (lhs: UnorderedSparseSet.Entry, rhs: UnorderedSparseSet.Entry) -> Bool { return lhs.element == rhs.element && lhs.key == rhs.key } } // MARK: - Equatable -extension SparseSet: Equatable where SparseSet.Element: Equatable { - public static func == (lhs: SparseSet, rhs: SparseSet) -> Bool { +extension UnorderedSparseSet: Equatable where UnorderedSparseSet.Element: Equatable { + public static func == (lhs: UnorderedSparseSet, rhs: UnorderedSparseSet) -> Bool { return lhs.dense == rhs.dense && lhs.sparse == rhs.sparse } } - -// MARK: - specialized sparse sets - -public class SparseEntitySet: SparseSet { - public typealias Index = EntityIndex -} - -public class SparseEntityIdentifierSet: SparseSet { - public typealias Index = EntityIndex - -} - -public class SparseComponentIdentifierSet: SparseSet { - -} diff --git a/Tests/FirebladeECSTests/SparseSetTests.swift b/Tests/FirebladeECSTests/SparseSetTests.swift index eaa7777..e20de60 100644 --- a/Tests/FirebladeECSTests/SparseSetTests.swift +++ b/Tests/FirebladeECSTests/SparseSetTests.swift @@ -10,11 +10,11 @@ import XCTest class SparseSetTests: XCTestCase { - var set: SparseSet! + var set: UnorderedSparseSet! override func setUp() { super.setUp() - set = SparseSet() + set = UnorderedSparseSet() } override func tearDown() { @@ -335,7 +335,7 @@ class SparseSetTests: XCTestCase { func testSparseSetDoubleRemove() { class AClass { } - let set = SparseSet() + let set = UnorderedSparseSet() let a = AClass() let b = AClass() set.insert(a, at: 0) @@ -425,7 +425,7 @@ class SparseSetTests: XCTestCase { } func testSparseSetReduce() { - let characters = SparseSet() + let characters = UnorderedSparseSet() characters.insert("H", at: 4)