From b2cb8f74d3909dd9cdf25ab87f6bdfc163dbd6cb Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Mon, 27 Dec 2021 14:34:55 -0500 Subject: [PATCH] Added GetEnumerator --- BeefLibs/corlib/src/Enum.bf | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) 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 {