Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- VectorConverter.cs
- PropertyNames.cs
- TagMapInfo.cs
- TypeUtils.cs
- LineBreak.cs
- XPathItem.cs
- CompilerErrorCollection.cs
- PenThread.cs
- SvcMapFileLoader.cs
- Compiler.cs
- AppDomainUnloadedException.cs
- SiteMapNode.cs
- Rights.cs
- InitializeCorrelation.cs
- WindowsComboBox.cs
- InputScopeConverter.cs
- X509CertificateTrustedIssuerElementCollection.cs
- BezierSegment.cs
- XmlWriterTraceListener.cs
- HashMembershipCondition.cs
- CardSpaceSelector.cs
- ToolTipAutomationPeer.cs
- ActivationWorker.cs
- log.cs
- EntityContainerEmitter.cs
- ImageListUtils.cs
- _RequestCacheProtocol.cs
- DataConnectionHelper.cs
- IntranetCredentialPolicy.cs
- EventMemberCodeDomSerializer.cs
- CriticalHandle.cs
- Queue.cs
- rsa.cs
- CodeAttributeDeclaration.cs
- WindowsAltTab.cs
- WindowCollection.cs
- FragmentQuery.cs
- XmlBinaryReader.cs
- ColorIndependentAnimationStorage.cs
- ValueHandle.cs
- ConnectionConsumerAttribute.cs
- FileDialog_Vista_Interop.cs
- MessageBodyDescription.cs
- DataError.cs
- TypeLibConverter.cs
- DBConnection.cs
- GreenMethods.cs
- ExecutionScope.cs
- UserControlAutomationPeer.cs
- DataMisalignedException.cs
- _emptywebproxy.cs
- XamlWrappingReader.cs
- ThreadExceptionEvent.cs
- MatrixValueSerializer.cs
- StreamSecurityUpgradeInitiatorAsyncResult.cs
- SequenceNumber.cs
- InternalMappingException.cs
- CannotUnloadAppDomainException.cs
- AudioFormatConverter.cs
- PairComparer.cs
- UInt16Converter.cs
- OracleNumber.cs
- AsymmetricAlgorithm.cs
- ChtmlCommandAdapter.cs
- AutoGeneratedFieldProperties.cs
- TypeConverters.cs
- ErrorTableItemStyle.cs
- CurrencyManager.cs
- DataFormats.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- EventDescriptorCollection.cs
- PiiTraceSource.cs
- ImageField.cs
- PointCollectionConverter.cs
- HtmlFormParameterReader.cs
- XmlQueryContext.cs
- CachedCompositeFamily.cs
- QEncodedStream.cs
- OleDbWrapper.cs
- UiaCoreProviderApi.cs
- DataServiceRequestException.cs
- Validator.cs
- XmlnsCompatibleWithAttribute.cs
- GlyphCache.cs
- FirstMatchCodeGroup.cs
- VectorKeyFrameCollection.cs
- DecoderFallbackWithFailureFlag.cs
- ArrangedElement.cs
- LogSwitch.cs
- Calendar.cs
- FrameworkContextData.cs
- ClaimSet.cs
- CursorConverter.cs
- JsonSerializer.cs
- shaperfactory.cs
- DuplicateWaitObjectException.cs
- serverconfig.cs
- ElementsClipboardData.cs
- InOutArgumentConverter.cs
- RolePrincipal.cs