namespace HeuristicLab.Problems.ProgramSynthesis.Push.Stack { using System; using System.Collections.Generic; public interface IStack : ICollection { bool IsEmpty { get; } bool IsEnabled { get; } T Top { get; } T TopOrDefault { get; } T Bottom { get; } T BottomOrDefault { get; } T this[int key] { get; set; } void Swap(int count); void Yank(int index); void Push(T item); void Push(params T[] items); void ReversePush(params T[] items); void Push(IReadOnlyList items); T Peek(); T[] Peek(int count); void PushResult(int count, Func templateFunc); void Insert(int index, T item); void Insert(int index, params T[] items); void Insert(int index, IEnumerable items); T ReverseElementAt(int offset); void SetTop(T value); void RemoveTop(); void Remove(int count); void RemoveAt(int index); void RemoveAt(int index, int count); T Pop(); T[] Pop(int count); bool TryPop(out T item); T ElementAt(int index); } }