From 040b36d983a923a831088240b0bbed4b947f14c7 Mon Sep 17 00:00:00 2001 From: Christian Treffs Date: Mon, 3 Aug 2020 11:11:39 +0200 Subject: [PATCH 1/3] Rename EntityIdentifier.Id to Idx --- Sources/FirebladeECS/EntityIdentifier.swift | 6 +++--- Sources/FirebladeECS/Family.swift | 8 ++++---- Sources/FirebladeECS/Nexus+Family.swift | 4 ++-- Sources/FirebladeECS/Nexus+Internal.swift | 2 +- Sources/FirebladeECS/Nexus.swift | 10 +++++----- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Sources/FirebladeECS/EntityIdentifier.swift b/Sources/FirebladeECS/EntityIdentifier.swift index 04ca439..03b8e79 100644 --- a/Sources/FirebladeECS/EntityIdentifier.swift +++ b/Sources/FirebladeECS/EntityIdentifier.swift @@ -8,14 +8,14 @@ public struct EntityIdentifier { static let invalid = EntityIdentifier(.max) - public typealias Id = Int + public typealias Idx = Int /// provides 4294967295 unique identifiers since it's constrained to UInt32 - invalid. - @usableFromInline let id: Id + @usableFromInline let id: Idx @usableFromInline init(_ uint32: UInt32) { - self.id = Id(uint32) + self.id = Idx(uint32) } } diff --git a/Sources/FirebladeECS/Family.swift b/Sources/FirebladeECS/Family.swift index 6310d3c..e154dc9 100644 --- a/Sources/FirebladeECS/Family.swift +++ b/Sources/FirebladeECS/Family.swift @@ -17,7 +17,7 @@ public struct Family where R: FamilyRequirementsManaging { nexus.onFamilyInit(traits: traits) } - @inlinable public var memberIds: UnorderedSparseSet { + @inlinable public var memberIds: UnorderedSparseSet { nexus.members(withFamilyTraits: traits) } @@ -58,7 +58,7 @@ extension Family: LazySequenceProtocol { } // MARK: - components iterator extension Family { public struct ComponentsIterator: IteratorProtocol { - @usableFromInline var memberIdsIterator: UnorderedSparseSet.ElementIterator + @usableFromInline var memberIdsIterator: UnorderedSparseSet.ElementIterator @usableFromInline unowned let nexus: Nexus public init(family: Family) { @@ -85,7 +85,7 @@ extension Family { } public struct EntityIterator: IteratorProtocol { - @usableFromInline var memberIdsIterator: UnorderedSparseSet.ElementIterator + @usableFromInline var memberIdsIterator: UnorderedSparseSet.ElementIterator @usableFromInline unowned let nexus: Nexus public init(family: Family) { @@ -111,7 +111,7 @@ extension Family { } public struct EntityComponentIterator: IteratorProtocol { - @usableFromInline var memberIdsIterator: UnorderedSparseSet.ElementIterator + @usableFromInline var memberIdsIterator: UnorderedSparseSet.ElementIterator @usableFromInline unowned let nexus: Nexus public init(family: Family) { diff --git a/Sources/FirebladeECS/Nexus+Family.swift b/Sources/FirebladeECS/Nexus+Family.swift index 95f3b30..f4357b2 100644 --- a/Sources/FirebladeECS/Nexus+Family.swift +++ b/Sources/FirebladeECS/Nexus+Family.swift @@ -18,8 +18,8 @@ extension Nexus { return traits.isMatch(components: componentIds) } - public func members(withFamilyTraits traits: FamilyTraitSet) -> UnorderedSparseSet { - familyMembersByTraits[traits] ?? UnorderedSparseSet() + public func members(withFamilyTraits traits: FamilyTraitSet) -> UnorderedSparseSet { + familyMembersByTraits[traits] ?? UnorderedSparseSet() } public func isMember(_ entity: Entity, in family: FamilyTraitSet) -> Bool { diff --git a/Sources/FirebladeECS/Nexus+Internal.swift b/Sources/FirebladeECS/Nexus+Internal.swift index 2ba5263..0f05c4a 100644 --- a/Sources/FirebladeECS/Nexus+Internal.swift +++ b/Sources/FirebladeECS/Nexus+Internal.swift @@ -86,7 +86,7 @@ extension Nexus { return } - familyMembersByTraits[traits] = UnorderedSparseSet() + familyMembersByTraits[traits] = UnorderedSparseSet() update(familyMembership: traits) } diff --git a/Sources/FirebladeECS/Nexus.swift b/Sources/FirebladeECS/Nexus.swift index 306e4d4..306c0ec 100644 --- a/Sources/FirebladeECS/Nexus.swift +++ b/Sources/FirebladeECS/Nexus.swift @@ -8,7 +8,7 @@ public final class Nexus { /// Main entity storage. /// Entities are tightly packed by EntityIdentifier. - @usableFromInline final var entityStorage: UnorderedSparseSet + @usableFromInline final var entityStorage: UnorderedSparseSet /// Entity ids that are currently not used. let entityIdGenerator: EntityIdentifierGenerator @@ -29,14 +29,14 @@ public final class Nexus { /// - Key: FamilyTraitSet aka component types that make up one distinct family. /// - Value: Tightly packed EntityIdentifiers that represent the association of an entity to the family. - @usableFromInline final var familyMembersByTraits: [FamilyTraitSet: UnorderedSparseSet] + @usableFromInline final var familyMembersByTraits: [FamilyTraitSet: UnorderedSparseSet] public final var codingStrategy: CodingStrategy public final weak var delegate: NexusEventDelegate? public convenience init() { - self.init(entityStorage: UnorderedSparseSet(), + self.init(entityStorage: UnorderedSparseSet(), componentsByType: [:], componentsByEntity: [:], entityIdGenerator: EntityIdentifierGenerator(), @@ -45,11 +45,11 @@ public final class Nexus { codingStrategy: DefaultCodingStrategy()) } - internal init(entityStorage: UnorderedSparseSet, + internal init(entityStorage: UnorderedSparseSet, componentsByType: [ComponentIdentifier: ManagedContiguousArray], componentsByEntity: [EntityIdentifier: Set], entityIdGenerator: EntityIdentifierGenerator, - familyMembersByTraits: [FamilyTraitSet: UnorderedSparseSet], + familyMembersByTraits: [FamilyTraitSet: UnorderedSparseSet], childrenByParentEntity: [EntityIdentifier: Set], codingStrategy: CodingStrategy) { self.entityStorage = entityStorage From 64c7b16764a95342ef6128319a6859470a299f44 Mon Sep 17 00:00:00 2001 From: Christian Treffs Date: Mon, 3 Aug 2020 11:14:35 +0200 Subject: [PATCH 2/3] Use unsafelyUnwrapped more often --- Sources/FirebladeECS/Family+Coding.swift | 2 +- Sources/FirebladeECS/Nexus+Internal.swift | 4 ++-- Sources/FirebladeECS/Nexus.swift | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Sources/FirebladeECS/Family+Coding.swift b/Sources/FirebladeECS/Family+Coding.swift index 6dadf68..bbcd395 100644 --- a/Sources/FirebladeECS/Family+Coding.swift +++ b/Sources/FirebladeECS/Family+Coding.swift @@ -10,7 +10,7 @@ private struct FamilyMemberContainer where R: FamilyRequirementsManaging { } extension CodingUserInfoKey { - fileprivate static let nexusCodingStrategy = CodingUserInfoKey(rawValue: "nexusCodingStrategy")! + fileprivate static let nexusCodingStrategy = CodingUserInfoKey(rawValue: "nexusCodingStrategy").unsafelyUnwrapped } // MARK: - encoding diff --git a/Sources/FirebladeECS/Nexus+Internal.swift b/Sources/FirebladeECS/Nexus+Internal.swift index 0f05c4a..d0e570d 100644 --- a/Sources/FirebladeECS/Nexus+Internal.swift +++ b/Sources/FirebladeECS/Nexus+Internal.swift @@ -127,10 +127,10 @@ extension Nexus { } func add(entityWithId entityId: EntityIdentifier, toFamilyWithTraits traits: FamilyTraitSet) { - familyMembersByTraits[traits]!.insert(entityId, at: entityId.id) + familyMembersByTraits[traits].unsafelyUnwrapped.insert(entityId, at: entityId.id) } func remove(entityWithId entityId: EntityIdentifier, fromFamilyWithTraits traits: FamilyTraitSet) { - familyMembersByTraits[traits]!.remove(at: entityId.id) + familyMembersByTraits[traits].unsafelyUnwrapped.remove(at: entityId.id) } } diff --git a/Sources/FirebladeECS/Nexus.swift b/Sources/FirebladeECS/Nexus.swift index 306c0ec..d40da02 100644 --- a/Sources/FirebladeECS/Nexus.swift +++ b/Sources/FirebladeECS/Nexus.swift @@ -87,6 +87,6 @@ public struct DefaultCodingStrategy: CodingStrategy { public init() { } public func codingKey(for componentType: C.Type) -> DynamicCodingKey where C: Component { - DynamicCodingKey(stringValue: "\(C.self)")! + DynamicCodingKey(stringValue: "\(C.self)").unsafelyUnwrapped } } From 48c617266cac1af0c1295adb474c9ba820c64e7e Mon Sep 17 00:00:00 2001 From: Christian Treffs Date: Mon, 3 Aug 2020 11:21:48 +0200 Subject: [PATCH 3/3] Fix lint warnings --- Sources/FirebladeECS/Family+Coding.swift | 4 ++-- Sources/FirebladeECS/UnorderedSparseSet.swift | 16 +++++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Sources/FirebladeECS/Family+Coding.swift b/Sources/FirebladeECS/Family+Coding.swift index bbcd395..f6b6047 100644 --- a/Sources/FirebladeECS/Family+Coding.swift +++ b/Sources/FirebladeECS/Family+Coding.swift @@ -10,7 +10,7 @@ private struct FamilyMemberContainer where R: FamilyRequirementsManaging { } extension CodingUserInfoKey { - fileprivate static let nexusCodingStrategy = CodingUserInfoKey(rawValue: "nexusCodingStrategy").unsafelyUnwrapped + static let nexusCodingStrategy = CodingUserInfoKey(rawValue: "nexusCodingStrategy").unsafelyUnwrapped } // MARK: - encoding @@ -43,7 +43,7 @@ extension Family where R: FamilyEncoding { /// - Returns: The encoded data. public func encodeMembers(using encoder: inout Encoder) throws -> Encoder.Output where Encoder: TopLevelEncoder { encoder.userInfo[.nexusCodingStrategy] = nexus.codingStrategy - let components: [R.Components] = self.map { $0 } + let components = [R.Components](self) let container = FamilyMemberContainer(components: components) return try encoder.encode(container) } diff --git a/Sources/FirebladeECS/UnorderedSparseSet.swift b/Sources/FirebladeECS/UnorderedSparseSet.swift index ef0df7f..046f43c 100644 --- a/Sources/FirebladeECS/UnorderedSparseSet.swift +++ b/Sources/FirebladeECS/UnorderedSparseSet.swift @@ -13,15 +13,20 @@ /// /// See for a reference implementation. public struct UnorderedSparseSet { - @usableFromInline final class Storage { + // swiftlint:disable nesting + @usableFromInline + final class Storage { /// An index into the dense store. - public typealias DenseIndex = Int + @usableFromInline + typealias DenseIndex = Int /// A sparse store holding indices into the dense mapped to key. - public typealias SparseStore = [Key: DenseIndex] + @usableFromInline + typealias SparseStore = [Key: DenseIndex] /// A dense store holding all the entries. - public typealias DenseStore = ContiguousArray + @usableFromInline + typealias DenseStore = ContiguousArray @usableFromInline struct Entry { @@ -122,7 +127,8 @@ public struct UnorderedSparseSet { dense.removeAll(keepingCapacity: keepingCapacity) } - @inlinable func makeIterator() -> IndexingIterator> { + @inlinable + func makeIterator() -> IndexingIterator> { dense.makeIterator() } }