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;
}
}
}
}