using System; using System.Collections.Generic; using System.Collections; using System.Text; namespace Sunweaver.VM { /// /// A stack of integers /// public class IntStack : IEnumerable { Stack stack = new Stack(); // 15 digits is the largest number that you can store in a double precision float's 53 bit mantissa. public static Int64 Max = (Int64)1E15 - 1; public static Int64 Min = -Max; public Int64 Pop() { if (stack.Count > 0) return stack.Pop(); else return 0; } public static long Mod(long val) { if (val >= 0) val = val % (Max + 1); else val = val % (Min - 1); return val; } /// /// Pushes the value onto the stack, modding it first down to 9 digits /// /// Value to push onto the stack public void Push(long val) { stack.Push(Mod(val)); } public Int32 Count { get { return stack.Count; } } public void Clear() { stack.Clear(); } public override string ToString() { string returnme = ""; foreach (int x in stack) returnme += " " + x; returnme = returnme.Trim(); return returnme; } public IEnumerator GetEnumerator() { foreach (var level in stack) { yield return level; } } IEnumerator IEnumerable.GetEnumerator() { foreach (var level in stack) { yield return level; } } } }