Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Xml / System / Xml / XPath / Internal / followingsibling.cs / 1305376 / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ManipulationDevice.cs
- VerticalAlignConverter.cs
- DocumentSequence.cs
- Input.cs
- EventlogProvider.cs
- EntityViewGenerationConstants.cs
- SplayTreeNode.cs
- StrongNameKeyPair.cs
- RoutingConfiguration.cs
- FileLogRecordHeader.cs
- CodeExpressionStatement.cs
- ConfigurationManagerHelper.cs
- GridViewDeletedEventArgs.cs
- WebServicesDescriptionAttribute.cs
- MemberDescriptor.cs
- SQLInt64.cs
- ToolboxBitmapAttribute.cs
- BindingManagerDataErrorEventArgs.cs
- SpellerInterop.cs
- WindowsAuthenticationEventArgs.cs
- RegexInterpreter.cs
- SamlAdvice.cs
- XmlSchemaInclude.cs
- SubtreeProcessor.cs
- TraceInternal.cs
- HandlerWithFactory.cs
- Shape.cs
- CqlParserHelpers.cs
- ConnectionInterfaceCollection.cs
- DataServiceRequest.cs
- XPathParser.cs
- PropertyEmitter.cs
- DataGridViewSelectedColumnCollection.cs
- InputChannel.cs
- BuildProvider.cs
- ColorTranslator.cs
- HostingPreferredMapPath.cs
- SystemTcpStatistics.cs
- CredentialCache.cs
- GroupItem.cs
- RtfControls.cs
- KeyInstance.cs
- URIFormatException.cs
- MappingMetadataHelper.cs
- coordinatorfactory.cs
- CodeCatchClause.cs
- StorageAssociationTypeMapping.cs
- QueryContinueDragEvent.cs
- HttpPostServerProtocol.cs
- Expressions.cs
- TryLoadRunnableWorkflowCommand.cs
- IISUnsafeMethods.cs
- ExceptionNotification.cs
- AnnotationResourceChangedEventArgs.cs
- AmbientValueAttribute.cs
- CodeTypeParameterCollection.cs
- DeploymentSection.cs
- SerializationSectionGroup.cs
- Matrix.cs
- MetadataArtifactLoaderCompositeFile.cs
- DecimalAnimation.cs
- StateRuntime.cs
- DockAndAnchorLayout.cs
- UriScheme.cs
- OdbcParameterCollection.cs
- SqlDataSourceCache.cs
- DesignerAutoFormatCollection.cs
- QilVisitor.cs
- Condition.cs
- ViewBox.cs
- Rights.cs
- TextEvent.cs
- GetUserPreferenceRequest.cs
- BindUriHelper.cs
- ZipIOLocalFileDataDescriptor.cs
- ListItemViewControl.cs
- DesignerTextViewAdapter.cs
- ConstraintManager.cs
- EmissiveMaterial.cs
- CodeAssignStatement.cs
- InternalBufferOverflowException.cs
- BrowserInteropHelper.cs
- HebrewNumber.cs
- BitConverter.cs
- DataSpaceManager.cs
- LayoutEvent.cs
- CacheMemory.cs
- Context.cs
- MissingManifestResourceException.cs
- ToolBarDesigner.cs
- BitmapEffectState.cs
- ConstraintStruct.cs
- ContextBase.cs
- ByteStorage.cs
- DetailsViewModeEventArgs.cs
- ImageListStreamer.cs
- unsafeIndexingFilterStream.cs
- mansign.cs
- FileSystemEventArgs.cs
- IconBitmapDecoder.cs