Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Xml / System / Xml / XPath / Internal / DescendantOverDescendantQuery.cs / 1 / 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.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Condition.cs
- PhysicalAddress.cs
- SessionStateContainer.cs
- HMAC.cs
- LinkLabelLinkClickedEvent.cs
- ComponentSerializationService.cs
- DataGridPageChangedEventArgs.cs
- QilList.cs
- ModulesEntry.cs
- PartialCachingAttribute.cs
- StringCollection.cs
- RightsManagementPermission.cs
- COM2ExtendedBrowsingHandler.cs
- ColumnHeaderCollectionEditor.cs
- Image.cs
- ExpressionCopier.cs
- CardSpaceException.cs
- ProtocolsConfiguration.cs
- EqualityComparer.cs
- CalloutQueueItem.cs
- ImageList.cs
- NamespaceInfo.cs
- SmiEventSink_DeferedProcessing.cs
- ZoomComboBox.cs
- OrderablePartitioner.cs
- PenContext.cs
- ActiveXContainer.cs
- SqlVisitor.cs
- ProcessManager.cs
- UnsafeNativeMethods.cs
- PackageRelationship.cs
- CqlErrorHelper.cs
- ParenthesizePropertyNameAttribute.cs
- WhitespaceRuleLookup.cs
- Substitution.cs
- CqlWriter.cs
- CompiledRegexRunnerFactory.cs
- BamlLocalizabilityResolver.cs
- PageCatalogPart.cs
- ObjectItemCollection.cs
- PageParser.cs
- TimeSpanMinutesConverter.cs
- Int16.cs
- GPRECT.cs
- NamespaceInfo.cs
- TextEndOfSegment.cs
- SizeChangedEventArgs.cs
- Point3DIndependentAnimationStorage.cs
- ParseElement.cs
- SqlServer2KCompatibilityAnnotation.cs
- IssuanceLicense.cs
- SignerInfo.cs
- MapPathBasedVirtualPathProvider.cs
- PenLineCapValidation.cs
- ValidationService.cs
- AQNBuilder.cs
- StaticSiteMapProvider.cs
- HttpCacheVaryByContentEncodings.cs
- WebPartDisplayModeEventArgs.cs
- AnimationLayer.cs
- HierarchicalDataBoundControlAdapter.cs
- SQLRoleProvider.cs
- TcpTransportElement.cs
- WebBrowserDesigner.cs
- TabItemAutomationPeer.cs
- ScriptIgnoreAttribute.cs
- FrameworkTextComposition.cs
- SortedList.cs
- DataGridViewCellValidatingEventArgs.cs
- ExpandCollapsePattern.cs
- TextBoxBase.cs
- NotFiniteNumberException.cs
- DependentList.cs
- TransactionException.cs
- SQLCharsStorage.cs
- BamlResourceDeserializer.cs
- AnyReturnReader.cs
- TextRangeBase.cs
- TabControl.cs
- shaper.cs
- EncryptedPackageFilter.cs
- OleDbSchemaGuid.cs
- EventLogPermissionHolder.cs
- SQLBoolean.cs
- FieldValue.cs
- FlowDocumentFormatter.cs
- DynamicValueConverter.cs
- VectorAnimationUsingKeyFrames.cs
- UserValidatedEventArgs.cs
- HostExecutionContextManager.cs
- HttpResponse.cs
- SymDocumentType.cs
- TypeKeyValue.cs
- FocusWithinProperty.cs
- UITypeEditor.cs
- StylusPlugin.cs
- AssemblyAttributes.cs
- SvcMapFileSerializer.cs
- TextBoxRenderer.cs
- KoreanCalendar.cs