mirror of
https://github.com/Mukheem/TwinTurbine.git
synced 2025-02-01 03:54:18 +01:00
46 lines
1.1 KiB
C#
46 lines
1.1 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace Proxima
|
|
{
|
|
internal class CircularList<T> : IEnumerable<T>
|
|
{
|
|
private T[] _array;
|
|
private int _itemsAdded = 0;
|
|
public int ItemsAdded => _itemsAdded;
|
|
|
|
public CircularList(int capacity)
|
|
{
|
|
_array = new T[capacity];
|
|
}
|
|
|
|
public void Add(T t)
|
|
{
|
|
var index = _itemsAdded % _array.Length;
|
|
_array[index] = t;
|
|
_itemsAdded++;
|
|
}
|
|
|
|
public IEnumerable<T> GetRange(int index)
|
|
{
|
|
index = Mathf.Max(_itemsAdded - _array.Length, index);
|
|
var count = _itemsAdded - index;
|
|
var start = index % _array.Length;
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
yield return _array[(i + start) % _array.Length];
|
|
}
|
|
}
|
|
|
|
public IEnumerator<T> GetEnumerator()
|
|
{
|
|
return GetRange(0).GetEnumerator();
|
|
}
|
|
|
|
IEnumerator IEnumerable.GetEnumerator()
|
|
{
|
|
return GetEnumerator();
|
|
}
|
|
}
|
|
} |