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
- EmptyReadOnlyDictionaryInternal.cs
- MexHttpBindingCollectionElement.cs
- Int32AnimationUsingKeyFrames.cs
- ReferenceEqualityComparer.cs
- KnownTypes.cs
- UnmanagedHandle.cs
- ScanQueryOperator.cs
- AssemblyCache.cs
- DBCSCodePageEncoding.cs
- EventProvider.cs
- Encoder.cs
- PriorityItem.cs
- PathFigureCollection.cs
- DateTimePicker.cs
- DrawingGroupDrawingContext.cs
- SequenceDesigner.cs
- CounterCreationDataCollection.cs
- RadioButtonPopupAdapter.cs
- ProcessInfo.cs
- FormClosedEvent.cs
- BorderGapMaskConverter.cs
- SHA384.cs
- DBParameter.cs
- UserPreferenceChangedEventArgs.cs
- RangeValueProviderWrapper.cs
- Property.cs
- Missing.cs
- EnumMemberAttribute.cs
- XmlSerializableWriter.cs
- TextTreeText.cs
- SamlAssertionDirectKeyIdentifierClause.cs
- Int32Animation.cs
- Root.cs
- recordstate.cs
- AdministrationHelpers.cs
- CellQuery.cs
- FlowSwitchDesigner.xaml.cs
- AlphabetConverter.cs
- ToolStripOverflow.cs
- Span.cs
- Stackframe.cs
- DataControlPagerLinkButton.cs
- SoapEnvelopeProcessingElement.cs
- StructuralCache.cs
- CmsInterop.cs
- QuaternionAnimation.cs
- MultiSelector.cs
- ImageMetadata.cs
- FrameworkElementAutomationPeer.cs
- MDIWindowDialog.cs
- AnonymousIdentificationSection.cs
- ComplexPropertyEntry.cs
- DesignerAttributeInfo.cs
- EditCommandColumn.cs
- DbSource.cs
- FontFamilyIdentifier.cs
- AudioBase.cs
- PipelineModuleStepContainer.cs
- Formatter.cs
- ThreadStaticAttribute.cs
- xml.cs
- InstanceView.cs
- XmlSignificantWhitespace.cs
- LocalClientSecuritySettingsElement.cs
- Rethrow.cs
- XmlFormatReaderGenerator.cs
- SqlCommandSet.cs
- AnnotationComponentManager.cs
- SQLInt16.cs
- InputLanguageSource.cs
- ModulesEntry.cs
- ConfigXmlSignificantWhitespace.cs
- RuntimeEnvironment.cs
- _SafeNetHandles.cs
- Frame.cs
- PartialTrustHelpers.cs
- ObjectQueryState.cs
- DesignSurfaceEvent.cs
- TypeLoadException.cs
- SafeMILHandleMemoryPressure.cs
- ExpressionParser.cs
- DefaultValueTypeConverter.cs
- Misc.cs
- Scheduler.cs
- GridViewItemAutomationPeer.cs
- SafeRightsManagementQueryHandle.cs
- ProtectedConfigurationProviderCollection.cs
- NotificationContext.cs
- PackUriHelper.cs
- ParamArrayAttribute.cs
- FontDialog.cs
- MetadataSource.cs
- log.cs
- QueryContinueDragEventArgs.cs
- BamlCollectionHolder.cs
- ComPlusDiagnosticTraceSchemas.cs
- ContextConfiguration.cs
- SymbolTable.cs
- EdmType.cs
- AggregateNode.cs