public PlainStateMachine(IEqualityComparer <TState> stateComparer, IEqualityComparer <TTrigger> triggerComparer) { if (stateComparer == null) { throw new ArgumentNullException(nameof(stateComparer)); } if (triggerComparer == null) { throw new ArgumentNullException(nameof(triggerComparer)); } _stateComparer = new StateEqualityComparer(stateComparer); _triggerComparer = new TriggerEqualityComparer(triggerComparer); _transitionEqualityComparer = new TransitionEqualityComparer(_stateComparer, _triggerComparer); _states = new Dictionary <TState, IState>(_stateComparer); _transitions = new HashSet <Transition <TState, TTrigger> >(_transitionEqualityComparer); _guardConditions = new Dictionary <Transition <TState, TTrigger>, List <IGuardCondition> >(_transitionEqualityComparer); _stateEventHandlers = new Dictionary <TState, HashSet <IStateEventHandler> >(_stateComparer); _transitionCommandQueue = new Queue <TransitionCommand>(); }
public PlainStateMachine(IEqualityComparer <TState> stateComparer, IEqualityComparer <TTrigger> triggerComparer) { if (stateComparer == null) { throw new ArgumentNullException(nameof(stateComparer)); } if (triggerComparer == null) { throw new ArgumentNullException(nameof(triggerComparer)); } _stateComparer = new StateEqualityComparer(stateComparer); _triggerComparer = new TriggerEqualityComparer(triggerComparer); _transitionComparer = new TransitionEqualityComparer <TState, TTrigger>(_stateComparer, _triggerComparer); _states = new PlainStateCollection <TState, TTrigger>(this, _stateComparer); _transitionValidator = new PlainTransitionValidator <TState, TTrigger>(this, _transitionComparer); _transitions = new PlainTransitionCollection <TState, TTrigger>(this, _stateComparer, _transitionComparer); _stateBehaviourScheduler = new PlainStateBehaviourScheduler <TState, TTrigger>(this, _states, _transitions, _transitionValidator, _stateComparer, _triggerComparer); _eventHandlers = new PlainStateEventHandlerCollection <TState, TTrigger>(this, _stateComparer); _eventDispatcher = new PlainEventDispatcher <TState, TTrigger>(_eventHandlers, _stateBehaviourScheduler); }