Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- SequenceDesigner.cs
- BitmapEffect.cs
- PreProcessor.cs
- Win32NamedPipes.cs
- JsonQueryStringConverter.cs
- ValidationPropertyAttribute.cs
- ConfigurationSectionCollection.cs
- EncoderNLS.cs
- AdCreatedEventArgs.cs
- QueryPageSettingsEventArgs.cs
- UserCancellationException.cs
- TextWriterTraceListener.cs
- CompilerScope.cs
- KeyConstraint.cs
- HttpWebRequestElement.cs
- CapabilitiesPattern.cs
- ContentTypeSettingClientMessageFormatter.cs
- GuidelineSet.cs
- AudioFormatConverter.cs
- HttpConfigurationSystem.cs
- ProcessManager.cs
- TraceInternal.cs
- SQLInt64Storage.cs
- ClientProxyGenerator.cs
- JoinCqlBlock.cs
- ProfileService.cs
- SmiEventSink_DeferedProcessing.cs
- SafeRightsManagementPubHandle.cs
- CommunicationException.cs
- PickBranchDesigner.xaml.cs
- DbLambda.cs
- ImageListStreamer.cs
- BinaryConverter.cs
- WebPartActionVerb.cs
- BufferedWebEventProvider.cs
- DataErrorValidationRule.cs
- DbReferenceCollection.cs
- PointAnimationClockResource.cs
- SelectorItemAutomationPeer.cs
- TypeUtil.cs
- SqlError.cs
- Column.cs
- ExtractorMetadata.cs
- TraceSwitch.cs
- RootProfilePropertySettingsCollection.cs
- TypeContext.cs
- GPPOINT.cs
- ClientCultureInfo.cs
- ResXDataNode.cs
- CornerRadiusConverter.cs
- WebBrowserBase.cs
- AdobeCFFWrapper.cs
- BitmapMetadataEnumerator.cs
- ProfessionalColors.cs
- GuidTagList.cs
- TableItemStyle.cs
- LayoutTableCell.cs
- SectionInformation.cs
- Screen.cs
- TrackingValidationObjectDictionary.cs
- ColorConverter.cs
- returneventsaver.cs
- ParserContext.cs
- Positioning.cs
- TreeViewEvent.cs
- ObjectComplexPropertyMapping.cs
- StatusBarItem.cs
- formatstringdialog.cs
- HierarchicalDataSourceControl.cs
- BaseAutoFormat.cs
- AnonymousIdentificationModule.cs
- KeyboardEventArgs.cs
- XmlAtomicValue.cs
- ListViewSortEventArgs.cs
- DesignOnlyAttribute.cs
- ScrollBarAutomationPeer.cs
- MaskedTextBox.cs
- ManagementObjectSearcher.cs
- SqlReferenceCollection.cs
- ElementUtil.cs
- FormViewDeletedEventArgs.cs
- XamlTypeMapperSchemaContext.cs
- ItemsPanelTemplate.cs
- DrawingAttributes.cs
- WebConfigurationHost.cs
- WebPartAuthorizationEventArgs.cs
- ComponentResourceManager.cs
- MetadataWorkspace.cs
- HierarchicalDataTemplate.cs
- DoubleCollectionValueSerializer.cs
- ListViewGroupItemCollection.cs
- InternalUserCancelledException.cs
- EdgeModeValidation.cs
- TraceSection.cs
- XmlSchemaGroup.cs
- Flattener.cs
- OdbcHandle.cs
- MenuItemBinding.cs
- FormatVersion.cs
- CustomErrorCollection.cs