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
- SqlUserDefinedAggregateAttribute.cs
- JavascriptCallbackMessageInspector.cs
- SqlUtil.cs
- _SingleItemRequestCache.cs
- CommandEventArgs.cs
- BitmapDecoder.cs
- GenericArgumentsUpdater.cs
- RectAnimationBase.cs
- CookieProtection.cs
- DataGridViewRowHeaderCell.cs
- DescendentsWalkerBase.cs
- SingleStorage.cs
- DesignTimeTemplateParser.cs
- VirtualPathUtility.cs
- TagNameToTypeMapper.cs
- ProjectionNode.cs
- DelimitedListTraceListener.cs
- PtsContext.cs
- DoubleConverter.cs
- ToolBarTray.cs
- DetailsViewModeEventArgs.cs
- Translator.cs
- SynthesizerStateChangedEventArgs.cs
- ViewEvent.cs
- IOThreadTimer.cs
- InputQueueChannel.cs
- BufferedConnection.cs
- NetworkCredential.cs
- VoiceObjectToken.cs
- MediaContext.cs
- FullTextLine.cs
- XmlTextWriter.cs
- X509DefaultServiceCertificateElement.cs
- SafeCloseHandleCritical.cs
- ThemeableAttribute.cs
- TableLayoutStyle.cs
- CardSpacePolicyElement.cs
- EmbossBitmapEffect.cs
- CodeDirectiveCollection.cs
- MissingMemberException.cs
- StrongNameUtility.cs
- Icon.cs
- ByteFacetDescriptionElement.cs
- SimpleApplicationHost.cs
- RijndaelManagedTransform.cs
- XmlDocumentType.cs
- TargetInvocationException.cs
- ObjectDataSourceWizardForm.cs
- WhereQueryOperator.cs
- Command.cs
- BuildProviderAppliesToAttribute.cs
- CodeExpressionStatement.cs
- InputLanguageProfileNotifySink.cs
- EllipseGeometry.cs
- SafeSystemMetrics.cs
- RadioButton.cs
- NameObjectCollectionBase.cs
- XmlAttributeCollection.cs
- FixedHighlight.cs
- SiteMapHierarchicalDataSourceView.cs
- DispatcherHookEventArgs.cs
- SrgsText.cs
- VectorAnimationBase.cs
- OutputCacheSection.cs
- HelpInfo.cs
- BinaryFormatter.cs
- SecurityDocument.cs
- RectangleF.cs
- ReflectionTypeLoadException.cs
- InstanceContextMode.cs
- AsymmetricAlgorithm.cs
- DnsPermission.cs
- Serializer.cs
- FormattedTextSymbols.cs
- SrgsSubset.cs
- AesCryptoServiceProvider.cs
- HuffModule.cs
- PropertyEmitterBase.cs
- Int64AnimationBase.cs
- XamlInterfaces.cs
- ConfigXmlCDataSection.cs
- COM2TypeInfoProcessor.cs
- RelationshipEndMember.cs
- DispatcherProcessingDisabled.cs
- InvalidComObjectException.cs
- FactoryId.cs
- CalendarDataBindingHandler.cs
- MatrixTransform3D.cs
- NotImplementedException.cs
- HttpWebResponse.cs
- CounterCreationDataConverter.cs
- PasswordBoxAutomationPeer.cs
- FtpRequestCacheValidator.cs
- Propagator.Evaluator.cs
- CodeDomComponentSerializationService.cs
- MenuItemAutomationPeer.cs
- InkCollectionBehavior.cs
- TransactionTable.cs
- SchemaTableOptionalColumn.cs
- ValueTable.cs