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
- Popup.cs
- SqlReorderer.cs
- StackSpiller.Temps.cs
- SudsWriter.cs
- TextSerializer.cs
- FormViewRow.cs
- SectionInput.cs
- MetadataPropertyvalue.cs
- EndOfStreamException.cs
- SqlOuterApplyReducer.cs
- TwoPhaseCommit.cs
- ServicePoint.cs
- ResourceDescriptionAttribute.cs
- ToolStripPanelSelectionBehavior.cs
- ToolStripLocationCancelEventArgs.cs
- TextPointer.cs
- DataGridView.cs
- HtmlContainerControl.cs
- TdsParserStateObject.cs
- TraceListeners.cs
- TextRunProperties.cs
- IntSecurity.cs
- DataGridViewSortCompareEventArgs.cs
- CrossContextChannel.cs
- CodeConditionStatement.cs
- LifetimeManager.cs
- HtmlInputCheckBox.cs
- UdpChannelFactory.cs
- HttpModule.cs
- FormParameter.cs
- Regex.cs
- ButtonRenderer.cs
- BevelBitmapEffect.cs
- AppDomainUnloadedException.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- DesignOnlyAttribute.cs
- SerializationEventsCache.cs
- JsonFormatReaderGenerator.cs
- PowerModeChangedEventArgs.cs
- SqlProviderManifest.cs
- CommentAction.cs
- InputLangChangeEvent.cs
- SystemSounds.cs
- MethodBuilder.cs
- VisualStyleElement.cs
- ParentControlDesigner.cs
- LineServicesCallbacks.cs
- SqlConnectionPoolGroupProviderInfo.cs
- TextBoxAutoCompleteSourceConverter.cs
- DatatypeImplementation.cs
- UndoEngine.cs
- XomlCompilerHelpers.cs
- ConstructorExpr.cs
- SettingsPropertyWrongTypeException.cs
- TypeBuilderInstantiation.cs
- BamlTreeNode.cs
- MetadataItem.cs
- XmlAggregates.cs
- InlineObject.cs
- WebPartMenuStyle.cs
- DataGridTableStyleMappingNameEditor.cs
- TemplateApplicationHelper.cs
- ReachPrintTicketSerializerAsync.cs
- UserControlAutomationPeer.cs
- StaticSiteMapProvider.cs
- ConstraintStruct.cs
- LocalizableResourceBuilder.cs
- AttributeProviderAttribute.cs
- DataControlFieldCell.cs
- DataTableTypeConverter.cs
- WebProxyScriptElement.cs
- DataGridColumnCollection.cs
- QueryLifecycle.cs
- JavaScriptString.cs
- WorkflowItemPresenter.cs
- RealProxy.cs
- ListControlBuilder.cs
- LineSegment.cs
- SqlDataSourceDesigner.cs
- QuaternionRotation3D.cs
- PropertyToken.cs
- ComboBoxRenderer.cs
- ComboBoxAutomationPeer.cs
- DataTableExtensions.cs
- XDRSchema.cs
- SynchronizationLockException.cs
- SearchExpression.cs
- WebPartTransformer.cs
- TemplateColumn.cs
- CultureTable.cs
- OrderPreservingSpoolingTask.cs
- EncryptedKey.cs
- EdmMember.cs
- SeekStoryboard.cs
- DESCryptoServiceProvider.cs
- SoapMessage.cs
- BitmapEffectGroup.cs
- XmlDictionary.cs
- PrintPageEvent.cs
- TextFormatter.cs