public struct ShiftedIterator
public static ShiftedIterator Get(int aOffset, int aRange) => new ShiftedIterator(aOffset, aRange);
int m_Offset, m_Index, m_Range;
public ShiftedIterator GetEnumerator() => this;
public int Current => (m_Index + m_Offset) % m_Range;
public bool MoveNext() => ++m_Index < m_Range;
public ShiftedIterator(int aOffset, int aRange)
m_Offset = (aOffset<0)?(aRange+aOffset%aRange):aOffset;
public static void Main()
Console.Write("Shifted by 4: ");
foreach(var i in new ShiftedIterator(4,10))
Console.Write("Shifted by -1: ");
foreach(var i in new ShiftedIterator(-1,10))
Console.Write("Shifted by -42: ");
foreach(var i in ShiftedIterator.Get(-42,10))