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
- xdrvalidator.cs
- AppSettingsReader.cs
- GradientStop.cs
- HttpVersion.cs
- HostedTcpTransportManager.cs
- PropertyValueChangedEvent.cs
- DataBindingList.cs
- XmlSchemaAttributeGroupRef.cs
- DateBoldEvent.cs
- SafeEventLogWriteHandle.cs
- GeometryGroup.cs
- IdnMapping.cs
- AnimationClock.cs
- VirtualizedCellInfoCollection.cs
- FlowLayout.cs
- CodeSnippetStatement.cs
- Matrix3DStack.cs
- WebPartConnectionsCancelVerb.cs
- BrowserCapabilitiesCompiler.cs
- OdbcError.cs
- ApplicationBuildProvider.cs
- ParameterSubsegment.cs
- _ServiceNameStore.cs
- CopyOnWriteList.cs
- PolyBezierSegment.cs
- RuntimeComponentFilter.cs
- EntityViewGenerator.cs
- EtwTrace.cs
- WebPartVerbsEventArgs.cs
- Win32.cs
- UnmanagedMarshal.cs
- ExceptionHelpers.cs
- ServiceContractListItemList.cs
- SelectionRangeConverter.cs
- RSAOAEPKeyExchangeDeformatter.cs
- BamlLocalizableResourceKey.cs
- PerformanceCounterScope.cs
- PreviewPrintController.cs
- SqlTrackingQuery.cs
- RawStylusInput.cs
- SafeUserTokenHandle.cs
- RuleRef.cs
- HttpCachePolicyElement.cs
- VersionUtil.cs
- DataBindingHandlerAttribute.cs
- MetadataHelper.cs
- CssStyleCollection.cs
- StringReader.cs
- designeractionlistschangedeventargs.cs
- DataPagerCommandEventArgs.cs
- MultiAsyncResult.cs
- EventLogPermissionEntry.cs
- SchemaInfo.cs
- InvokeMethodActivityDesigner.cs
- OleDbParameter.cs
- MatrixValueSerializer.cs
- DataReaderContainer.cs
- AccessibleObject.cs
- BoolExpressionVisitors.cs
- SimpleWorkerRequest.cs
- TextFragmentEngine.cs
- SourceLineInfo.cs
- OptionalColumn.cs
- EntityProxyFactory.cs
- XPathDocumentNavigator.cs
- RawMouseInputReport.cs
- BamlRecordReader.cs
- UnhandledExceptionEventArgs.cs
- PaintValueEventArgs.cs
- Visual.cs
- BamlBinaryReader.cs
- Cursor.cs
- RecommendedAsConfigurableAttribute.cs
- TableLayoutStyleCollection.cs
- IisTraceWebEventProvider.cs
- WebServiceParameterData.cs
- XPathAncestorQuery.cs
- WhiteSpaceTrimStringConverter.cs
- IsolatedStoragePermission.cs
- LoginName.cs
- NotificationContext.cs
- mediaclock.cs
- BaseResourcesBuildProvider.cs
- RTLAwareMessageBox.cs
- SafeTimerHandle.cs
- TypeUsageBuilder.cs
- ApplyImportsAction.cs
- XmlChildNodes.cs
- BitmapImage.cs
- OleDbRowUpdatedEvent.cs
- DataTablePropertyDescriptor.cs
- TypeUtil.cs
- XmlWellformedWriter.cs
- XmlQualifiedName.cs
- IsolatedStorageFilePermission.cs
- StructuredProperty.cs
- DefaultEvaluationContext.cs
- MsmqInputChannelListenerBase.cs
- MediaTimeline.cs
- _OverlappedAsyncResult.cs