/// <summary> /// Processes instruction queue. /// </summary> /// <param name="postfix">Postix instructions.</param> /// <param name="random">Random number generator.</param> /// <returns>Roll result.</returns> public static RollResult Process(Queue <RollInstruction> postfix, IRandomNumberGenerator random) { RollInstructionChain.SetRandom(random); var valueStack = new Stack <RollInstruction>(); bool more; do { more = RollInstructionChain.PerformInstruction(postfix, valueStack); }while (more); return(new RollResult(valueStack.Pop().Total)); }
/// <summary> /// Converts roll notation into infix roll instructions. /// </summary> /// <param name="notation">Notation to convert.</param> /// <returns>Roll instructions as infix.</returns> public static List <RollInstruction> Convert(string notation) { int index = 0; var infix = new List <RollInstruction>(); while (index < notation.Length) { var parsed = RollInstructionChain.ParseNextInstruction(notation, index); if (parsed.success) { infix.Add(parsed.inst); } index = parsed.index; } return(infix); }