using System;
using System.Runtime.CompilerServices;

namespace MoonTools.ECS
{
	public ref struct ReverseSpanEnumerator<T>
	{
		private ReadOnlySpan<T> Span;
		private int index;

		public ReverseSpanEnumerator<T> GetEnumerator() => this;

		public T Current => Span[index];

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public bool MoveNext()
		{
			if (index > 0)
			{
				index -= 1;
				return true;
			}

			return false;
		}

		[MethodImpl(MethodImplOptions.AggressiveInlining)]
		public ReverseSpanEnumerator(Span<T> span)
		{
			Span = span;
			index = span.Length;
		}

		public static ReverseSpanEnumerator<T> Empty => new ReverseSpanEnumerator<T>();
	}
}