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
- FileDetails.cs
- EventLogPermissionAttribute.cs
- PriorityChain.cs
- Interlocked.cs
- ActivationWorker.cs
- MethodExpr.cs
- DataSysAttribute.cs
- DispatcherExceptionFilterEventArgs.cs
- DetailsViewCommandEventArgs.cs
- MultipartIdentifier.cs
- SecurityKeyIdentifier.cs
- WmlPhoneCallAdapter.cs
- SettingsAttributes.cs
- RelatedImageListAttribute.cs
- SpecularMaterial.cs
- XmlName.cs
- SafeProcessHandle.cs
- MatrixCamera.cs
- SelectionProviderWrapper.cs
- PathStreamGeometryContext.cs
- SizeChangedEventArgs.cs
- HttpRuntime.cs
- Brushes.cs
- DataPointer.cs
- PriorityRange.cs
- FixedTextView.cs
- DesignerValidatorAdapter.cs
- CqlErrorHelper.cs
- SemanticAnalyzer.cs
- DocumentViewerConstants.cs
- WebControlAdapter.cs
- PathSegment.cs
- XmlNotation.cs
- FileReader.cs
- DocumentViewerBase.cs
- SecurityProtocol.cs
- ServiceMoniker.cs
- XmlElementAttributes.cs
- JavaScriptString.cs
- ACL.cs
- safePerfProviderHandle.cs
- SQLMoney.cs
- PageThemeCodeDomTreeGenerator.cs
- Transform3DGroup.cs
- TransformDescriptor.cs
- UdpDiscoveryEndpointElement.cs
- EnumMemberAttribute.cs
- PersonalizablePropertyEntry.cs
- ADMembershipProvider.cs
- UiaCoreTypesApi.cs
- DataBindingExpressionBuilder.cs
- DefaultValueConverter.cs
- TreeNode.cs
- TypeUsageBuilder.cs
- CustomErrorsSection.cs
- SecurityPolicySection.cs
- ImagingCache.cs
- TextDecoration.cs
- ListItemCollection.cs
- RequiredAttributeAttribute.cs
- KeyConverter.cs
- updateconfighost.cs
- GlyphCache.cs
- ECDiffieHellmanPublicKey.cs
- EntityAdapter.cs
- XmlDocumentType.cs
- MdiWindowListItemConverter.cs
- BoolExpressionVisitors.cs
- CLSCompliantAttribute.cs
- LazyTextWriterCreator.cs
- DBSqlParserColumnCollection.cs
- AddInProcess.cs
- InstanceStore.cs
- SqlUnionizer.cs
- EnumType.cs
- StrokeSerializer.cs
- BitArray.cs
- SqlTriggerContext.cs
- SelectionEditingBehavior.cs
- WebBrowserNavigatingEventHandler.cs
- PresentationAppDomainManager.cs
- GenericUriParser.cs
- MimeTypeAttribute.cs
- TabletDeviceInfo.cs
- StandardTransformFactory.cs
- MasterPageBuildProvider.cs
- NoneExcludedImageIndexConverter.cs
- EventPrivateKey.cs
- RealizationDrawingContextWalker.cs
- HtmlElement.cs
- OptimalBreakSession.cs
- DataGridPageChangedEventArgs.cs
- PageEventArgs.cs
- AutomationPattern.cs
- ListBindingHelper.cs
- InputLanguageCollection.cs
- XamlSerializerUtil.cs
- MetadataException.cs
- NamespaceImport.cs
- ServiceDesigner.xaml.cs