Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- ProcessProtocolHandler.cs
- FamilyMapCollection.cs
- TypeNameConverter.cs
- EventWaitHandle.cs
- BufferModesCollection.cs
- ZipArchive.cs
- XPathDocumentBuilder.cs
- ObjectContextServiceProvider.cs
- SettingsAttributeDictionary.cs
- TrueReadOnlyCollection.cs
- DrawingVisualDrawingContext.cs
- RegexMatch.cs
- processwaithandle.cs
- SqlPersonalizationProvider.cs
- ProfilePropertyNameValidator.cs
- CompleteWizardStep.cs
- SerializableAuthorizationContext.cs
- X509DefaultServiceCertificateElement.cs
- ButtonChrome.cs
- X509CertificateRecipientClientCredential.cs
- InfoCardTrace.cs
- TextDecoration.cs
- LazyInitializer.cs
- XmlException.cs
- OleServicesContext.cs
- _FixedSizeReader.cs
- Control.cs
- ArrowControl.xaml.cs
- SessionParameter.cs
- DateTimeConstantAttribute.cs
- HashMembershipCondition.cs
- FeatureSupport.cs
- DataGridViewDataConnection.cs
- WhitespaceRuleReader.cs
- CustomExpressionEventArgs.cs
- ListViewInsertionMark.cs
- OperatorExpressions.cs
- Comparer.cs
- GcSettings.cs
- BitmapVisualManager.cs
- HMACSHA1.cs
- PermissionSetEnumerator.cs
- DataViewSettingCollection.cs
- EventPropertyMap.cs
- BooleanAnimationBase.cs
- VSWCFServiceContractGenerator.cs
- ParameterCollection.cs
- GuidelineCollection.cs
- DeviceSpecific.cs
- TimeSpanFormat.cs
- UnsafeNativeMethodsCLR.cs
- ModelFunction.cs
- X509SubjectKeyIdentifierClause.cs
- TextAdaptor.cs
- TrustLevelCollection.cs
- WarningException.cs
- HttpRequestCacheValidator.cs
- PhysicalFontFamily.cs
- XmlQualifiedName.cs
- XDRSchema.cs
- DoubleStorage.cs
- BitArray.cs
- Point3DCollection.cs
- DataSetSchema.cs
- SqlCommandBuilder.cs
- SharedPersonalizationStateInfo.cs
- StringUtil.cs
- ParseNumbers.cs
- DataTemplate.cs
- HttpCapabilitiesSectionHandler.cs
- XmlSchemaAttributeGroup.cs
- CustomErrorsSectionWrapper.cs
- FontNameEditor.cs
- IQueryable.cs
- FormViewPageEventArgs.cs
- InputManager.cs
- Propagator.Evaluator.cs
- AsyncStreamReader.cs
- TraceContext.cs
- Point.cs
- COM2FontConverter.cs
- SqlCacheDependency.cs
- EditingMode.cs
- HttpContextWrapper.cs
- IxmlLineInfo.cs
- SwitchLevelAttribute.cs
- SrgsRuleRef.cs
- DataObjectAttribute.cs
- FormViewCommandEventArgs.cs
- ListContractAdapter.cs
- BoundColumn.cs
- Figure.cs
- InstanceCreationEditor.cs
- DataStreamFromComStream.cs
- CodeCommentStatementCollection.cs
- DrawListViewItemEventArgs.cs
- DiscoveryInnerClientAdhocCD1.cs
- ColumnPropertiesGroup.cs
- PropertyBuilder.cs
- DropShadowEffect.cs