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
- ClientType.cs
- ListItemParagraph.cs
- SmtpException.cs
- MethodBuilderInstantiation.cs
- CodeMemberMethod.cs
- WindowsGraphicsWrapper.cs
- glyphs.cs
- TabItemAutomationPeer.cs
- System.Data.OracleClient_BID.cs
- BindingExpressionUncommonField.cs
- XmlDomTextWriter.cs
- SapiAttributeParser.cs
- GroupItemAutomationPeer.cs
- SafeWaitHandle.cs
- UidManager.cs
- ResourceAssociationType.cs
- ByteAnimation.cs
- RuntimeEnvironment.cs
- ApplicationServiceManager.cs
- TypeReference.cs
- WizardStepBase.cs
- NonBatchDirectoryCompiler.cs
- EntityDataSourceDesignerHelper.cs
- WindowsFormsHelpers.cs
- ApplicationException.cs
- ItemChangedEventArgs.cs
- RegistryConfigurationProvider.cs
- BindingList.cs
- SmiEventSink_Default.cs
- ObjectView.cs
- SchemaTableOptionalColumn.cs
- FixedHyperLink.cs
- DrawingCollection.cs
- CodeMemberProperty.cs
- MainMenu.cs
- PropertyExpression.cs
- HtmlInputCheckBox.cs
- SizeValueSerializer.cs
- LineMetrics.cs
- EdmMember.cs
- ComplexPropertyEntry.cs
- RectangleHotSpot.cs
- ConnectionModeReader.cs
- PathFigureCollectionConverter.cs
- TreePrinter.cs
- DecoratedNameAttribute.cs
- ScrollChrome.cs
- TextRangeSerialization.cs
- _ConnectionGroup.cs
- ZipArchive.cs
- AccessKeyManager.cs
- ProcessRequestArgs.cs
- ServicePointManager.cs
- ProfileModule.cs
- AnchoredBlock.cs
- DataColumn.cs
- HttpConfigurationContext.cs
- SqlWorkflowPersistenceService.cs
- ReachVisualSerializerAsync.cs
- UIHelper.cs
- CrossContextChannel.cs
- IdnElement.cs
- AggregateNode.cs
- MasterPage.cs
- Imaging.cs
- EmissiveMaterial.cs
- CheckableControlBaseAdapter.cs
- HtmlWindow.cs
- Evaluator.cs
- AutomationPatternInfo.cs
- RefreshEventArgs.cs
- PowerStatus.cs
- ProcessHostConfigUtils.cs
- InvokeSchedule.cs
- MatrixConverter.cs
- DataGridViewAccessibleObject.cs
- XmlSchemaAny.cs
- AuthorizationSection.cs
- DictionaryBase.cs
- Stylesheet.cs
- PersonalizationProvider.cs
- Int64KeyFrameCollection.cs
- XmlAttribute.cs
- LOSFormatter.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- TextTreeObjectNode.cs
- DataGridHeaderBorder.cs
- XmlSiteMapProvider.cs
- CodeObjectCreateExpression.cs
- ILGenerator.cs
- TopClause.cs
- TableAutomationPeer.cs
- Transform3DGroup.cs
- X509CertificateValidationMode.cs
- MouseButton.cs
- DefinitionUpdate.cs
- ResourcePool.cs
- FileStream.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- BuildProvidersCompiler.cs