Пример #1
0
        public IStateExecutor GetStreamReaderStateExecutor(CalculatorStreamReaderState calculatorStreamReaderState)
        {
            switch (calculatorStreamReaderState)
            {
            case CalculatorStreamReaderState.ReadDigit: return(new ReadDigitStateExecutor(_scInputManager));

            case CalculatorStreamReaderState.ReadOperation: return(new ReadOperationStateExecutor(_scInputManager));

            default: throw new NotSupportedException();
            }
        }
Пример #2
0
        public string ReadKey(ConsoleKeyInfo key)
        {
            var stateExecutor =
                _stateExecutorFactory.GetStreamReaderStateExecutor(_calculatorStreamReaderState);

            var consoleKey = key.Key;
            var keyChar    = key.KeyChar;

            IStateExecutorResult stateExecutorResult;

            switch (consoleKey)
            {
            case ConsoleKey.Backspace:
                stateExecutorResult = stateExecutor.RemoveChar();
                break;

            case ConsoleKey.Enter:
                stateExecutorResult = stateExecutor.CalculateResult();
                break;

            case ConsoleKey.Add:
            case ConsoleKey.OemPlus:
                stateExecutorResult = keyChar == '='
                        ? stateExecutor.CalculateResult()
                        : stateExecutor.SetOperation(SCBinOperation.Add, keyChar);
                break;

            case ConsoleKey.Subtract:
            case ConsoleKey.OemMinus:
                stateExecutorResult = stateExecutor.SetOperation(SCBinOperation.Subtract, keyChar);
                break;

            default:
                stateExecutorResult = stateExecutor.AddChar(keyChar);
                break;
            }

            if (stateExecutorResult.ErrorMessage != null)
            {
                Reset();
                return($"\n\nОшибка! {stateExecutorResult.ErrorMessage}\n\n");
            }

            _calculatorStreamReaderState = stateExecutorResult.NextState;
            return(stateExecutorResult.ConsoleResult);
        }
Пример #3
0
 protected BaseStateExecutor(ISCInputManager scInputManager, CalculatorStreamReaderState currentState)
 {
     _scInputManager = scInputManager;
     CurrentState    = currentState;
 }
Пример #4
0
 private void Reset()
 {
     _calculatorStreamReaderState = CalculatorStreamReaderState.ReadDigit;
 }