namespace Qrakhen.Qamp.Core.Collections; /// /// Push-only Stack that is based on . /// /// public class PushStack : Expander, IPush, IToArray { public PushStack(int initialCapacity = 0x10) { Data = new T[initialCapacity]; } public T? Find(Func callback) { for (int i = 0; i < Count; i++) if (callback(Data[i])) return Data[i]; return default; } public void Push(T[] array) { foreach (T value in array) { Add(value); } } public void Push(IEnumerable array) { foreach (T value in array) { Add(value); } } public long Push(T value) => Add(value); public bool TryGet(long index, out T value) { value = default; if (index < 0 || index >= Count) return false; value = Data[index]; return true; } public T[] ToArray() => Data.Subset(0, Count); public T[] Subset(long from, int length) { T[] result = new T[length]; Array.Copy(Data, from, result, 0, length); return result; } }