using System.Collections;
using System.Collections.Generic;

/// <summary>
/// Extended version of List used to give stack functionality, but with a maximum capacity. 
/// </summary>
public class CappedStack<T> : List<T>
{
    public int maxValues;

    public CappedStack(int max)
    {
        maxValues = max;
    }

    /// <summary>
    /// Adds the object to the top of the stack. If stack is longer than maxValues, 
    /// removes the oldest item. 
    /// </summary>
    /// <param name="val">Object to go on top of the stack.</param>
    public void Push(T val)
    {
        Add(val);
        if (Count > maxValues)
        {
            RemoveAt(0);
        }
    }

    /// <summary>
    /// Returns the item on top of the stack and removes it. 
    /// </summary>
    /// <returns>Top stack item. </returns>
    public T Pop()
    {
        T val = this[Count - 1];
        RemoveAt(Count - 1);
        return val;
    }
}