namespace HeuristicLab.Problems.ProgramSynthesis.Push.Stack { using System; using System.Collections.Generic; public interface IPushStack : ICollection, IPushStackBase { T Top { get; } T TopOrDefault { get; } T Bottom { get; } T BottomOrDefault { get; } T this[int key] { get; set; } void Push(T item); void Push(T item1, T item2); void Push(T item1, T item2, T item3); void Push(T item1, T item2, T item3, T item4); void Push(IReadOnlyList items, int startIndex = 0); T Peek(); T[] Peek(int count); void PushResult(int count, Func templateFunc); void Insert(int index, T item); T ReverseElementAt(int offset); void SetTop(T value); T Pop(); T[] Pop(int count); bool TryPop(out T item); T ElementAt(int index); } }