internal IEnumerable <TraceXPathNavigator.ElementNode> FindSubnodes(string[] headersPath)
            {
                TraceXPathNavigator.ElementNode elementNode;
                if (headersPath == null)
                {
                    throw new ArgumentNullException("headersPath");
                }
                TraceXPathNavigator.ElementNode elementNode1 = this;
                if (string.CompareOrdinal(elementNode1.name, headersPath[0]) != 0)
                {
                    elementNode1 = null;
                }
                int num = 0;

                while (elementNode1 != null)
                {
                    int num1 = num + 1;
                    int num2 = num1;
                    num = num1;
                    if (num2 >= (int)headersPath.Length)
                    {
                        break;
                    }
                    TraceXPathNavigator.ElementNode elementNode2 = null;
                    if (elementNode1.childNodes != null)
                    {
                        List <TraceXPathNavigator.TraceNode> .Enumerator enumerator = elementNode1.childNodes.GetEnumerator();
                        try
                        {
                            while (enumerator.MoveNext())
                            {
                                TraceXPathNavigator.TraceNode current = enumerator.Current;
                                if (current.NodeType != XPathNodeType.Element)
                                {
                                    continue;
                                }
                                elementNode = current as TraceXPathNavigator.ElementNode;
                                if (elementNode == null || string.CompareOrdinal(elementNode.name, headersPath[num]) != 0)
                                {
                                    continue;
                                }
                                if ((int)headersPath.Length != num + 1)
                                {
                                    goto Label0;
                                }
                                yield return(elementNode);
                            }
                            goto Label1;
Label0:
                            elementNode2 = elementNode;
                        }
                        finally
                        {
                            ((IDisposable)enumerator).Dispose();
                        }
                    }
Label1:
                    elementNode1 = elementNode2;
                }
            }
        public override bool MoveToNext()
        {
            if (this.current == null)
            {
                throw new InvalidOperationException();
            }
            bool flag = false;

            if (this.state != XPathNodeType.Text)
            {
                TraceXPathNavigator.ElementNode elementNode = this.current.parent;
                if (elementNode != null)
                {
                    TraceXPathNavigator.TraceNode next = elementNode.MoveToNext();
                    if (next == null && elementNode.text != null && !elementNode.movedToText)
                    {
                        this.state = XPathNodeType.Text;
                        elementNode.movedToText = true;
                        this.current            = elementNode;
                        flag = true;
                    }
                    else if (next != null)
                    {
                        this.state   = next.NodeType;
                        flag         = true;
                        this.current = next;
                    }
                }
            }
            return(flag);
        }
        public override bool MoveToParent()
        {
            if (this.current == null)
            {
                throw new InvalidOperationException();
            }
            bool flag = false;

            switch (this.state)
            {
            case XPathNodeType.Element:
            case XPathNodeType.ProcessingInstruction:
            case XPathNodeType.Comment:
            {
                if (this.current.parent == null)
                {
                    return(flag);
                }
                this.current = this.current.parent;
                this.state   = this.current.NodeType;
                flag         = true;
                return(flag);
            }

            case XPathNodeType.Attribute:
            {
                this.state = XPathNodeType.Element;
                flag       = true;
                return(flag);
            }

            case XPathNodeType.Namespace:
            {
                this.state = XPathNodeType.Element;
                flag       = true;
                return(flag);
            }

            case XPathNodeType.Text:
            {
                this.state = XPathNodeType.Element;
                flag       = true;
                return(flag);
            }

            case XPathNodeType.SignificantWhitespace:
            case XPathNodeType.Whitespace:
            {
                return(flag);
            }

            default:
            {
                return(flag);
            }
            }
        }
 internal TraceXPathNavigator.TraceNode MoveToNext()
 {
     TraceXPathNavigator.TraceNode item = null;
     if (this.elementIndex + 1 < this.childNodes.Count)
     {
         TraceXPathNavigator.ElementNode elementNode = this;
         elementNode.elementIndex = elementNode.elementIndex + 1;
         item = this.childNodes[this.elementIndex];
     }
     return(item);
 }
 internal void CloseElement()
 {
     if (this.closed)
     {
         throw new InvalidOperationException();
     }
     this.current = this.CurrentElement.parent;
     if (this.current == null)
     {
         this.closed = true;
     }
 }
 internal void AddElement(string prefix, string name, string xmlns)
 {
     if (this.closed)
     {
         throw new InvalidOperationException();
     }
     TraceXPathNavigator.ElementNode elementNode = new TraceXPathNavigator.ElementNode(name, prefix, this.CurrentElement, xmlns);
     if (this.current == null)
     {
         this.VerifySize(elementNode);
         this.root    = elementNode;
         this.current = this.root;
         return;
     }
     if (!this.closed)
     {
         this.VerifySize(elementNode);
         this.CurrentElement.Add(elementNode);
         this.current = elementNode;
     }
 }
        public override bool MoveToFirstChild()
        {
            if (this.current == null)
            {
                throw new InvalidOperationException();
            }
            bool flag = false;

            if (this.CurrentElement.childNodes != null && this.CurrentElement.childNodes.Count > 0)
            {
                this.current = this.CurrentElement.childNodes[0];
                this.state   = this.current.NodeType;
                flag         = true;
            }
            else if ((this.CurrentElement.childNodes == null || this.CurrentElement.childNodes.Count == 0) && this.CurrentElement.text != null)
            {
                this.state = XPathNodeType.Text;
                this.CurrentElement.movedToText = true;
                flag = true;
            }
            return(flag);
        }
 internal void Add(TraceXPathNavigator.TraceNode node)
 {
     this.childNodes.Add(node);
 }
 public override void MoveToRoot()
 {
     this.current = this.root;
     this.state   = XPathNodeType.Element;
     this.root.Reset();
 }