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()) return false; Current = (T)iterator.next(); return true; } 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!; } }