Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Xml / System / Xml / XPath / Internal / followingsibling.cs / 1 / followingsibling.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; using System.Collections.Generic; using StackNav = ClonableStack; internal sealed class FollSiblingQuery : BaseAxisQuery { StackNav elementStk; List parentStk; XPathNavigator nextInput; public FollSiblingQuery(Query qyInput, string name, string prefix, XPathNodeType type) : base (qyInput, name, prefix, type) { this.elementStk = new StackNav(); this.parentStk = new List (); } private FollSiblingQuery(FollSiblingQuery other) : base(other) { this.elementStk = other.elementStk.Clone(); this.parentStk = new List (other.parentStk); this.nextInput = Clone(other.nextInput); } public override void Reset() { elementStk.Clear(); parentStk.Clear(); nextInput = null; base.Reset(); } private bool Visited(XPathNavigator nav) { XPathNavigator parent = nav.Clone(); parent.MoveToParent(); for (int i = 0; i < parentStk.Count; i++) { if (parent.IsSamePosition(parentStk[i])) { return true; } } parentStk.Add(parent); return false; } private XPathNavigator FetchInput() { XPathNavigator input; do { input = qyInput.Advance(); if (input == null) { return null; } } while (Visited(input)); return input.Clone(); } public override XPathNavigator Advance() { while (true) { if (currentNode == null) { if (nextInput == null) { nextInput = FetchInput(); // This can happen at the begining and at the end } if (elementStk.Count == 0) { if (nextInput == null) { return null; } currentNode = nextInput; nextInput = FetchInput(); } else { currentNode = elementStk.Pop(); } } while (currentNode.IsDescendant(nextInput)) { elementStk.Push(currentNode); currentNode = nextInput; nextInput = qyInput.Advance(); if (nextInput != null) { nextInput = nextInput.Clone(); } } while (currentNode.MoveToNext()) { if (matches(currentNode)) { position++; return currentNode; } } currentNode = null; } } // Advance public override XPathNodeIterator Clone() { return new FollSiblingQuery(this); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- GridViewRowPresenterBase.cs
- CountAggregationOperator.cs
- PrePostDescendentsWalker.cs
- DesignerVerbCollection.cs
- HotCommands.cs
- DrawListViewItemEventArgs.cs
- EmptyControlCollection.cs
- EmptyStringExpandableObjectConverter.cs
- SpotLight.cs
- LinkDescriptor.cs
- Bitmap.cs
- HwndKeyboardInputProvider.cs
- HtmlMeta.cs
- PackagingUtilities.cs
- CorrelationTokenTypeConvertor.cs
- OrderByQueryOptionExpression.cs
- Base64Decoder.cs
- ConvertEvent.cs
- UInt16.cs
- AnimationClockResource.cs
- AutomationPropertyInfo.cs
- ClientBuildManagerCallback.cs
- SoapAttributes.cs
- XPathSelectionIterator.cs
- NativeCppClassAttribute.cs
- SortQuery.cs
- datacache.cs
- ContainerUtilities.cs
- CacheEntry.cs
- DependencyPropertyAttribute.cs
- ControlCachePolicy.cs
- TextFormatter.cs
- Vector3DAnimationUsingKeyFrames.cs
- ObjectPersistData.cs
- EncoderParameters.cs
- PtsHelper.cs
- FontInfo.cs
- PropertyAccessVisitor.cs
- ModifiableIteratorCollection.cs
- CodeRemoveEventStatement.cs
- EntityReference.cs
- CatalogZoneDesigner.cs
- OAVariantLib.cs
- ConfigurationStrings.cs
- FontClient.cs
- Stream.cs
- CustomSignedXml.cs
- DataGridViewCellEventArgs.cs
- ConfigsHelper.cs
- WindowsGrip.cs
- TrackingProfile.cs
- XmlKeywords.cs
- CollectionConverter.cs
- DefaultExpressionVisitor.cs
- DbConnectionPoolCounters.cs
- ListViewTableCell.cs
- DataServiceOperationContext.cs
- TextEditorSelection.cs
- ClientSession.cs
- WebControlAdapter.cs
- DataSvcMapFile.cs
- CharAnimationUsingKeyFrames.cs
- SqlLiftWhereClauses.cs
- SecurityAlgorithmSuiteConverter.cs
- BamlCollectionHolder.cs
- StyleSelector.cs
- SoapExtensionTypeElementCollection.cs
- HttpListener.cs
- XmlAttributeAttribute.cs
- WindowsListViewGroupHelper.cs
- TextBoxView.cs
- GenericXmlSecurityTokenAuthenticator.cs
- ReturnType.cs
- XamlClipboardData.cs
- TimeSpanStorage.cs
- SafeNativeMethods.cs
- ListBindingHelper.cs
- DataGridViewSelectedCellCollection.cs
- Authorization.cs
- Claim.cs
- UpnEndpointIdentityExtension.cs
- GetWinFXPath.cs
- InternalControlCollection.cs
- DropShadowBitmapEffect.cs
- MobileResource.cs
- DataKey.cs
- AssociationSet.cs
- dbenumerator.cs
- DataListItemCollection.cs
- TextDpi.cs
- EventMetadata.cs
- NonPrimarySelectionGlyph.cs
- WebUtil.cs
- LogPolicy.cs
- MulticastDelegate.cs
- OleDbConnectionFactory.cs
- StrokeDescriptor.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- WebPartDisplayModeCancelEventArgs.cs
- User.cs