using System;
using System.Collections;
using System.Collections.Generic;
namespace Unity.VisualScripting
{
public struct NoAllocEnumerator<T> : IEnumerator<T>
{
private readonly IList<T> list;
private int index;
private T current;
private bool exceeded;
public NoAllocEnumerator(IList<T> list) : this()
{
this.list = list;
}
public void Dispose() { }
public bool MoveNext()
{
if (index < list.Count)
{
current = list[index];
index++;
return true;
}
else
{
index = list.Count + 1;
current = default(T);
exceeded = true;
return false;
}
}
public T Current => current;
Object IEnumerator.Current
{
get
{
if (exceeded)
{
throw new InvalidOperationException();
}
return Current;
}
}
void IEnumerator.Reset()
{
throw new InvalidOperationException();
}
}
}