Code:
/ DotNET / DotNET / 8.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
- SecurityUtils.cs
- XmlILStorageConverter.cs
- CompoundFileDeflateTransform.cs
- ObjectListSelectEventArgs.cs
- QueryReaderSettings.cs
- XmlTypeAttribute.cs
- LabelLiteral.cs
- BaseTreeIterator.cs
- CmsUtils.cs
- StandardOleMarshalObject.cs
- TraceUtils.cs
- WindowsFormsLinkLabel.cs
- DesignBindingEditor.cs
- RegionData.cs
- WpfWebRequestHelper.cs
- ProfilePropertySettings.cs
- DropShadowBitmapEffect.cs
- WebPartZoneAutoFormat.cs
- FixedSOMLineCollection.cs
- EmptyCollection.cs
- Point3DAnimationBase.cs
- CatalogZone.cs
- DataGridCellsPresenter.cs
- CodeSnippetTypeMember.cs
- RequestStatusBarUpdateEventArgs.cs
- CacheVirtualItemsEvent.cs
- COM2ExtendedBrowsingHandler.cs
- EdgeModeValidation.cs
- TraceListener.cs
- GeneralTransform2DTo3DTo2D.cs
- UnionQueryOperator.cs
- MethodImplAttribute.cs
- ValidationPropertyAttribute.cs
- GZipStream.cs
- CommandHelper.cs
- WebEventCodes.cs
- IgnoreFileBuildProvider.cs
- MemberProjectionIndex.cs
- PackageRelationship.cs
- SqlComparer.cs
- HttpHandlersSection.cs
- BindingUtils.cs
- DefaultValueAttribute.cs
- Clause.cs
- SQLDecimal.cs
- EntityContainerEntitySetDefiningQuery.cs
- BitmapFrame.cs
- base64Transforms.cs
- FixedLineResult.cs
- SecurityMessageProperty.cs
- SqlError.cs
- ConnectionManagementSection.cs
- TransformGroup.cs
- SamlAuthorityBinding.cs
- XmlSerializationWriter.cs
- IPPacketInformation.cs
- ValueChangedEventManager.cs
- CqlLexer.cs
- XmlComplianceUtil.cs
- MsmqInputMessagePool.cs
- AuditLevel.cs
- RoleServiceManager.cs
- BrowserDefinitionCollection.cs
- SafeNativeMethodsMilCoreApi.cs
- Operator.cs
- BitmapEffectGeneralTransform.cs
- TdsParserStateObject.cs
- TextPointer.cs
- MiniParameterInfo.cs
- SqlInternalConnectionSmi.cs
- _NegotiateClient.cs
- ScriptModule.cs
- PropertyMetadata.cs
- HtmlInputText.cs
- CuspData.cs
- TextChangedEventArgs.cs
- DataSourceCacheDurationConverter.cs
- AttributeEmitter.cs
- MDIWindowDialog.cs
- Throw.cs
- Configuration.cs
- Filter.cs
- TreeView.cs
- TextParentUndoUnit.cs
- ListBoxItemWrapperAutomationPeer.cs
- DataGridViewTopRowAccessibleObject.cs
- DecoderFallback.cs
- WindowsEditBox.cs
- ErrorFormatter.cs
- BindingWorker.cs
- CircleHotSpot.cs
- UnauthorizedWebPart.cs
- FontCacheLogic.cs
- NavigationProperty.cs
- OpCellTreeNode.cs
- DescendentsWalkerBase.cs
- ReadOnlyDataSource.cs
- _NestedSingleAsyncResult.cs
- SQLDoubleStorage.cs
- WriterOutput.cs