1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 04:22:20 +02:00

Reversed enumerator for Span

This commit is contained in:
Brian Fiete 2021-10-26 10:32:47 -07:00
parent 51622658dc
commit d11ce0c48c

View file

@ -299,6 +299,8 @@ namespace System
return Enumerator(this);
}
public ReverseEnumerator Reversed => ReverseEnumerator(this);
public override void ToString(String strBuffer)
{
strBuffer.Append("(");
@ -380,6 +382,95 @@ namespace System
}
public Result<T> GetNext() mut
{
if (!MoveNext())
return .Err;
return Current;
}
public Result<T*> GetNextRef() mut
{
if (!MoveNext())
return .Err;
return &CurrentRef;
}
}
public struct ReverseEnumerator : IEnumerator<T>, IRefEnumerator<T*>
{
private Span<T> mList;
private int mIndex;
private T* mCurrent;
public this(Span<T> list)
{
mList = list;
mIndex = list.mLength - 1;
mCurrent = null;
}
public void Dispose()
{
}
public bool MoveNext() mut
{
if (mIndex >= 0)
{
mCurrent = &mList.mPtr[mIndex];
mIndex--;
return true;
}
return MoveNextRare();
}
private bool MoveNextRare() mut
{
mIndex = mList.mLength + 1;
mCurrent = null;
return false;
}
public T Current
{
get
{
return *mCurrent;
}
}
public ref T CurrentRef
{
get
{
return ref *mCurrent;
}
}
public int Index
{
get
{
return mIndex + 1;
}
}
public int Length
{
get
{
return mList.mLength;
}
}
public void Reset() mut
{
mIndex = 0;
mCurrent = null;
}
public Result<T> GetNext() mut
{
if (!MoveNext())