Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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
- AssemblyInfo.cs
- TemplateControlCodeDomTreeGenerator.cs
- ToolStripSettings.cs
- SqlRowUpdatedEvent.cs
- IconConverter.cs
- ListBase.cs
- UserControl.cs
- Configuration.cs
- ProxyGenerator.cs
- DefaultPropertyAttribute.cs
- DateTimeParse.cs
- RuntimeEnvironment.cs
- AlignmentYValidation.cs
- SynchronizationHandlesCodeDomSerializer.cs
- DesignSurfaceManager.cs
- TcpAppDomainProtocolHandler.cs
- ToolStripArrowRenderEventArgs.cs
- Shape.cs
- AutomationElementCollection.cs
- CategoryEditor.cs
- HtmlSelect.cs
- ConfigurationElement.cs
- CommentEmitter.cs
- OleDbPropertySetGuid.cs
- UIElement3D.cs
- ClientTargetSection.cs
- HttpApplicationFactory.cs
- InheritedPropertyChangedEventArgs.cs
- CqlGenerator.cs
- ZoomComboBox.cs
- Binding.cs
- ColorContextHelper.cs
- GotoExpression.cs
- TextTrailingCharacterEllipsis.cs
- SqlConnectionString.cs
- SoapFaultCodes.cs
- SystemFonts.cs
- ToolStripPanelRow.cs
- HttpListenerContext.cs
- SqlParameterizer.cs
- RequestCacheValidator.cs
- XmlCodeExporter.cs
- SerializationStore.cs
- Baml2006KnownTypes.cs
- __TransparentProxy.cs
- ListControl.cs
- TemplatePagerField.cs
- OverflowException.cs
- MenuItemStyleCollection.cs
- SafeCryptContextHandle.cs
- ModelUIElement3D.cs
- NeutralResourcesLanguageAttribute.cs
- ToolStripStatusLabel.cs
- propertyentry.cs
- EventRoute.cs
- brushes.cs
- WebBrowserNavigatedEventHandler.cs
- FrameAutomationPeer.cs
- PermissionSetTriple.cs
- Random.cs
- SectionRecord.cs
- NullableDecimalSumAggregationOperator.cs
- ImageIndexConverter.cs
- TcpChannelListener.cs
- HMACRIPEMD160.cs
- MatrixKeyFrameCollection.cs
- Control.cs
- InputScope.cs
- DesignerAutoFormatStyle.cs
- TiffBitmapDecoder.cs
- SoapHeader.cs
- WebPartHelpVerb.cs
- XmlImplementation.cs
- ObjectItemLoadingSessionData.cs
- UriParserTemplates.cs
- EntityDataSourceWrapperPropertyDescriptor.cs
- LayoutUtils.cs
- Rotation3DAnimationUsingKeyFrames.cs
- SubMenuStyleCollection.cs
- ParameterCollection.cs
- BitmapEffectrendercontext.cs
- UdpSocket.cs
- ListBox.cs
- SessionEndingCancelEventArgs.cs
- SystemWebExtensionsSectionGroup.cs
- WarningException.cs
- XmlTextReader.cs
- KnownTypeDataContractResolver.cs
- ActionNotSupportedException.cs
- DifferencingCollection.cs
- DynamicMethod.cs
- MSAAEventDispatcher.cs
- WebPartManagerDesigner.cs
- TransactionsSectionGroup.cs
- PropertyInformationCollection.cs
- FastPropertyAccessor.cs
- PasswordBox.cs
- DivideByZeroException.cs
- DispatcherTimer.cs
- Function.cs