Exemplo n.º 1
0
            public override bool MoveNext()
            {
                switch (_state)
                {
                case 1:
                    _node  = _prepended;
                    _state = 2;
                    goto case 2;

                case 2:
                    if (_node != null)
                    {
                        _current = _node.Item;
                        _node    = _node.Linked;
                        return(true);
                    }

                    GetSourceEnumerator();
                    _state = 3;
                    goto case 3;

                case 3:
                    if (LoadFromEnumerator())
                    {
                        return(true);
                    }

                    if (_appended == null)
                    {
                        return(false);
                    }

                    _enumerator = _appended.GetEnumerator();
                    _state      = 4;
                    goto case 4;

                case 4:
                    return(LoadFromEnumerator());
                }

                Dispose();
                return(false);
            }
Exemplo n.º 2
0
            protected override async ValueTask <bool> MoveNextCore()
            {
                switch (_state)
                {
                case AsyncIteratorState.Allocated:
                    _mode  = 1;
                    _state = AsyncIteratorState.Iterating;
                    goto case AsyncIteratorState.Iterating;

                case AsyncIteratorState.Iterating:
                    switch (_mode)
                    {
                    case 1:
                        _node = _prepended;
                        _mode = 2;
                        goto case 2;

                    case 2:
                        if (_node != null)
                        {
                            _current = _node.Item;
                            _node    = _node.Linked;
                            return(true);
                        }

                        GetSourceEnumerator(_cancellationToken);
                        _mode = 3;
                        goto case 3;

                    case 3:
                        if (await LoadFromEnumeratorAsync().ConfigureAwait(false))
                        {
                            return(true);
                        }

                        if (_appended != null)
                        {
                            _appendedEnumerator = _appended.GetEnumerator(_appendCount);
                            _mode = 4;
                            goto case 4;
                        }

                        break;


                    case 4:
                        if (_appendedEnumerator.MoveNext())
                        {
                            _current = _appendedEnumerator.Current;
                            return(true);
                        }
                        break;
                    }

                    break;
                }

                await DisposeAsync().ConfigureAwait(false);

                return(false);
            }
Exemplo n.º 3
0
            protected override async Task <bool> MoveNextCore(CancellationToken cancellationToken)
            {
                switch (state)
                {
                case AsyncIteratorState.Allocated:
                    mode  = 1;
                    state = AsyncIteratorState.Iterating;
                    goto case AsyncIteratorState.Iterating;

                case AsyncIteratorState.Iterating:
                    switch (mode)
                    {
                    case 1:
                        node = prepended;
                        mode = 2;
                        goto case 2;

                    case 2:
                        if (node != null)
                        {
                            current = node.Item;
                            node    = node.Linked;
                            return(true);
                        }

                        GetSourceEnumerator();
                        mode = 3;
                        goto case 3;

                    case 3:
                        if (await LoadFromEnumerator(cancellationToken)
                            .ConfigureAwait(false))
                        {
                            return(true);
                        }

                        if (appended != null)
                        {
                            appendedEnumerator = appended.GetEnumerator();
                            mode = 4;
                            goto case 4;
                        }

                        break;


                    case 4:
                        if (appendedEnumerator.MoveNext())
                        {
                            current = appendedEnumerator.Current;
                            return(true);
                        }
                        break;
                    }

                    break;
                }

                Dispose();
                return(false);
            }