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
- XsltOutput.cs
- DetailsViewPageEventArgs.cs
- Activator.cs
- RealizationContext.cs
- ImageCodecInfoPrivate.cs
- Certificate.cs
- MaskedTextProvider.cs
- TextDocumentView.cs
- SafeNativeMethods.cs
- TemplateEditingFrame.cs
- IdentityNotMappedException.cs
- ConfigurationStrings.cs
- Vector3DCollectionConverter.cs
- ColumnBinding.cs
- XmlSerializableWriter.cs
- HtmlTernaryTree.cs
- Policy.cs
- SocketException.cs
- HttpRuntime.cs
- LongCountAggregationOperator.cs
- SQLSingle.cs
- DelegatingTypeDescriptionProvider.cs
- SqlMethodAttribute.cs
- PtsContext.cs
- StorageComplexTypeMapping.cs
- ContractMapping.cs
- FusionWrap.cs
- ListBoxAutomationPeer.cs
- FileRecordSequence.cs
- UnsignedPublishLicense.cs
- VisualCollection.cs
- Win32Native.cs
- StrokeNode.cs
- dsa.cs
- CodeDOMUtility.cs
- DataRecordInfo.cs
- XPathNodeInfoAtom.cs
- DelegatingHeader.cs
- ListItemCollection.cs
- ImmutableObjectAttribute.cs
- Pkcs9Attribute.cs
- Trace.cs
- Component.cs
- CodeGenHelper.cs
- PolyQuadraticBezierSegment.cs
- UdpSocket.cs
- DataRowCollection.cs
- ConfigurationConverterBase.cs
- ConfigurationPropertyCollection.cs
- BindingList.cs
- FilteredDataSetHelper.cs
- MessageDescriptionCollection.cs
- XmlSchemaSimpleTypeList.cs
- WindowsAuthenticationModule.cs
- PictureBox.cs
- DrawingCollection.cs
- BeginStoryboard.cs
- StylusLogic.cs
- ApplicationServicesHostFactory.cs
- PropertyInformationCollection.cs
- SqlInternalConnectionSmi.cs
- DataShape.cs
- WebPartHeaderCloseVerb.cs
- XmlDataProvider.cs
- ContextMarshalException.cs
- XmlSignatureManifest.cs
- DataTableReaderListener.cs
- ListBox.cs
- DesignerLoader.cs
- StandardOleMarshalObject.cs
- odbcmetadatacollectionnames.cs
- XmlDownloadManager.cs
- BaseComponentEditor.cs
- SiteMapNodeItem.cs
- DataBindingCollection.cs
- OleTxTransactionInfo.cs
- BamlCollectionHolder.cs
- MediaContext.cs
- XmlSchemaComplexType.cs
- EntitySqlQueryBuilder.cs
- ParentUndoUnit.cs
- StateDesigner.CommentLayoutGlyph.cs
- InkCanvasFeedbackAdorner.cs
- Constant.cs
- FontStyleConverter.cs
- ConnectionConsumerAttribute.cs
- ConsoleTraceListener.cs
- TripleDES.cs
- DbgCompiler.cs
- StylusPointProperty.cs
- StorageBasedPackageProperties.cs
- WindowsStatic.cs
- WsdlInspector.cs
- VariableBinder.cs
- CommandEventArgs.cs
- PerspectiveCamera.cs
- BasePattern.cs
- GenerateScriptTypeAttribute.cs
- FrameAutomationPeer.cs
- CacheAxisQuery.cs