followingquery.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Xml / System / Xml / XPath / Internal / followingquery.cs / 1 / followingquery.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// [....] 
//-----------------------------------------------------------------------------
 
namespace MS.Internal.Xml.XPath { 
    using System;
    using System.Xml; 
    using System.Xml.XPath;
    using System.Diagnostics;

    internal sealed class FollowingQuery : BaseAxisQuery { 
        private XPathNavigator input;
        private XPathNodeIterator iterator; 
 
        public FollowingQuery(Query qyInput, string name, string prefix, XPathNodeType typeTest) : base(qyInput, name, prefix, typeTest) {}
        private FollowingQuery(FollowingQuery other) : base(other) { 
            this.input    = Clone(other.input);
            this.iterator = Clone(other.iterator);
        }
 
        public override void Reset() {
            iterator = null; 
            base.Reset(); 
        }
 
        public override XPathNavigator Advance() {
            if (iterator == null) {
                input = qyInput.Advance();
                if (input == null) { 
                    return null;
                } 
 
                XPathNavigator prev;
                do { 
                    prev = input.Clone();
                    input = qyInput.Advance();
                } while (prev.IsDescendant(input));
                input = prev; 

                iterator = XPathEmptyIterator.Instance; 
            } 

            while (! iterator.MoveNext()) { 
                bool matchSelf;
                if (input.NodeType == XPathNodeType.Attribute || input.NodeType == XPathNodeType.Namespace) {
                    input.MoveToParent();
                    matchSelf = false; 
                } else {
                    while (! input.MoveToNext()) { 
                        if (! input.MoveToParent()) { 
                            return null;
                        } 
                    }
                    matchSelf = true;
                }
                if (NameTest) { 
                    iterator = input.SelectDescendants(Name, Namespace, matchSelf);
                } else { 
                    iterator = input.SelectDescendants(TypeTest, matchSelf); 
                }
            } 
            position++;
            currentNode = iterator.Current;
            return currentNode;
        } 

        public override XPathNodeIterator Clone() { return new FollowingQuery(this); } 
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// [....] 
//-----------------------------------------------------------------------------
 
namespace MS.Internal.Xml.XPath { 
    using System;
    using System.Xml; 
    using System.Xml.XPath;
    using System.Diagnostics;

    internal sealed class FollowingQuery : BaseAxisQuery { 
        private XPathNavigator input;
        private XPathNodeIterator iterator; 
 
        public FollowingQuery(Query qyInput, string name, string prefix, XPathNodeType typeTest) : base(qyInput, name, prefix, typeTest) {}
        private FollowingQuery(FollowingQuery other) : base(other) { 
            this.input    = Clone(other.input);
            this.iterator = Clone(other.iterator);
        }
 
        public override void Reset() {
            iterator = null; 
            base.Reset(); 
        }
 
        public override XPathNavigator Advance() {
            if (iterator == null) {
                input = qyInput.Advance();
                if (input == null) { 
                    return null;
                } 
 
                XPathNavigator prev;
                do { 
                    prev = input.Clone();
                    input = qyInput.Advance();
                } while (prev.IsDescendant(input));
                input = prev; 

                iterator = XPathEmptyIterator.Instance; 
            } 

            while (! iterator.MoveNext()) { 
                bool matchSelf;
                if (input.NodeType == XPathNodeType.Attribute || input.NodeType == XPathNodeType.Namespace) {
                    input.MoveToParent();
                    matchSelf = false; 
                } else {
                    while (! input.MoveToNext()) { 
                        if (! input.MoveToParent()) { 
                            return null;
                        } 
                    }
                    matchSelf = true;
                }
                if (NameTest) { 
                    iterator = input.SelectDescendants(Name, Namespace, matchSelf);
                } else { 
                    iterator = input.SelectDescendants(TypeTest, matchSelf); 
                }
            } 
            position++;
            currentNode = iterator.Current;
            return currentNode;
        } 

        public override XPathNodeIterator Clone() { return new FollowingQuery(this); } 
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK