private static void Skip(ref BufferPredicateContext <T, C> context, out Option <List <T> > next) { context.bd.DetectBacktrack(); if (context.acc == null) { var acc = ListPool <T> .Instance.Borrow(); context.acc = acc; context.release.Add(acc); } while (context.chained.current.isSome && (context.acc.Count == 0 || context.predicate(context.acc[context.acc.Count - 1], context.chained.current.value))) { context.acc.Add(context.chained.current.value); context.chained.skip(ref context.chained.context, out context.chained.current); } next = context.acc.Count > 0 ? context.acc.ToOption() : Option <List <T> > .None; context.acc = null; if (!next.isSome) { context.release.Slinq().ForEach(ListPool <T> .Instance.Release); ListPool <List <T> > .Instance.Release(context.release); context.bd.Release(); } }
private static void Dispose(ref BufferPredicateContext <T, C> context, out Option <List <T> > next) { next = new Option <List <T> >(); context.release.Slinq().ForEach(ListPool <T> .Instance.Release); ListPool <List <T> > .Instance.Release(context.release); context.bd.Release(); }
private static void Remove(ref BufferPredicateContext <T, C> context, out Option <List <T> > next) { throw new NotSupportedException(); }