internal Controller(IEqualityComparer <TEntityId> entityEqualityComparer, IComponentKindManager <TComponentKind, TComponentKindSet> componentKindManager) { _entityEqualityComparer = entityEqualityComparer; _componentKindManager = componentKindManager; var componentKindEqualityComparer = componentKindManager.ComponentKindEqualityComparer; _queryManager = new QueryManager <TComponentKind, TComponentKindSet>(componentKindManager); _entityIdsByQueryId = new Dictionary <QueryId, EntityCollection <TEntityId, TComponentKind> >(); _queryIdsByComponentKind = new Dictionary <TComponentKind, HashSet <QueryId> >(componentKindEqualityComparer); _componentKindsByEntity = new Dictionary <TEntityId, TComponentKindSet>(_entityEqualityComparer); }
public QueryManager(IComponentKindManager <TComponentKind, TComponentKindSet> componentKindManager) { _componentKindManager = componentKindManager; _queryStorage = new QueryStorage <TComponentKindSet>(new ProxyComparer <Query <TComponentKindSet> >(this)); }
/// <summary> /// Creates a new instance of <see cref="Scope{TEntityId, TComponentKind}"/> /// </summary> /// <typeparam name="TEntityId">The type of the entity ids.</typeparam> /// <typeparam name="TComponentKind">The type used to represent component kinds.</typeparam> /// <typeparam name="TComponentKindSet">The type used to store sets of component kinds.</typeparam> /// <param name="entityEqualityComparer">The equality comparer used to compare entity ids.</param> /// <param name="componentKindManager">The managers for component kinds and sets component kinds.</param> public static Scope <TEntityId, TComponentKind> CreateScope <TEntityId, TComponentKind, TComponentKindSet>(IEqualityComparer <TEntityId> entityEqualityComparer, IComponentKindManager <TComponentKind, TComponentKindSet> componentKindManager) { if (componentKindManager == null) { throw new ArgumentNullException(nameof(componentKindManager)); } if (entityEqualityComparer == null) { entityEqualityComparer = EqualityComparer <TEntityId> .Default; } var controller = new Controller <TEntityId, TComponentKind, TComponentKindSet> ( entityEqualityComparer, componentKindManager ); return(new Scope <TEntityId, TComponentKind>(controller, componentKindManager.ComponentKindEqualityComparer, entityEqualityComparer)); }