anchor.diff:      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.
  
positive.code: function TFiniteStateMachine<TState, TCommand, ErrorClass>.GetReachableState(const FromState : TState;
    const OnCommand : TCommand; out Transition : TTransition) : TState;
  begin
    if HasTransition(FromState, OnCommand, Transition) then
      Result := FTransitionTable[Transition]
    else
      RaiseOuterException(ETransitionNotFound.Create(RSTransitionNotFound));
  end;
  
  function TFiniteStateMachine<TState, TCommand, ErrorClass>.GetReachableState(const OnCommand : TCommand) : TState;
  
negative.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 = 'Отсутствует переход из состояния "%s" по команде "%s".';
  
  implementation
  
  uses
    System.Rtti;
  
  { TFiniteStateMachine<TState, TCommand, ErrorClass>.TTransition }
  
  