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;
}
}