From 9d753a84712e88a69c721f93d2ee7395b8c1ca4c Mon Sep 17 00:00:00 2001 From: ig Date: Thu, 9 Mar 2023 14:01:57 +0100 Subject: [PATCH] Introduce State for Enums --- csharp/Lib/Units/State.cs | 9 ++++++++- csharp/Lib/Units/StateOfT.cs | 27 +++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 csharp/Lib/Units/StateOfT.cs diff --git a/csharp/Lib/Units/State.cs b/csharp/Lib/Units/State.cs index 3e8e48395..88610517c 100644 --- a/csharp/Lib/Units/State.cs +++ b/csharp/Lib/Units/State.cs @@ -34,4 +34,11 @@ public readonly struct State : IReadOnlyList public Int32 Count => Values.Count; public String this[Int32 index] => Values[index]; -} \ No newline at end of file + + public static State From(T t) where T : Enum + { + return new State(t); + } +} + + diff --git a/csharp/Lib/Units/StateOfT.cs b/csharp/Lib/Units/StateOfT.cs new file mode 100644 index 000000000..4a1242dc2 --- /dev/null +++ b/csharp/Lib/Units/StateOfT.cs @@ -0,0 +1,27 @@ +using System.Collections; + +namespace InnovEnergy.Lib.Units; + +public readonly struct State : IReadOnlyList where T:Enum +{ + public IReadOnlyList Values { get; } + + public State(IReadOnlyList values) => Values = values; + + public State(params T[] values) : this((IReadOnlyList)values){} + public State(params State[] states) : this((IReadOnlyList)states.SelectMany(s => s.Values).ToList()){} + + public static implicit operator State(T s) => new((IReadOnlyList)s); + public static implicit operator State(List s) => new((IReadOnlyList)s); + public static implicit operator State(T[] s) => new((IReadOnlyList)s); + + public static State operator |(State left, State right) => new State(left, right); + + public IEnumerator GetEnumerator() => Values.GetEnumerator(); + + public override String ToString() => String.Join("; ", Values); + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + + public Int32 Count => Values.Count; + public T this[Int32 index] => Values[index]; +} \ No newline at end of file