diff --git a/BeefLibs/corlib/src/Enum.bf b/BeefLibs/corlib/src/Enum.bf index 33b04902..31481a55 100644 --- a/BeefLibs/corlib/src/Enum.bf +++ b/BeefLibs/corlib/src/Enum.bf @@ -1,4 +1,5 @@ using System.Reflection; +using System.Collections; namespace System { @@ -43,13 +44,19 @@ namespace System return false; } - public static readonly EnumValuesEnumerator GetValues() + public static EnumEnumerator GetEnumerator() + where TEnum : enum + { + return .(); + } + + public static EnumValuesEnumerator GetValues() where TEnum : enum { return .(); } - public static readonly EnumNamesEnumerator GetNames() + public static EnumNamesEnumerator GetNames() where TEnum : enum { return .(); @@ -120,6 +127,25 @@ namespace System } } + public struct EnumEnumerator : EnumFieldsEnumerator, IEnumerator<(StringView name, TEnum value)> + where TEnum : enum + { + public new (StringView name, TEnum value) Current + { + get + { + return ((.)base.Current.[Friend]mFieldData.[Friend]mName, (.)base.Current.[Friend]mFieldData.[Friend]mData); + } + } + + public new Result<(StringView name, TEnum value)> GetNext() mut + { + if (!MoveNext()) + return .Err; + return Current; + } + } + public struct EnumValuesEnumerator : EnumFieldsEnumerator, IEnumerator where TEnum : enum {