Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / XmlUtils / System / Xml / Xsl / Runtime / DocumentOrderComparer.cs / 1 / DocumentOrderComparer.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Xml; using System.Xml.XPath; using System.Diagnostics; namespace System.Xml.Xsl.Runtime { ////// IComparer implementation that orders navigators based on ComparePosition. When ComparePosition returns /// XmlNodeOrder.Unknown, a stable order between documents is maintained by an ordered list mapping each root node /// to an ordering index. /// internal class DocumentOrderComparer : IComparer{ private List roots; /// /// Return: /// -1 if navThis is positioned before navThat /// 0 if navThis has the same position as navThat /// 1 if navThis is positioned after navThat /// public int Compare(XPathNavigator navThis, XPathNavigator navThat) { switch (navThis.ComparePosition(navThat)) { case XmlNodeOrder.Before: return -1; case XmlNodeOrder.Same: return 0; case XmlNodeOrder.After: return 1; } // Use this.roots to impose stable ordering if (this.roots == null) this.roots = new List(); Debug.Assert(GetDocumentIndex(navThis) != GetDocumentIndex(navThat)); return GetDocumentIndex(navThis) < GetDocumentIndex(navThat) ? -1 : 1; } /// /// Map navigator's document to a unique index. /// When consecutive calls are made to GetIndexOfNavigator for navThis and navThat, it is not possible /// for them to return the same index. navThis compared to navThat is always XmlNodeOrder.Unknown. /// Therefore, no matter where navThis is inserted in the list, navThat will never be inserted just /// before navThis, and therefore will never have the same index. /// public int GetDocumentIndex(XPathNavigator nav) { XPathNavigator navRoot; // Use this.roots to impose stable ordering if (this.roots == null) this.roots = new List(); // Position navigator to root navRoot = nav.Clone(); navRoot.MoveToRoot(); for (int idx = 0; idx < this.roots.Count; idx++) { if (navRoot.IsSamePosition(this.roots[idx])) { // navigator's document was previously mapped to a unique index return idx; } } // Add navigator to this.roots mapping this.roots.Add(navRoot); return this.roots.Count - 1; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Xml; using System.Xml.XPath; using System.Diagnostics; namespace System.Xml.Xsl.Runtime { ////// IComparer implementation that orders navigators based on ComparePosition. When ComparePosition returns /// XmlNodeOrder.Unknown, a stable order between documents is maintained by an ordered list mapping each root node /// to an ordering index. /// internal class DocumentOrderComparer : IComparer{ private List roots; /// /// Return: /// -1 if navThis is positioned before navThat /// 0 if navThis has the same position as navThat /// 1 if navThis is positioned after navThat /// public int Compare(XPathNavigator navThis, XPathNavigator navThat) { switch (navThis.ComparePosition(navThat)) { case XmlNodeOrder.Before: return -1; case XmlNodeOrder.Same: return 0; case XmlNodeOrder.After: return 1; } // Use this.roots to impose stable ordering if (this.roots == null) this.roots = new List(); Debug.Assert(GetDocumentIndex(navThis) != GetDocumentIndex(navThat)); return GetDocumentIndex(navThis) < GetDocumentIndex(navThat) ? -1 : 1; } /// /// Map navigator's document to a unique index. /// When consecutive calls are made to GetIndexOfNavigator for navThis and navThat, it is not possible /// for them to return the same index. navThis compared to navThat is always XmlNodeOrder.Unknown. /// Therefore, no matter where navThis is inserted in the list, navThat will never be inserted just /// before navThis, and therefore will never have the same index. /// public int GetDocumentIndex(XPathNavigator nav) { XPathNavigator navRoot; // Use this.roots to impose stable ordering if (this.roots == null) this.roots = new List(); // Position navigator to root navRoot = nav.Clone(); navRoot.MoveToRoot(); for (int idx = 0; idx < this.roots.Count; idx++) { if (navRoot.IsSamePosition(this.roots[idx])) { // navigator's document was previously mapped to a unique index return idx; } } // Add navigator to this.roots mapping this.roots.Add(navRoot); return this.roots.Count - 1; } } } // 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
- FrameworkElementAutomationPeer.cs
- XPathAncestorIterator.cs
- DPCustomTypeDescriptor.cs
- ApplicationBuildProvider.cs
- _ConnectOverlappedAsyncResult.cs
- DockPanel.cs
- KeyedCollection.cs
- ImageAutomationPeer.cs
- PrivateFontCollection.cs
- ObjectDataSourceView.cs
- TypeBinaryExpression.cs
- RenderCapability.cs
- DecoderNLS.cs
- GeneralTransform3DTo2D.cs
- QuotedPrintableStream.cs
- NumberSubstitution.cs
- PreDigestedSignedInfo.cs
- WebResourceAttribute.cs
- ByteStack.cs
- AdjustableArrowCap.cs
- Boolean.cs
- ScriptReferenceBase.cs
- AutomationTextAttribute.cs
- HtmlSelectionListAdapter.cs
- TdsParser.cs
- ExpressionsCollectionConverter.cs
- XmlSortKeyAccumulator.cs
- TextProviderWrapper.cs
- BindingExpression.cs
- DataGridViewColumnDesigner.cs
- FlatButtonAppearance.cs
- MailAddressCollection.cs
- DependencyObject.cs
- TraceListeners.cs
- UnSafeCharBuffer.cs
- VirtualizedItemProviderWrapper.cs
- Section.cs
- hwndwrapper.cs
- UrlMappingCollection.cs
- ChameleonKey.cs
- bidPrivateBase.cs
- DataTemplate.cs
- XmlSchemaSimpleContent.cs
- CodeCompileUnit.cs
- Model3DGroup.cs
- MaterialGroup.cs
- coordinatorfactory.cs
- XmlSchemaSequence.cs
- Brush.cs
- PropertyChangedEventArgs.cs
- CanExecuteRoutedEventArgs.cs
- AsyncPostBackTrigger.cs
- DocumentSchemaValidator.cs
- Int32RectValueSerializer.cs
- AuthenticationSection.cs
- SamlAudienceRestrictionCondition.cs
- CodeParameterDeclarationExpressionCollection.cs
- WebPartManagerDesigner.cs
- FilteredSchemaElementLookUpTable.cs
- AttachedAnnotation.cs
- StateInitializationDesigner.cs
- SqlEnums.cs
- _NestedSingleAsyncResult.cs
- EmissiveMaterial.cs
- OracleBinary.cs
- SettingsPropertyValue.cs
- ToolStripDropDownClosingEventArgs.cs
- DataSourceCacheDurationConverter.cs
- Fault.cs
- Splitter.cs
- SystemTcpConnection.cs
- UriSectionData.cs
- TimeoutValidationAttribute.cs
- DataGridViewColumnConverter.cs
- GeometryDrawing.cs
- dtdvalidator.cs
- selecteditemcollection.cs
- NavigatorOutput.cs
- dsa.cs
- VectorAnimationBase.cs
- SqlVersion.cs
- EntityViewGenerationAttribute.cs
- UriParserTemplates.cs
- WindowsSolidBrush.cs
- AutoGeneratedField.cs
- Compiler.cs
- DataGridViewColumnEventArgs.cs
- ErrorStyle.cs
- CounterSampleCalculator.cs
- NamedPipeTransportSecurity.cs
- TextSelectionHelper.cs
- SecurityContext.cs
- DecimalKeyFrameCollection.cs
- UrlMappingsSection.cs
- SizeIndependentAnimationStorage.cs
- DataGridColumnCollection.cs
- XmlSchemaValidationException.cs
- HashCryptoHandle.cs
- MULTI_QI.cs
- PrivateFontCollection.cs