Spring – Rev 1
?pathlinks?
using System;
using System.Collections.Generic;
namespace Spring.Utilities.Collections
{
public class Ring<T>
{
#region Public Enums, Properties and Fields
public int Count { get; }
#endregion
#region Private Delegates, Events, Enums, Properties, Indexers and Fields
private LinkedListNode<T> Current { get; set; }
private LinkedList<T> List { get; }
#endregion
#region Constructors, Destructors and Finalizers
public Ring(IEnumerable<T> e)
{
List = new LinkedList<T>(e);
Count = List.Count;
Current = List.First;
}
#endregion
#region Public Methods
public void Get(out T element)
{
if (Current == null)
{
element = default;
return;
}
element = Current.Value;
Current = Current.Next ?? Current.List.First;
}
public T SeekReverseUntil(Func<T, bool> condition)
{
if (Current == null)
{
return default;
}
var element = Current.Previous;
if (element == null)
{
return default;
}
do
{
element = element.Previous;
if (element == null)
{
return default;
}
if (condition.Invoke(element.Value))
{
return element.Value;
}
} while (element != Current);
return default;
}
#endregion
}
}