1
0
Fork 0
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:
disarray2077 2021-12-27 16:06:05 -03:00 committed by GitHub
parent 60c0377d95
commit f0bd5ceea5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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