BizHawk/BizHawk.Common/MruStack.cs

62 lines
927 B
C#

namespace BizHawk.Common
{
public class MruStack<T>
{
private readonly T[] _store;
private int _count;
private int _head;
public MruStack(int capacity)
{
_store = new T[capacity];
Clear();
}
public int Count { get { return _count; } }
public void Clear()
{
_head = 0;
_count = 0;
for (int i = 0; i < _store.Length; i++)
{
_store[i] = default(T);
}
}
public void Push(T value)
{
_store[_head] = value;
_head = (_head + 1) % _store.Length;
if (_count < _store.Length)
{
_count++;
}
}
public T Pop()
{
if (_count == 0)
{
return default(T);
}
_head--;
if (_head < 0)
{
_head = _store.Length - 1;
}
_count--;
T value = _store[_head];
_store[_head] = default(T);
return value;
}
public bool HasElements()
{
return _count > 0;
}
}
}