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
- XmlTypeAttribute.cs
- SQlBooleanStorage.cs
- OutputCacheProfileCollection.cs
- ExpressionConverter.cs
- TdsParserHelperClasses.cs
- MemberRestriction.cs
- ValueHandle.cs
- manifestimages.cs
- SqlDependency.cs
- DefaultSection.cs
- ListManagerBindingsCollection.cs
- CreateRefExpr.cs
- RepeaterItemEventArgs.cs
- WebPartZoneAutoFormat.cs
- DocumentPageView.cs
- Slider.cs
- XMLUtil.cs
- RelatedPropertyManager.cs
- AnimatedTypeHelpers.cs
- Image.cs
- BitmapEffect.cs
- UdpChannelListener.cs
- RefExpr.cs
- CookielessData.cs
- FormViewUpdatedEventArgs.cs
- IncrementalReadDecoders.cs
- ElementAction.cs
- shaper.cs
- AffineTransform3D.cs
- PartitionerQueryOperator.cs
- GeneralTransformGroup.cs
- StringToken.cs
- TPLETWProvider.cs
- TrustSection.cs
- WebAdminConfigurationHelper.cs
- Bind.cs
- ReflectPropertyDescriptor.cs
- SymbolMethod.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- Reference.cs
- SettingsProperty.cs
- SqlSelectStatement.cs
- XPathNode.cs
- SecurityRuntime.cs
- SystemSounds.cs
- ImplicitInputBrush.cs
- DataTransferEventArgs.cs
- dataSvcMapFileLoader.cs
- IPCCacheManager.cs
- TableSectionStyle.cs
- HTTPNotFoundHandler.cs
- OleStrCAMarshaler.cs
- CodeBinaryOperatorExpression.cs
- TextLineResult.cs
- SafeProcessHandle.cs
- ExternalDataExchangeService.cs
- TextRunCacheImp.cs
- EditorPart.cs
- DocumentViewerBase.cs
- SmtpDateTime.cs
- ManagedFilter.cs
- IteratorFilter.cs
- HwndHost.cs
- RoleManagerSection.cs
- TemplatedControlDesigner.cs
- SQLBytesStorage.cs
- BitSet.cs
- CapiNative.cs
- DependencyProperty.cs
- WebServiceErrorEvent.cs
- PropertyStore.cs
- XmlName.cs
- MultiBinding.cs
- RealizationDrawingContextWalker.cs
- ExpandedProjectionNode.cs
- Trigger.cs
- LogSwitch.cs
- FlowLayoutPanel.cs
- EventWaitHandleSecurity.cs
- MergeFilterQuery.cs
- HandlerBase.cs
- SerialPinChanges.cs
- RtfControlWordInfo.cs
- ZoneButton.cs
- WindowsFormsHostPropertyMap.cs
- TextEditorCharacters.cs
- RuleCache.cs
- RSAProtectedConfigurationProvider.cs
- Rotation3D.cs
- MetadataPropertyAttribute.cs
- ProfileEventArgs.cs
- ISAPIApplicationHost.cs
- EventManager.cs
- XsltConvert.cs
- milexports.cs
- MembershipUser.cs
- ToolStripRenderer.cs
- ZipPackagePart.cs
- AxImporter.cs
- EncodingNLS.cs