Example #1
0
        private static void Skip(ref ConcatContext <C2, T, C> context, out Option <T> next)
        {
            context.bd.DetectBacktrack();

            if (context.needsMove)
            {
                if (context.first.current.isSome)
                {
                    context.first.skip(ref context.first.context, out context.first.current);
                }
                else
                {
                    context.second.skip(ref context.second.context, out context.second.current);
                }
            }
            else
            {
                context.needsMove = true;
            }

            next = context.first.current.isSome ? context.first.current : context.second.current;

            if (!next.isSome)
            {
                context.bd.Release();
            }
        }
Example #2
0
        private static void Remove(ref ConcatContext <C2, T, C> context, out Option <T> next)
        {
            context.bd.DetectBacktrack();

            context.needsMove = false;
            if (context.first.current.isSome)
            {
                context.first.remove(ref context.first.context, out context.first.current);
            }
            else
            {
                context.second.remove(ref context.second.context, out context.second.current);
            }
            Skip(ref context, out next);
        }
Example #3
0
        private static void Dispose(ref ConcatContext <C2, T, C> context, out Option <T> next)
        {
            next = new Option <T>();

            context.bd.Release();

            if (context.first.current.isSome)
            {
                context.first.dispose(ref context.first.context, out context.first.current);
                if (context.second.current.isSome)
                {
                    context.second.dispose(ref context.second.context, out context.second.current);
                }
            }
            else
            {
                context.second.dispose(ref context.second.context, out context.second.current);
            }
        }