Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Xml / System / Xml / XPath / Internal / DescendantOverDescendantQuery.cs / 1305376 / DescendantOverDescendantQuery.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; // DescendantOverDescendantQuery: for each input it looks for the topmost descendents that matches to ns:name // This is posible when query which has this query as its input (child query) is descendent as well. // Work of this query doesn't depend on DOD of its input. // It doesn't garate DOD of the output even when input is DOD. internal sealed class DescendantOverDescendantQuery : DescendantBaseQuery { private int level = 0; public DescendantOverDescendantQuery(Query qyParent, bool matchSelf, string name, string prefix, XPathNodeType typeTest, bool abbrAxis) : base(qyParent, name, prefix, typeTest, matchSelf, abbrAxis) {} private DescendantOverDescendantQuery(DescendantOverDescendantQuery other) : base(other) { this.level = other.level; } public override void Reset() { level = 0; base.Reset(); } public override XPathNavigator Advance() { while (true) { if (level == 0) { currentNode = qyInput.Advance(); position = 0; if (currentNode == null) { return null; } if (matchSelf && matches(currentNode)) { position = 1; return currentNode; } currentNode = currentNode.Clone(); if (! MoveToFirstChild()) { continue; } } else { if (!MoveUpUntillNext()) { continue; } } do { if (matches(currentNode)) { position++; return currentNode; } } while (MoveToFirstChild()); } } private bool MoveToFirstChild() { if (currentNode.MoveToFirstChild()) { level++; return true; } return false; } private bool MoveUpUntillNext() { // move up untill we can move next while (! currentNode.MoveToNext()) { -- level; if (level == 0) { return false; } bool result = currentNode.MoveToParent(); Debug.Assert(result, "Algorithm error, We always should be able to move up if level > 0"); } return true; } public override XPathNodeIterator Clone() { return new DescendantOverDescendantQuery(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
- SqlMultiplexer.cs
- ECDiffieHellmanCngPublicKey.cs
- LineServices.cs
- FileLogRecord.cs
- EdgeProfileValidation.cs
- SqlUDTStorage.cs
- CodePageUtils.cs
- dtdvalidator.cs
- UserInitiatedNavigationPermission.cs
- ColumnClickEvent.cs
- EventWaitHandle.cs
- DataGridViewCell.cs
- StrokeNodeOperations.cs
- PrintEvent.cs
- InstanceNormalEvent.cs
- COAUTHIDENTITY.cs
- ActiveDocumentEvent.cs
- RemotingSurrogateSelector.cs
- ObjectDataSourceMethodEventArgs.cs
- InstanceStore.cs
- PlainXmlSerializer.cs
- Activator.cs
- TimeSpan.cs
- ParameterModifier.cs
- UndoManager.cs
- IMembershipProvider.cs
- GcSettings.cs
- Int16.cs
- WebServiceTypeData.cs
- ZipIOCentralDirectoryFileHeader.cs
- DefaultClaimSet.cs
- TypeContext.cs
- BrowserDefinitionCollection.cs
- XamlRtfConverter.cs
- MessageSecurityOverTcp.cs
- AuthStoreRoleProvider.cs
- FilterException.cs
- DataObject.cs
- MatchingStyle.cs
- BitmapEffect.cs
- KeyedByTypeCollection.cs
- CodeFieldReferenceExpression.cs
- CalendarDateChangedEventArgs.cs
- KoreanLunisolarCalendar.cs
- PeerNameRegistration.cs
- SchemaEntity.cs
- FrameworkElementFactory.cs
- GenerateScriptTypeAttribute.cs
- ListParagraph.cs
- BitFlagsGenerator.cs
- Timeline.cs
- InstanceKey.cs
- HandleCollector.cs
- OracleParameterBinding.cs
- EntityException.cs
- Point3DAnimation.cs
- RC2.cs
- EdmProperty.cs
- FixedTextContainer.cs
- OutputCacheSettingsSection.cs
- GregorianCalendar.cs
- SafeSecurityHandles.cs
- X509Certificate2.cs
- BookmarkInfo.cs
- ReaderWriterLockSlim.cs
- RegexMatchCollection.cs
- FirstMatchCodeGroup.cs
- WebPartVerbCollection.cs
- RubberbandSelector.cs
- webclient.cs
- LiteralControl.cs
- Version.cs
- RecognizedPhrase.cs
- ReachDocumentReferenceCollectionSerializerAsync.cs
- HwndHost.cs
- PropertyTabAttribute.cs
- ListViewDeleteEventArgs.cs
- MdiWindowListStrip.cs
- TransactionalPackage.cs
- LowerCaseStringConverter.cs
- PrintDialogException.cs
- MenuItemAutomationPeer.cs
- MsmqBindingElementBase.cs
- WebServiceMethodData.cs
- CustomValidator.cs
- DemultiplexingDispatchMessageFormatter.cs
- SafeEventLogReadHandle.cs
- PtsCache.cs
- StoryFragments.cs
- TemplateComponentConnector.cs
- MetadataPropertyCollection.cs
- TreeWalker.cs
- TextDecorationCollection.cs
- BrushConverter.cs
- MapPathBasedVirtualPathProvider.cs
- _Rfc2616CacheValidators.cs
- XmlSerializerVersionAttribute.cs
- ZipIOFileItemStream.cs
- DrawTreeNodeEventArgs.cs
- D3DImage.cs