Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Xml / System / Xml / XPath / Internal / followingsibling.cs / 1305376 / 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
- RegexMatchCollection.cs
- FixedDSBuilder.cs
- ActivationServices.cs
- HttpApplicationStateWrapper.cs
- UpDownEvent.cs
- TextDecoration.cs
- Authorization.cs
- DependencyPropertyChangedEventArgs.cs
- XPathDocumentBuilder.cs
- EnumMemberAttribute.cs
- GB18030Encoding.cs
- FormParameter.cs
- MetadataFile.cs
- XmlDocumentSchema.cs
- Assert.cs
- DependencySource.cs
- Int32Storage.cs
- SymDocumentType.cs
- PropertyCondition.cs
- EpmTargetPathSegment.cs
- TabControl.cs
- SemanticResolver.cs
- Soap.cs
- XLinq.cs
- InertiaExpansionBehavior.cs
- DbParameterCollection.cs
- DataGridColumnCollection.cs
- ControlAdapter.cs
- Directory.cs
- Helpers.cs
- Selection.cs
- ReflectionTypeLoadException.cs
- VisualCollection.cs
- DataGridItemEventArgs.cs
- XPathPatternParser.cs
- PipelineModuleStepContainer.cs
- CommandSet.cs
- SamlAuthorizationDecisionStatement.cs
- XmlSchemaObjectCollection.cs
- CollectionView.cs
- NativeMethods.cs
- Funcletizer.cs
- TextBounds.cs
- XmlCharCheckingWriter.cs
- GridViewColumn.cs
- QilInvokeLateBound.cs
- IsolatedStorageFileStream.cs
- FileCodeGroup.cs
- DetailsView.cs
- Currency.cs
- RangeContentEnumerator.cs
- SimpleTypeResolver.cs
- LinqDataSourceContextEventArgs.cs
- SQLDoubleStorage.cs
- Parameter.cs
- PrincipalPermission.cs
- OutKeywords.cs
- MultiSelectRootGridEntry.cs
- ToolStripContentPanelRenderEventArgs.cs
- ScriptComponentDescriptor.cs
- SymbolType.cs
- NonSerializedAttribute.cs
- ToolStrip.cs
- ImageClickEventArgs.cs
- SourceLineInfo.cs
- EntitySet.cs
- BmpBitmapEncoder.cs
- MessageHeaderDescription.cs
- CultureMapper.cs
- ChannelRequirements.cs
- Timeline.cs
- InkCanvasAutomationPeer.cs
- PenContext.cs
- BindingListCollectionView.cs
- CalendarAutomationPeer.cs
- WebEventCodes.cs
- MatrixCamera.cs
- VoiceInfo.cs
- DesignTimeValidationFeature.cs
- WmiInstallComponent.cs
- PermissionToken.cs
- InputMethodStateTypeInfo.cs
- EntityContainerEmitter.cs
- WebPartZone.cs
- ScrollBarRenderer.cs
- BufferModesCollection.cs
- LocalizabilityAttribute.cs
- EdmProperty.cs
- SqlTypesSchemaImporter.cs
- WebPartVerb.cs
- RelationshipSet.cs
- UnSafeCharBuffer.cs
- __ComObject.cs
- InlineObject.cs
- XmlSchemaValidator.cs
- EasingKeyFrames.cs
- BindingExpressionUncommonField.cs
- TypefaceCollection.cs
- TextReturnReader.cs
- SystemIPGlobalProperties.cs