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
- HMACSHA384.cs
- SystemTcpStatistics.cs
- CommentAction.cs
- BamlMapTable.cs
- LocalFileSettingsProvider.cs
- RequestTimeoutManager.cs
- HandlerMappingMemo.cs
- AnnotationResource.cs
- DataGridCaption.cs
- FilteredAttributeCollection.cs
- AssociationSetMetadata.cs
- UniqueIdentifierService.cs
- glyphs.cs
- PolygonHotSpot.cs
- TypeConverterValueSerializer.cs
- FixedTextSelectionProcessor.cs
- CodeTypeDeclaration.cs
- WebPartEditorApplyVerb.cs
- DesigntimeLicenseContext.cs
- Binding.cs
- DataServiceSaveChangesEventArgs.cs
- MSAAWinEventWrap.cs
- ComponentChangingEvent.cs
- VideoDrawing.cs
- IndexedString.cs
- TreeViewAutomationPeer.cs
- RSACryptoServiceProvider.cs
- WebPartMenuStyle.cs
- UrlPath.cs
- TabControlEvent.cs
- Camera.cs
- ConnectionManagementElementCollection.cs
- CodeTypeReference.cs
- WebPartConnectVerb.cs
- InkCanvasSelectionAdorner.cs
- XmlDocumentSchema.cs
- SqlDataSourceSummaryPanel.cs
- SelectedDatesCollection.cs
- SafeNativeMethods.cs
- shaper.cs
- DataRowExtensions.cs
- UniqueConstraint.cs
- SharedPerformanceCounter.cs
- BaseCodePageEncoding.cs
- Tablet.cs
- DbTransaction.cs
- DataObjectAttribute.cs
- SharedPersonalizationStateInfo.cs
- EdmItemCollection.OcAssemblyCache.cs
- ListBindingHelper.cs
- hresults.cs
- ErrorReporting.cs
- SizeChangedInfo.cs
- DataObjectFieldAttribute.cs
- TypefaceCollection.cs
- BaseDataListActionList.cs
- XPathParser.cs
- DataGridViewColumn.cs
- TrustLevelCollection.cs
- StateFinalizationActivity.cs
- ConnectionManagementSection.cs
- _SSPIWrapper.cs
- RefExpr.cs
- HttpException.cs
- ReferentialConstraint.cs
- DirtyTextRange.cs
- AsyncDataRequest.cs
- OdbcParameter.cs
- AnimatedTypeHelpers.cs
- XmlBinaryReaderSession.cs
- Trigger.cs
- ObjectNotFoundException.cs
- ManagedWndProcTracker.cs
- WinInet.cs
- DoWhile.cs
- CmsInterop.cs
- ObjectTag.cs
- WindowsIPAddress.cs
- MetadataArtifactLoaderCompositeFile.cs
- SystemThemeKey.cs
- LockedAssemblyCache.cs
- DataGridViewColumnTypePicker.cs
- FormattedTextSymbols.cs
- DesignerActionHeaderItem.cs
- ProfilePropertyMetadata.cs
- WebAdminConfigurationHelper.cs
- CoreSwitches.cs
- StdValidatorsAndConverters.cs
- Table.cs
- Qualifier.cs
- OAVariantLib.cs
- HostingEnvironmentSection.cs
- ProfileGroupSettings.cs
- SplitterCancelEvent.cs
- SelectionPattern.cs
- GlyphInfoList.cs
- Table.cs
- HttpCapabilitiesBase.cs
- SinglePageViewer.cs
- DelayedRegex.cs