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
- Util.cs
- JpegBitmapDecoder.cs
- PeerDuplexChannel.cs
- TemplateBindingExtension.cs
- XpsFilter.cs
- UnauthorizedAccessException.cs
- TagPrefixCollection.cs
- PointAnimationUsingPath.cs
- WebPartConnectionsEventArgs.cs
- AppDomainProtocolHandler.cs
- LayeredChannelFactory.cs
- COAUTHINFO.cs
- TransactionException.cs
- SqlProcedureAttribute.cs
- IisTraceListener.cs
- MetadataException.cs
- HotSpot.cs
- CompModSwitches.cs
- BuilderInfo.cs
- cookie.cs
- FormsAuthenticationUser.cs
- ControlLocalizer.cs
- CurrentChangedEventManager.cs
- BinaryMessageEncodingElement.cs
- DecoderFallbackWithFailureFlag.cs
- CheckedPointers.cs
- NamespaceList.cs
- HtmlTernaryTree.cs
- SqlCommandBuilder.cs
- ExternalFile.cs
- CompilerResults.cs
- OrderedDictionaryStateHelper.cs
- PackagePartCollection.cs
- NullRuntimeConfig.cs
- DesignerAutoFormat.cs
- TableCellCollection.cs
- AnnotationAdorner.cs
- Enum.cs
- InternalBase.cs
- PropertyBuilder.cs
- SignalGate.cs
- MailWebEventProvider.cs
- X509SecurityTokenAuthenticator.cs
- DbBuffer.cs
- GuidConverter.cs
- Message.cs
- SoapTransportImporter.cs
- X509UI.cs
- RtfToXamlLexer.cs
- SqlTransaction.cs
- SerializationSectionGroup.cs
- ClientUrlResolverWrapper.cs
- X509ChainPolicy.cs
- XsltLoader.cs
- EventLogPermission.cs
- FilterException.cs
- TabletCollection.cs
- TemplateColumn.cs
- ResourcePool.cs
- UnauthorizedWebPart.cs
- EventLogPermissionAttribute.cs
- ProxyBuilder.cs
- OdbcErrorCollection.cs
- baseaxisquery.cs
- Vector3DCollection.cs
- GridLength.cs
- AspProxy.cs
- DrawingContextDrawingContextWalker.cs
- XmlElementList.cs
- SiteMap.cs
- Converter.cs
- ExecutionContext.cs
- loginstatus.cs
- PipeStream.cs
- PageContentAsyncResult.cs
- XmlDataSource.cs
- FileAuthorizationModule.cs
- PropertyConverter.cs
- AddInStore.cs
- ByeOperationAsyncResult.cs
- References.cs
- EmissiveMaterial.cs
- NativeCppClassAttribute.cs
- SynthesizerStateChangedEventArgs.cs
- JsonServiceDocumentSerializer.cs
- DockPattern.cs
- SuppressIldasmAttribute.cs
- QueryOutputWriter.cs
- Registration.cs
- UrlMappingsSection.cs
- PromptBuilder.cs
- ListParagraph.cs
- GlobalizationAssembly.cs
- WebPartEditorCancelVerb.cs
- CompoundFileStreamReference.cs
- ChannelTraceRecord.cs
- StylusButtonCollection.cs
- HtmlShim.cs
- DataBoundControlActionList.cs
- ArrayTypeMismatchException.cs