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:
parent
47c9305253
commit
3ea36817ff
1 changed files with 83 additions and 80 deletions
|
@ -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
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue