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
- XmlReflectionImporter.cs
- VScrollBar.cs
- XPathParser.cs
- PermissionSet.cs
- WebAdminConfigurationHelper.cs
- FrameworkElement.cs
- Accessible.cs
- SecuritySessionSecurityTokenAuthenticator.cs
- TextSelectionHelper.cs
- ColorConvertedBitmap.cs
- DragDropHelper.cs
- documentsequencetextview.cs
- ActiveDocumentEvent.cs
- ConfigurationSettings.cs
- CodeNamespaceCollection.cs
- FastPropertyAccessor.cs
- CodeAccessSecurityEngine.cs
- SqlConnectionHelper.cs
- ReadWriteObjectLock.cs
- InvariantComparer.cs
- DateTimeFormatInfo.cs
- CatalogPartCollection.cs
- InvokeProviderWrapper.cs
- unsafeIndexingFilterStream.cs
- CodeGeneratorOptions.cs
- Matrix.cs
- FontFaceLayoutInfo.cs
- Image.cs
- CodeArrayIndexerExpression.cs
- SHA384Managed.cs
- ParameterCollectionEditorForm.cs
- _CacheStreams.cs
- ListParaClient.cs
- DirectoryObjectSecurity.cs
- CodePropertyReferenceExpression.cs
- MenuAdapter.cs
- FontSourceCollection.cs
- MetadataSerializer.cs
- CodeCommentStatement.cs
- XmlQueryRuntime.cs
- XmlWhitespace.cs
- OracleSqlParser.cs
- RequestCacheEntry.cs
- ValueTable.cs
- StreamAsIStream.cs
- ConfigXmlText.cs
- DataGridColumnHeadersPresenter.cs
- Int32EqualityComparer.cs
- ManagedIStream.cs
- AsymmetricSignatureFormatter.cs
- WaitHandleCannotBeOpenedException.cs
- SqlDataSourceSelectingEventArgs.cs
- CompilerGeneratedAttribute.cs
- XmlSerializableWriter.cs
- StateWorkerRequest.cs
- WindowsAuthenticationEventArgs.cs
- VariableBinder.cs
- HtmlInputHidden.cs
- TextDecoration.cs
- CallbackValidator.cs
- ProcessThreadDesigner.cs
- TextReader.cs
- InvocationExpression.cs
- ADMembershipUser.cs
- DataGridViewCellPaintingEventArgs.cs
- PropertyChangedEventArgs.cs
- FixedHighlight.cs
- IdentityManager.cs
- PointAnimationUsingKeyFrames.cs
- BlurEffect.cs
- XmlUtf8RawTextWriter.cs
- AssociationSetEnd.cs
- CallSiteBinder.cs
- ExtensionQuery.cs
- Operator.cs
- StrokeSerializer.cs
- HttpServerVarsCollection.cs
- DesignTimeDataBinding.cs
- ContainsRowNumberChecker.cs
- BrowserCapabilitiesCompiler.cs
- ViewGenerator.cs
- DiagnosticsConfigurationHandler.cs
- HtmlEncodedRawTextWriter.cs
- ConfigurationLocationCollection.cs
- TopClause.cs
- SortDescription.cs
- WindowsContainer.cs
- bidPrivateBase.cs
- RenameRuleObjectDialog.Designer.cs
- TraceContextRecord.cs
- MaskPropertyEditor.cs
- SqlProviderUtilities.cs
- HtmlInputText.cs
- ImageMap.cs
- ConfigsHelper.cs
- DeferredTextReference.cs
- MULTI_QI.cs
- QueueProcessor.cs
- RenderContext.cs
- PropertyChangedEventArgs.cs