コード例 #1
0
		public static State ProcessDigit(State currentState, int digit)
		{
			if (currentState.IsCalculated)
			{
				LogicManager.ResetState(currentState);
			}

			if (currentState.IsFractional)
			{
				currentState.FractionDigitCount++;
				double fractionDivider = Math.Pow(10, currentState.FractionDigitCount);

				if (currentState.CurrentValue < 0)
				{
					currentState.CurrentValue = currentState.CurrentValue - digit / fractionDivider;
				}
				else
				{
					currentState.CurrentValue = currentState.CurrentValue + digit / fractionDivider;
				}

				currentState.CurrentValue = Math.Round(currentState.CurrentValue, currentState.FractionDigitCount);
			}
			else
			{
				currentState.CurrentValue = currentState.CurrentValue * 10 + digit;
			}

			return currentState;
		}
コード例 #2
0
ファイル: Engine.cs プロジェクト: xuchuansheng/GenXSource
		public Engine()
		{
			_state = new State();
			_state.CurrentValueChanged += delegate(object sender, EventArgs e)
			{
				this.OnValueChanged(e);
			};
		}
コード例 #3
0
		private static void ResetState(State currentState)
		{
			currentState.PreviousValue = currentState.CurrentValue;
			currentState.CurrentValue = 0;
			currentState.FractionDigitCount = 0;
			currentState.IsCalculated = false;
			currentState.IsFractional = false;
			currentState.IsSequentialEvaluation = false;
		}
コード例 #4
0
		public State Evaluate(State currentState)
		{
			if (currentState.CurrentValue == 0)
			{
				throw new DivideByZeroException();
			}

			currentState.CurrentValue = currentState.PreviousValue / currentState.CurrentValue;
			return currentState;
		}
コード例 #5
0
ファイル: CAction.cs プロジェクト: xuchuansheng/GenXSource
		public State GetState(State currentState)
		{
			currentState.CurrentValue = 0;
			currentState.FractionDigitCount = 0;
			currentState.IsCalculated = false;
			currentState.IsFractional = false;
			currentState.IsSequentialEvaluation = false;
			currentState.Operation = OperationManager.Empty;
			currentState.PreviousValue = 0;

			return currentState;
		}
コード例 #6
0
		public State GetState(State currentState)
		{
			string currentValue = currentState.CurrentValue.ToString(CultureInfo.InvariantCulture);

			int dotIndex = -1;

			if (currentState.IsFractional)
			{
				dotIndex = currentValue.IndexOf('.');

				if (dotIndex == -1)
				{
					currentValue += ".";
				}
			}

			if (currentValue.Length == 1)
			{
				currentValue = "0";
			}
			else
			{
				currentValue = currentValue.Substring(0, currentValue.Length - 1);
				dotIndex = currentValue.IndexOf('.');

				if (dotIndex == -1)
				{
					currentState.FractionDigitCount = 0;
					currentState.IsFractional = false;
				}
				else
				{
					currentState.FractionDigitCount = currentValue.Length - dotIndex - 1;
				}
			}

			if (currentValue == "-")
			{
				currentValue = "0";
			}

			currentState.CurrentValue = double.Parse(currentValue, NumberStyles.Float, CultureInfo.InvariantCulture);
			return currentState;
		}
コード例 #7
0
		public static State Evaluate(State currentState)
		{
			double bufferCurrentValue;

			if (!currentState.IsSequentialEvaluation)
			{
				currentState.IsSequentialEvaluation = true;
				bufferCurrentValue = currentState.CurrentValue;
			}
			else
			{
				bufferCurrentValue = currentState.PreviousValue;
			}

			currentState = currentState.Operation.Evaluate(currentState);
			currentState.IsCalculated = true;
			currentState.PreviousValue = bufferCurrentValue;
			return currentState;
		}
コード例 #8
0
ファイル: D5Action.cs プロジェクト: xuchuansheng/GenXSource
		public State GetState(State currentState)
		{
			return LogicManager.ProcessDigit(currentState, 5);
		}
コード例 #9
0
		public State Evaluate(State currentState)
		{
			currentState.CurrentValue = currentState.PreviousValue - currentState.CurrentValue;
			return currentState;
		}
コード例 #10
0
ファイル: CEAction.cs プロジェクト: xuchuansheng/GenXSource
		public State GetState(State currentState)
		{
			currentState.CurrentValue = 0;
			return currentState;
		}
コード例 #11
0
ファイル: DivXAction.cs プロジェクト: xuchuansheng/GenXSource
		public State GetState(State currentState)
		{
			currentState.CurrentValue = Math.Pow(currentState.CurrentValue, -1);
			return currentState;
		}
コード例 #12
0
ファイル: PlusAction.cs プロジェクト: xuchuansheng/GenXSource
		public State GetState(State currentState)
		{
			currentState = LogicManager.ProcessOperation(currentState, OperationManager.Plus);
			return LogicManager.Evaluate(currentState);
		}
コード例 #13
0
		public State GetState(State currentState)
		{
			return LogicManager.ProcessOperation(currentState, OperationManager.Divide);
		}
コード例 #14
0
ファイル: DotAction.cs プロジェクト: xuchuansheng/GenXSource
		public State GetState(State currentState)
		{
			currentState.IsFractional = true;
			return currentState;
		}
コード例 #15
0
		public static State ProcessOperation(State currentState, IOperation operation)
		{
			currentState.IsCalculated = true;
			currentState.Operation = operation;
			return currentState;
		}
コード例 #16
0
		public State GetState(State currentState)
		{
			currentState.CurrentValue = currentState.PreviousValue * (currentState.CurrentValue / 100.0);
			currentState.IsCalculated = true;
			return currentState;
		}
コード例 #17
0
		public State Evaluate(State currentState)
		{
			return currentState;
		}
コード例 #18
0
ファイル: SqrtAction.cs プロジェクト: xuchuansheng/GenXSource
		public State GetState(State currentState)
		{
			currentState.CurrentValue = Math.Sqrt(currentState.CurrentValue);
			currentState.IsCalculated = true;
			return currentState;
		}
コード例 #19
0
		public State GetState(State currentState)
		{
			return LogicManager.Evaluate(currentState);
		}
コード例 #20
0
		public State GetState(State currentState)
		{
			return LogicManager.ProcessOperation(currentState, OperationManager.Multiply);
		}
コード例 #21
0
ファイル: EmptyOperation.cs プロジェクト: carlhuth/GenXSource
 public State Evaluate(State currentState)
 {
     return(currentState);
 }