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]; }