qamp/Qrakhen.Qamp.Core/Collections/StackRegister.cs

50 lines
1.0 KiB
C#

namespace Qrakhen.Qamp.Core.Collections;
public class StackRegister<T> : Expander<T>, IToArray<T>
{
public StackRegister(int initialCapacity = 0x10)
{
Data = new T[initialCapacity];
}
public T? Find(Func<T, bool> callback)
{
for (int i = 0; i < Count; i++)
if (callback(Data[i]))
return Data[i];
return default;
}
public void Add(T[] array)
{
foreach (T value in array) {
Add(value);
}
}
public void Add(IEnumerable<T> array)
{
foreach (T value in array) {
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;
}
}