using System; using System.Collections; using System.Collections.Generic; using java.util; namespace LuckPerms.Torch.Extensions; public static class IteratorExtensions { public static IteratorEnumerator GetEnumerator(this Iterator iterator) => new(iterator); public static IteratorEnumerable AsEnumerable(this Iterator iterator) => new(iterator); public struct IteratorEnumerator(Iterator iterator) : IEnumerator { public bool MoveNext() { if (iterator.hasNext()) { Current = iterator.next() is T ? (T)iterator.next() : default; return true; } Current = default; return false; } public void Reset() { throw new NotSupportedException(); } object? IEnumerator.Current => Current; public T? Current { get; private set; } public void Dispose() { } } public struct IteratorEnumerable(Iterator iterator) : IEnumerable { public IteratorEnumerator GetEnumerator() => new(iterator); IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() => null!; } }