Optimize Nexus storage

This commit is contained in:
Christian Treffs 2019-08-20 17:00:56 +02:00
parent d68b935e2e
commit b692d5de92
1 changed files with 20 additions and 16 deletions

View File

@ -5,25 +5,29 @@
// Created by Christian Treffs on 09.10.17. // Created by Christian Treffs on 09.10.17.
// //
public class Nexus { public final class Nexus {
public weak var delegate: NexusEventDelegate? public final weak var delegate: NexusEventDelegate?
/// - Index: index value matching entity identifier shifted to Int /// Main entity storage.
/// - Value: each element is a entity instance /// Entities are tightly packed by EntityIdentifier.
@usableFromInline var entityStorage: UnorderedSparseSet<Entity> @usableFromInline final var entityStorage: UnorderedSparseSet<Entity>
/// - Key: component type identifier /// - Key: ComponentIdentifier aka component type.
/// - Value: each element is a component instance of the same type (uniform). New component instances are appended. /// - Value: Array of component instances of same type (uniform).
@usableFromInline internal var componentsByType: [ComponentIdentifier: ManagedContiguousArray<Component>] /// New component instances are appended.
@usableFromInline final var componentsByType: [ComponentIdentifier: ManagedContiguousArray<Component>]
/// - Key: entity id as index /// - Key: EntityIdentifier aka entity index
/// - Value: each element is a component identifier associated with this entity /// - Value: Set of unique component types (ComponentIdentifier).
@usableFromInline internal var componentIdsByEntity: [EntityIdentifier: Set<ComponentIdentifier>] /// Each element is a component identifier associated with this entity.
@usableFromInline final var componentIdsByEntity: [EntityIdentifier: Set<ComponentIdentifier>]
/// - Values: entity ids that are currently not used /// Entity ids that are currently not used.
@usableFromInline internal var freeEntities: ContiguousArray<EntityIdentifier> @usableFromInline final var freeEntities: ContiguousArray<EntityIdentifier>
@usableFromInline internal var familyMembersByTraits: [FamilyTraitSet: UnorderedSparseSet<EntityIdentifier>] /// - 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<EntityIdentifier>]
public init() { public init() {
entityStorage = UnorderedSparseSet<Entity>() entityStorage = UnorderedSparseSet<Entity>()
@ -60,7 +64,7 @@ public class Nexus {
// MARK: - Equatable // MARK: - Equatable
extension Nexus: Equatable { extension Nexus: Equatable {
public static func == (lhs: Nexus, rhs: Nexus) -> Bool { @inlinable public static func == (lhs: Nexus, rhs: Nexus) -> Bool {
return lhs.entityStorage == rhs.entityStorage && return lhs.entityStorage == rhs.entityStorage &&
lhs.componentIdsByEntity == rhs.componentIdsByEntity && lhs.componentIdsByEntity == rhs.componentIdsByEntity &&
lhs.freeEntities == rhs.freeEntities && lhs.freeEntities == rhs.freeEntities &&
@ -84,6 +88,6 @@ extension Nexus {
// MARK: - CustomDebugStringConvertible // MARK: - CustomDebugStringConvertible
extension Nexus: CustomDebugStringConvertible { extension Nexus: CustomDebugStringConvertible {
public var debugDescription: String { public var debugDescription: String {
return "Nexus<Entities:\(numEntities) Components:\(numComponents) Families:\(numFamilies)>" return "<Nexus entities:\(numEntities) components:\(numComponents) families:\(numFamilies)>"
} }
} }