Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- ProjectionPath.cs
- SQLInt32Storage.cs
- SystemTcpConnection.cs
- StubHelpers.cs
- BaseDataBoundControlDesigner.cs
- FixedSOMImage.cs
- LabelEditEvent.cs
- CategoryGridEntry.cs
- DbConnectionPoolCounters.cs
- LeftCellWrapper.cs
- RuntimeWrappedException.cs
- Rules.cs
- CompositeFontParser.cs
- Journal.cs
- EdmProviderManifest.cs
- DesignerVerb.cs
- CodeExporter.cs
- Formatter.cs
- BooleanConverter.cs
- Utils.cs
- sitestring.cs
- EtwProvider.cs
- StaticDataManager.cs
- ProtectedConfiguration.cs
- VariableDesigner.xaml.cs
- sqlinternaltransaction.cs
- AutomationElement.cs
- WindowsScroll.cs
- TextSpan.cs
- _LocalDataStore.cs
- JavaScriptString.cs
- DataViewManager.cs
- OrderPreservingPipeliningSpoolingTask.cs
- ServicePoint.cs
- ManagedFilter.cs
- TreeNodeStyle.cs
- XhtmlCssHandler.cs
- InternalBufferOverflowException.cs
- MemoryMappedFileSecurity.cs
- BufferModeSettings.cs
- ReturnValue.cs
- DataTableMappingCollection.cs
- DTCTransactionManager.cs
- LinqDataSourceEditData.cs
- URIFormatException.cs
- WarningException.cs
- FormViewInsertedEventArgs.cs
- DCSafeHandle.cs
- PngBitmapEncoder.cs
- DnsPermission.cs
- MimeMapping.cs
- EngineSite.cs
- SoapException.cs
- BaseParaClient.cs
- DetectEofStream.cs
- keycontainerpermission.cs
- webproxy.cs
- AnnouncementEndpoint.cs
- BitmapEffectRenderDataResource.cs
- FileAccessException.cs
- DictionaryEditChange.cs
- SystemIPv6InterfaceProperties.cs
- PopupControlService.cs
- WindowsTreeView.cs
- DateTimeFormat.cs
- ImageSourceValueSerializer.cs
- PageThemeCodeDomTreeGenerator.cs
- DataServiceResponse.cs
- Calendar.cs
- SendingRequestEventArgs.cs
- serverconfig.cs
- StatusBarDrawItemEvent.cs
- ListBoxItemAutomationPeer.cs
- ManagedWndProcTracker.cs
- ControlDesigner.cs
- DataGridViewHitTestInfo.cs
- AnnotationResourceChangedEventArgs.cs
- DataGridTableCollection.cs
- TypefaceCollection.cs
- OleDbCommandBuilder.cs
- MediaPlayerState.cs
- TextStore.cs
- SafeFileHandle.cs
- ContractHandle.cs
- Section.cs
- HtmlFormWrapper.cs
- EpmTargetPathSegment.cs
- HtmlShim.cs
- LoadedEvent.cs
- AxHost.cs
- ListViewUpdatedEventArgs.cs
- ZipPackagePart.cs
- StringToken.cs
- UInt64Converter.cs
- TextDecorationLocationValidation.cs
- UserThread.cs
- uribuilder.cs
- AccessText.cs
- Expr.cs
- DataServiceQueryException.cs