private static void Skip(ref IListContext <T> context, out Option <T> next) { context.bd.DetectBacktrack(); var index = context.index + context.step; if (0 <= index && index < context.size) { next = new Option <T>(context.list[index]); context.index = index; } else { next = new Option <T>(); context.bd.Release(); } }
private static void SkipWithIndex(ref IListContext <T> context, out Option <ValueTuple <T, int> > next) { context.bd.DetectBacktrack(); var index = context.index + context.step; if (0 <= index && index < context.size) { next = new Option <ValueTuple <T, int> >(new ValueTuple <T, int>(context.list[index], index)); context.index = index; } else { next = new Option <ValueTuple <T, int> >(); context.bd.Release(); } }
private static void Remove(ref IListContext <T> context, out Option <T> next) { context.bd.DetectBacktrack(); context.list.RemoveAt(context.index); if (context.step == 0) { next = new Option <T>(); context.bd.Release(); } else { if (context.step > 0) { --context.index; } --context.size; Skip(ref context, out next); } }
private static void DisposeWithIndex(ref IListContext <T> context, out Option <Tuple <T, int> > next) { next = new Option <Tuple <T, int> >(); context.bd.Release(); }
private static void Dispose(ref IListContext <T> context, out Option <T> next) { next = new Option <T>(); context.bd.Release(); }