Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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. // //[....] //----------------------------------------------------------------------------- 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
- CacheMemory.cs
- FontConverter.cs
- XmlUtilWriter.cs
- Figure.cs
- BinaryObjectInfo.cs
- Property.cs
- GridPatternIdentifiers.cs
- BinaryFormatter.cs
- LinqDataSourceSelectEventArgs.cs
- XPathLexer.cs
- ExchangeUtilities.cs
- HostedHttpTransportManager.cs
- HyperlinkAutomationPeer.cs
- NameNode.cs
- X500Name.cs
- BooleanConverter.cs
- LinearGradientBrush.cs
- CurrentTimeZone.cs
- HtmlEmptyTagControlBuilder.cs
- DockPattern.cs
- PropertyStore.cs
- NullableFloatSumAggregationOperator.cs
- DataGridItem.cs
- CustomPopupPlacement.cs
- ManagementNamedValueCollection.cs
- DispatchWrapper.cs
- ServiceReference.cs
- ToolboxComponentsCreatingEventArgs.cs
- ConnectionStringSettingsCollection.cs
- EncryptedType.cs
- ControlBuilderAttribute.cs
- ForEachAction.cs
- EventManager.cs
- WebDescriptionAttribute.cs
- DrawingGroupDrawingContext.cs
- FusionWrap.cs
- StyleModeStack.cs
- SimpleMailWebEventProvider.cs
- HelpProvider.cs
- Validator.cs
- FrameSecurityDescriptor.cs
- JsonEncodingStreamWrapper.cs
- InputEventArgs.cs
- PolicyLevel.cs
- BulletChrome.cs
- SynchronizingStream.cs
- StateWorkerRequest.cs
- VectorAnimationBase.cs
- IOThreadTimer.cs
- XmlLoader.cs
- SqlCacheDependencyDatabaseCollection.cs
- BoundField.cs
- ProcessHostServerConfig.cs
- EntityDescriptor.cs
- DataKey.cs
- TypefaceMap.cs
- QueueProcessor.cs
- SelectionBorderGlyph.cs
- StringReader.cs
- TemplateBindingExtension.cs
- SslStream.cs
- ComponentDispatcherThread.cs
- StoreAnnotationsMap.cs
- CompilerInfo.cs
- CaretElement.cs
- Events.cs
- InstalledVoice.cs
- ConditionalExpression.cs
- Helpers.cs
- RouteItem.cs
- SourceLocationProvider.cs
- DataColumnCollection.cs
- cookiecontainer.cs
- InputScope.cs
- RenamedEventArgs.cs
- ByteKeyFrameCollection.cs
- QueryReaderSettings.cs
- ServicesUtilities.cs
- StateRuntime.cs
- WindowsGrip.cs
- CodeExpressionCollection.cs
- ProfilePropertyNameValidator.cs
- SrgsElementList.cs
- XPathDocumentNavigator.cs
- ContextToken.cs
- ProbeRequestResponseAsyncResult.cs
- ChangesetResponse.cs
- ProjectionPlan.cs
- StandardRuntimeEnumValidator.cs
- TreeViewImageIndexConverter.cs
- Button.cs
- assemblycache.cs
- SystemInfo.cs
- EntitySqlQueryCacheKey.cs
- Cursor.cs
- WarningException.cs
- Control.cs
- HashSet.cs
- DbModificationClause.cs
- EntityContainer.cs