Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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. // //[....] //----------------------------------------------------------------------------- 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
- TextAutomationPeer.cs
- CodeTypeParameter.cs
- CursorInteropHelper.cs
- ExpressionBuilder.cs
- BooleanProjectedSlot.cs
- ClientRuntimeConfig.cs
- GroupBox.cs
- wgx_commands.cs
- AttributeCollection.cs
- HitTestResult.cs
- StreamGeometry.cs
- DataView.cs
- ViewKeyConstraint.cs
- SectionRecord.cs
- XPathDocumentNavigator.cs
- RoutingBehavior.cs
- RowToParametersTransformer.cs
- CustomValidator.cs
- HwndSource.cs
- _UriTypeConverter.cs
- Gdiplus.cs
- SplashScreen.cs
- HttpServerUtilityBase.cs
- EntityDataSourceContextCreatingEventArgs.cs
- MenuItemBindingCollection.cs
- HeaderedItemsControl.cs
- MenuItemAutomationPeer.cs
- DataSourceListEditor.cs
- QfeChecker.cs
- TablePattern.cs
- basecomparevalidator.cs
- SiteMapNodeCollection.cs
- DataGridCell.cs
- TreeIterator.cs
- WindowsAuthenticationEventArgs.cs
- NodeInfo.cs
- SqlCacheDependency.cs
- AdornedElementPlaceholder.cs
- TextCharacters.cs
- CompiledELinqQueryState.cs
- DelayedRegex.cs
- ContentControl.cs
- WpfSharedXamlSchemaContext.cs
- XamlStyleSerializer.cs
- EntityDescriptor.cs
- CharUnicodeInfo.cs
- Misc.cs
- StringToken.cs
- FormsAuthenticationCredentials.cs
- PageSetupDialog.cs
- WindowsRegion.cs
- Types.cs
- ParallelLoopState.cs
- WebPartConnectionsCloseVerb.cs
- StandardBindingElement.cs
- ProfileBuildProvider.cs
- WebCategoryAttribute.cs
- StringDictionaryEditor.cs
- BackStopAuthenticationModule.cs
- DataTableTypeConverter.cs
- AddInPipelineAttributes.cs
- FrameworkTemplate.cs
- DispatcherProcessingDisabled.cs
- DateTimeConverter2.cs
- DocumentViewerConstants.cs
- ResourceSetExpression.cs
- XmlProcessingInstruction.cs
- DateTimeAutomationPeer.cs
- recordstate.cs
- MdImport.cs
- FlagsAttribute.cs
- BitmapEffectDrawing.cs
- GridViewHeaderRowPresenter.cs
- PrintControllerWithStatusDialog.cs
- XmlSerializationGeneratedCode.cs
- MatrixTransform3D.cs
- Int32CAMarshaler.cs
- DispatcherProcessingDisabled.cs
- DefaultEvaluationContext.cs
- _AutoWebProxyScriptEngine.cs
- WriteFileContext.cs
- CapabilitiesRule.cs
- ListViewGroup.cs
- LayoutEngine.cs
- MergeExecutor.cs
- ParallelEnumerableWrapper.cs
- Odbc32.cs
- OperationResponse.cs
- PaintValueEventArgs.cs
- DeviceSpecificChoice.cs
- ResourcePermissionBaseEntry.cs
- QueryPageSettingsEventArgs.cs
- BitmapMetadataEnumerator.cs
- DiagnosticsConfiguration.cs
- NonValidatingSecurityTokenAuthenticator.cs
- MessageSmuggler.cs
- EndpointFilterProvider.cs
- WebBrowser.cs
- XmlAttributeProperties.cs
- DefaultProxySection.cs