anchor.diff:              procedure PerformEnterStateAction(const CurrentState : TState);
               procedure PerformExitStateAction(const NewState : TState);
   
  -            property FromState : TState read FFromState;
  -            property OnCommand : TCommand read FOnCommand;
  +            property  FromState : TState read FFromState;
  +            property  OnCommand : TCommand read FOnCommand;
           end;
   
           TTransitionTable = class (TObjectDictionary<TTransition, TState>);
  
positive.code:         const CommandComparer : ICommandComparer); overload; virtual;
        destructor Destroy; override;
  
        function AddTransition(const FromState, ToState : TState; const OnCommand : TCommand
          ) : IFiniteStateMachine; overload;
        function AddTransition(const FromState, ToState : TState; const OnCommand : TCommand;
          const OnEnter : TOnEnterStateMethod; const OnExit : TOnExitStateMethod = nil
          ) : IFiniteStateMachine; overload;
        function AddTransition(const FromState, ToState : TState; const OnCommand : TCommand;
          const OnEnter : TOnEnterStateProc; const OnExit : TOnExitStateProc = nil
          ) : IFiniteStateMachine; overload;
        function Execute(const Command : TCommand) : IFiniteStateMachine;
        function GetReachableState(const FromState : TState; const OnCommand : TCommand) : TState; overload;
        function GetReachableState(const OnCommand : TCommand) : TState; overload;
        function HasTransition(const FromState : TState; const OnCommand : TCommand) : Boolean; overload;
        function HasTransition(const OnCommand : TCommand) : Boolean; overload;
        function RemoveTransition(const FromState : TState; const OnCommand : TCommand) : IFiniteStateMachine;
  
        property CurrentState : TState read GetCurrentState;
        property PreviousState : TState read GetPreviousState;
    end;
  
  resourcestring
  
    RSTransitionNotFound = 'No such transition available.';
  
  implementation
  
  { TFiniteStateMachine<TState, TCommand, ErrorClass>.TTransition }
  
  
negative.code:     FTransitionTable.Remove(T);
  end;
  
  function TFiniteStateMachine<TState, TCommand, ErrorClass>.StateToStr(const State : TState) : String;
  begin
    with TValue.From<TState>(State) do
      if TypeInfo.Kind = tkClass then
        Result := AsObject.ToString
      else
        Result := ToString;
  end;
  
  end.
  