diff --git a/Sources/FirebladeECS/UnorderedSparseSet.swift b/Sources/FirebladeECS/UnorderedSparseSet.swift index 910cac4..d01d30f 100644 --- a/Sources/FirebladeECS/UnorderedSparseSet.swift +++ b/Sources/FirebladeECS/UnorderedSparseSet.swift @@ -12,7 +12,7 @@ /// an element from the sparse set. /// /// See for a reference implementation. -public struct UnorderedSparseSet { +public final class UnorderedSparseSet { /// An index into the dense store. public typealias DenseIndex = Int @@ -30,7 +30,7 @@ public struct UnorderedSparseSet { @usableFromInline var dense: DenseStore @usableFromInline var sparse: SparseStore - public init() { + public convenience init() { self.init(sparse: [:], dense: []) } @@ -55,7 +55,7 @@ public struct UnorderedSparseSet { /// - key: the key /// - Returns: true if new, false if replaced. @discardableResult - public mutating func insert(_ element: Element, at key: Key) -> Bool { + public func insert(_ element: Element, at key: Key) -> Bool { if let denseIndex = findIndex(at: key) { dense[denseIndex] = Entry(key: key, element: element) return false @@ -63,7 +63,7 @@ public struct UnorderedSparseSet { let nIndex = dense.count dense.append(Entry(key: key, element: element)) - sparse[key] = nIndex + sparse.updateValue(nIndex, forKey: key) return true } @@ -86,7 +86,7 @@ public struct UnorderedSparseSet { /// - Parameter key: the key /// - Returns: removed value or nil if key not found. @discardableResult - public mutating func remove(at key: Key) -> Entry? { + public func remove(at key: Key) -> Entry? { guard let denseIndex = findIndex(at: key) else { return nil } @@ -101,7 +101,7 @@ public struct UnorderedSparseSet { } @inlinable - public mutating func removeAll(keepingCapacity: Bool = false) { + public func removeAll(keepingCapacity: Bool = false) { sparse.removeAll(keepingCapacity: keepingCapacity) dense.removeAll(keepingCapacity: keepingCapacity) } @@ -111,7 +111,7 @@ public struct UnorderedSparseSet { /// /// - Parameter denseIndex: the dense index /// - Returns: the element entry - private mutating func swapRemove(at denseIndex: Int) -> Entry { + private func swapRemove(at denseIndex: Int) -> Entry { dense.swapAt(denseIndex, dense.count - 1) return dense.removeLast() } diff --git a/Tests/FirebladeECSTests/SparseSetTests.swift b/Tests/FirebladeECSTests/SparseSetTests.swift index f02f4ec..5bf6d42 100644 --- a/Tests/FirebladeECSTests/SparseSetTests.swift +++ b/Tests/FirebladeECSTests/SparseSetTests.swift @@ -387,7 +387,7 @@ class SparseSetTests: XCTestCase { func testSparseSetDoubleRemove() { class AClass { } - var set = UnorderedSparseSet() + let set = UnorderedSparseSet() let a = AClass() let b = AClass() set.insert(a, at: 0) @@ -471,7 +471,7 @@ class SparseSetTests: XCTestCase { } func testSparseSetReduce() { - var characters = UnorderedSparseSet() + let characters = UnorderedSparseSet() characters.insert("H", at: 4) characters.insert("e", at: 13) @@ -497,7 +497,7 @@ class SparseSetTests: XCTestCase { } func testSubscript() { - var characters = UnorderedSparseSet() + let characters = UnorderedSparseSet() characters[4] = "H" characters[13] = "e" @@ -528,7 +528,7 @@ class SparseSetTests: XCTestCase { } func testStartEndIndex() { - var set = UnorderedSparseSet() + let set = UnorderedSparseSet() set.insert("C", at: 33) set.insert("A", at: 11) @@ -541,7 +541,7 @@ class SparseSetTests: XCTestCase { func testAlternativeKey() { - var set = UnorderedSparseSet() + let set = UnorderedSparseSet() set.insert("A", at: "a") set.insert("C", at: "c")