using System.Collections; using java.util; using java.util.stream; namespace LuckPerms.Torch.Utils.Extensions; public static class IteratorExtensions { public static StreamEnumerable AsEnumerable(this BaseStream stream) => new(stream); public static IteratorEnumerator GetEnumerator(this BaseStream stream) => new(stream.iterator()); public struct StreamEnumerable(BaseStream stream) : IEnumerable { public IteratorEnumerator GetEnumerator() => new(stream.iterator()); IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); } 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() => GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); } }