示例#1
0
        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();
            }
        }
示例#3
0
        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);
            }
        }
示例#4
0
 private static void DisposeWithIndex(ref IListContext <T> context, out Option <Tuple <T, int> > next)
 {
     next = new Option <Tuple <T, int> >();
     context.bd.Release();
 }
示例#5
0
 private static void Dispose(ref IListContext <T> context, out Option <T> next)
 {
     next = new Option <T>();
     context.bd.Release();
 }