public void Reset()
 {
     if (this._disposed)
     {
         throw new ObjectDisposedException(objectName: nameof(DepthFirstTreeEnumerator <I>));
     }
     this._elementStack     = new Stack <I>();
     this._currentElement   = default;
     this._enumerationState = TreeEnumerationState.BeforeEnumeration;
 }
        public bool MoveNext()
        {
            var flag = true;

            if (this._disposed)
            {
                throw new ObjectDisposedException(objectName: nameof(DepthFirstTreeEnumerator <I>));
            }
            switch (this._enumerationState)
            {
            case TreeEnumerationState.BeforeEnumeration:
                if (!this._ignoreRoot)
                {
                    this._currentElement = this.Root;
                }
                else
                {
                    this._currentElement = this._navigator.GetFirstChild(current: this.Root);
                    if (this._currentElement == null)
                    {
                        this._enumerationState = TreeEnumerationState.AfterEnumeration;
                        flag = false;
                        break;
                    }

                    var nextSibling = this._navigator.GetNextSibling(current: this._currentElement);
                    if (nextSibling != null)
                    {
                        this._elementStack.Push(item: nextSibling);
                    }
                }

                var firstChild1 = this._navigator.GetFirstChild(current: this._currentElement);
                if (firstChild1 != null)
                {
                    this._elementStack.Push(item: firstChild1);
                }
                this._enumerationState = TreeEnumerationState.InEnumeration;
                break;

            case TreeEnumerationState.InEnumeration:
                if (this._elementStack.Count == 0)
                {
                    this._currentElement   = default;
                    this._enumerationState = TreeEnumerationState.AfterEnumeration;
                    flag = false;
                    break;
                }

                this._currentElement = this._elementStack.Pop();
                var nextSibling1 = this._navigator.GetNextSibling(current: this._currentElement);
                if (nextSibling1 != null)
                {
                    this._elementStack.Push(item: nextSibling1);
                }
                var firstChild2 = this._navigator.GetFirstChild(current: this._currentElement);
                if (firstChild2 != null)
                {
                    this._elementStack.Push(item: firstChild2);
                }

                break;

            case TreeEnumerationState.AfterEnumeration:
                flag = false;
                break;
            }

            return(flag);
        }
Ejemplo n.º 3
0
        public bool MoveNext()
        {
            var flag = true;

            if (this._disposed)
            {
                throw new ObjectDisposedException(objectName: nameof(BreadthFirstTreeEnumerator <I>));
            }
            switch (this._enumerationState)
            {
            case TreeEnumerationState.BeforeEnumeration:
                if (!this._ignoreRoot)
                {
                    this._currentElement   = Root;
                    this._enumerationState = TreeEnumerationState.AtRoot;
                }
                else
                {
                    this._currentElement   = this._navigator.GetFirstChild(current: Root);
                    this._enumerationState = TreeEnumerationState.InEnumeration;
                }

                if (this._currentElement == null)
                {
                    this._enumerationState = TreeEnumerationState.AfterEnumeration;
                    flag = false;
                    break;
                }

                var firstChild1 = this._navigator.GetFirstChild(current: this._currentElement);
                if (firstChild1 != null)
                {
                    this._elementQueue.Enqueue(item: firstChild1);
                }

                break;

            case TreeEnumerationState.AtRoot:
                this._currentElement = this._elementQueue.Dequeue();
                var firstChild2 = this._navigator.GetFirstChild(current: this._currentElement);
                if (firstChild2 != null)
                {
                    this._elementQueue.Enqueue(item: firstChild2);
                }
                this._enumerationState = TreeEnumerationState.InEnumeration;
                break;

            case TreeEnumerationState.InEnumeration:
                this._currentElement = this._navigator.GetNextSibling(current: this._currentElement);
                if (this._currentElement == null)
                {
                    if (this._elementQueue.Count == 0)
                    {
                        this._enumerationState = TreeEnumerationState.AfterEnumeration;
                        flag = false;
                        break;
                    }

                    this._currentElement = this._elementQueue.Dequeue();
                    var firstChild3 = this._navigator.GetFirstChild(current: this._currentElement);
                    if (firstChild3 != null)
                    {
                        this._elementQueue.Enqueue(item: firstChild3);
                    }
                    break;
                }

                var firstChild4 = this._navigator.GetFirstChild(current: this._currentElement);
                if (firstChild4 != null)
                {
                    this._elementQueue.Enqueue(item: firstChild4);
                }
                break;

            case TreeEnumerationState.AfterEnumeration:
                flag = false;
                break;
            }

            return(flag);
        }