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
- ToolStripRendererSwitcher.cs
- TraceContext.cs
- DefaultTextStore.cs
- JsonFormatGeneratorStatics.cs
- XmlSchemaGroupRef.cs
- RegisteredExpandoAttribute.cs
- InheritanceUI.cs
- XXXInfos.cs
- ListenerConfig.cs
- GeneralTransform3DTo2D.cs
- TemplatePropertyEntry.cs
- TextTreeExtractElementUndoUnit.cs
- DataServiceQueryProvider.cs
- DocumentCollection.cs
- Timer.cs
- XmlSchemaRedefine.cs
- MessagePartDescription.cs
- EventSinkActivity.cs
- RecommendedAsConfigurableAttribute.cs
- SortFieldComparer.cs
- ServerIdentity.cs
- Compiler.cs
- ping.cs
- TypeElementCollection.cs
- EncodingInfo.cs
- BooleanProjectedSlot.cs
- ToolBar.cs
- ForwardPositionQuery.cs
- WhiteSpaceTrimStringConverter.cs
- PathFigureCollection.cs
- DocumentViewerConstants.cs
- DocumentCollection.cs
- CheckBoxAutomationPeer.cs
- ZipArchive.cs
- DbgUtil.cs
- ThemeableAttribute.cs
- StackBuilderSink.cs
- ScrollBar.cs
- ApplicationFileParser.cs
- Metadata.cs
- ScopeCollection.cs
- CalendarDataBindingHandler.cs
- GeneralTransform.cs
- RegularExpressionValidator.cs
- IsolatedStorageFilePermission.cs
- ProgressiveCrcCalculatingStream.cs
- ExceptionList.cs
- Currency.cs
- BevelBitmapEffect.cs
- ScrollProperties.cs
- SoapElementAttribute.cs
- RenderingEventArgs.cs
- RoleGroupCollectionEditor.cs
- EventLogEntryCollection.cs
- CqlWriter.cs
- HorizontalAlignConverter.cs
- TemplateControlCodeDomTreeGenerator.cs
- XmlComment.cs
- BindingExpressionBase.cs
- SolidColorBrush.cs
- MailHeaderInfo.cs
- CacheMemory.cs
- WindowsListViewScroll.cs
- ColumnWidthChangingEvent.cs
- SettingsPropertyIsReadOnlyException.cs
- SecurityDocument.cs
- IImplicitResourceProvider.cs
- GlyphTypeface.cs
- UIElement3D.cs
- ObjectListCommandsPage.cs
- EntitySetBase.cs
- Errors.cs
- SponsorHelper.cs
- OptimisticConcurrencyException.cs
- SiteMap.cs
- SizeIndependentAnimationStorage.cs
- XsdDateTime.cs
- xsdvalidator.cs
- RadialGradientBrush.cs
- SuppressMergeCheckAttribute.cs
- VoiceObjectToken.cs
- DrawListViewSubItemEventArgs.cs
- ObjectQueryState.cs
- ExtensionQuery.cs
- WindowVisualStateTracker.cs
- DataRowIndexBuffer.cs
- COAUTHIDENTITY.cs
- MD5.cs
- CrossSiteScriptingValidation.cs
- COM2PropertyBuilderUITypeEditor.cs
- PathGeometry.cs
- RowToFieldTransformer.cs
- Buffer.cs
- CryptoStream.cs
- FacetDescription.cs
- XPathNodeList.cs
- XmlSchemaComplexType.cs
- SafeFileMappingHandle.cs
- Pair.cs
- ExtractedStateEntry.cs