mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-17 23:56:05 +02:00
Fix enum fields enumerator
This commit is contained in:
parent
60c0377d95
commit
f0bd5ceea5
1 changed files with 45 additions and 31 deletions
|
@ -55,47 +55,61 @@ namespace System
|
||||||
return .();
|
return .();
|
||||||
}
|
}
|
||||||
|
|
||||||
private struct EnumFieldsEnumeratorWrapper<TEnum>
|
private struct EnumFieldsEnumerator<TEnum>
|
||||||
where TEnum : enum
|
where TEnum : enum
|
||||||
{
|
{
|
||||||
FieldInfo.Enumerator mEnumerator;
|
TypeInstance mTypeInstance;
|
||||||
|
int32 mIdx;
|
||||||
|
|
||||||
public this()
|
public this()
|
||||||
{
|
{
|
||||||
mEnumerator = typeof(TEnum).GetFields();
|
mTypeInstance = typeof(TEnum) as TypeInstance;
|
||||||
|
mIdx = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Index
|
public void Reset() mut
|
||||||
{
|
{
|
||||||
get
|
mIdx = -1;
|
||||||
{
|
|
||||||
return mEnumerator.Index;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Count
|
public void Dispose()
|
||||||
{
|
{
|
||||||
get
|
|
||||||
{
|
|
||||||
return mEnumerator.mTypeInstance.[Friend]mFieldDataCount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool MoveNext() mut
|
||||||
|
{
|
||||||
|
if (mTypeInstance == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
TypeInstance.FieldData* fieldData = null;
|
||||||
|
|
||||||
|
repeat
|
||||||
|
{
|
||||||
|
mIdx++;
|
||||||
|
if (mIdx == mTypeInstance.[Friend]mFieldDataCount)
|
||||||
|
return false;
|
||||||
|
fieldData = &mTypeInstance.[Friend]mFieldDataPtr[mIdx];
|
||||||
|
}
|
||||||
|
while (!fieldData.mFlags.HasFlag(.EnumCase));
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public FieldInfo Current
|
public FieldInfo Current
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return (.)mEnumerator.Current;
|
var fieldData = &mTypeInstance.[Friend]mFieldDataPtr[mIdx];
|
||||||
|
return FieldInfo(mTypeInstance, fieldData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool MoveNext() mut
|
public int32 Index
|
||||||
{
|
{
|
||||||
return mEnumerator.MoveNext();
|
get
|
||||||
|
{
|
||||||
|
return mIdx;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Result<FieldInfo> GetNext() mut
|
public Result<FieldInfo> GetNext() mut
|
||||||
|
@ -106,7 +120,7 @@ namespace System
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct EnumValuesEnumerator<TEnum> : EnumFieldsEnumeratorWrapper<TEnum>, IEnumerator<TEnum>
|
public struct EnumValuesEnumerator<TEnum> : EnumFieldsEnumerator<TEnum>, IEnumerator<TEnum>
|
||||||
where TEnum : enum
|
where TEnum : enum
|
||||||
{
|
{
|
||||||
public new TEnum Current
|
public new TEnum Current
|
||||||
|
@ -125,7 +139,7 @@ namespace System
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct EnumNamesEnumerator<TEnum> : EnumFieldsEnumeratorWrapper<TEnum>, IEnumerator<StringView>
|
public struct EnumNamesEnumerator<TEnum> : EnumFieldsEnumerator<TEnum>, IEnumerator<StringView>
|
||||||
where TEnum : enum
|
where TEnum : enum
|
||||||
{
|
{
|
||||||
public new StringView Current
|
public new StringView Current
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue