/IronBrainFuck/Parser/BrainAction.cs
C# | 57 lines | 30 code | 5 blank | 22 comment | 2 complexity | b8c8aea5672a2ddbdee262969d2a3a19 MD5 | raw file
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
-
- namespace ZackFlame.IronBrainFuck.Parser
- {
- /// <summary>
- /// Описывает одну или несколько одинаковых команд в BrainFuck программе.
- /// </summary>
- public struct BrainAction
- {
- /// <summary>
- /// Тип команды в BrainFuck программе.
- /// </summary>
- public BrainOperation Operation;
-
- /// <summary>
- /// Количество одинаковых команд.
- /// </summary>
- public uint Count;
-
- /// <summary>
- /// Инициализирует команду с полем Count = 1.
- /// </summary>
- /// <param name="operation">Тип команды в BrainFuck программе.</param>
- public BrainAction(BrainOperation operation)
- : this(operation, 1)
- {
- }
-
- /// <summary>
- /// Инициализирует команду с заданным количеством в поле Count.
- /// При value большим, чем 1, значение operation должно быть равным
- /// BrainOperation.(Add|Sub|Right|Left|Zero).
- /// </summary>
- /// <param name="operation">Тип команд в BrainFuck программе.</param>
- /// <param name="value">
- /// Количество последовательно следующих друг за другом команд в программе.
- /// </param>
- public BrainAction(BrainOperation operation, uint value)
- {
- if (value > 1 && BrainParser.SingleOperations.Contains(operation))
- {
- throw new ArgumentException(
- string.Format(
- "При operation == {0} значение {1} недопустимо для value.",
- typeof(BrainOperation).Name + "." + operation.ToString(),
- value),
- "value");
- }
-
- Operation = operation;
- Count = value;
- }
- }
- }