1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-15 14:54:09 +02:00

Range<T> now supports non-int ranges

This commit is contained in:
Brian Fiete 2024-02-27 10:55:02 -05:00
parent 47c9305253
commit 3ea36817ff

View file

@ -225,7 +225,7 @@ namespace System
}
}
struct Range<T> where T : operator T + int where int : operator T - T where bool : operator T >= T
struct Range<T> where T : operator T + T where T : operator T - T where bool : operator T >= T
{
protected T mStart;
protected T mEnd;
@ -244,7 +244,7 @@ namespace System
mEnd = end;
}
public int Length
public T Length
{
[Inline]
get
@ -297,15 +297,6 @@ namespace System
}
}
public ReverseEnumerator Reversed
{
[Inline]
get
{
return ReverseEnumerator(mEnd + -1, mStart);
}
}
public bool Contains(T idx)
{
return (idx >= mStart) && !(idx >= mEnd);
@ -322,18 +313,31 @@ namespace System
mEnd = default;
}
[Inline]
public Enumerator GetEnumerator()
{
return Enumerator(this);
}
public override void ToString(String strBuffer)
{
strBuffer.AppendF($"{mStart}..<{mEnd}");
}
}
public struct Enumerator : IEnumerator<T>
extension Range<T> where T : operator T + T where T : operator T - T where T : operator implicit int8 where bool : operator T >= T
{
[Inline]
public RangeEnumerator<T> GetEnumerator()
{
return RangeEnumerator<T>(this);
}
public ReverseRangeEnumerator<T> Reversed
{
[Inline]
get
{
return ReverseRangeEnumerator<T>(mEnd + -1, mStart);
}
}
}
public struct RangeEnumerator<T> : IEnumerator<T> where T : operator T + T where T : operator T - T where T : operator implicit int8 where bool : operator T >= T
{
private T mEnd;
private T mIndex;
@ -341,8 +345,8 @@ namespace System
[Inline]
public this(Range<T> range)
{
mIndex = range.mStart + -1;
mEnd = range.mEnd;
mIndex = range.[Friend]mStart + -1;
mEnd = range.[Friend]mEnd;
}
public void Dispose()
@ -362,14 +366,14 @@ namespace System
[Inline]
public Result<T> GetNext() mut
{
if (mIndex + 1 >= mEnd)
if (mIndex + (int8)1 >= mEnd)
return .Err;
mIndex += 1;
mIndex = mIndex + (int8)1;
return mIndex;
}
}
public struct ReverseEnumerator : IEnumerator<T>
public struct ReverseRangeEnumerator<T> : IEnumerator<T> where T : operator T + T where T : operator T - T where T : operator implicit int8 where bool : operator T >= T
{
private T mEnd;
private T mIndex;
@ -377,7 +381,7 @@ namespace System
[Inline]
public this(T start, T end)
{
mIndex = start + 1;
mIndex = start + (int8)1;
mEnd = end;
}
@ -400,11 +404,10 @@ namespace System
{
if (mIndex <= mEnd)
return .Err;
mIndex += -1;
mIndex = mIndex + (int8)(-1);
return mIndex;
}
}
}
struct IndexRange : RangeExpression
{