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
- XmlBinaryReader.cs
- CodeEntryPointMethod.cs
- BitmapMetadata.cs
- XsdBuilder.cs
- ValidatorCollection.cs
- TypeBuilder.cs
- AggregationMinMaxHelpers.cs
- TaiwanCalendar.cs
- HeaderUtility.cs
- DataGridViewCellStateChangedEventArgs.cs
- StrokeNodeData.cs
- Walker.cs
- ListViewSortEventArgs.cs
- KeyValuePair.cs
- DropShadowEffect.cs
- ProxyWebPartConnectionCollection.cs
- ISSmlParser.cs
- StaticTextPointer.cs
- ListView.cs
- InstallerTypeAttribute.cs
- WebPermission.cs
- DataSourceCache.cs
- IncrementalHitTester.cs
- CompensableActivity.cs
- SocketAddress.cs
- PagesSection.cs
- SelectionChangedEventArgs.cs
- WebPartActionVerb.cs
- DataGridColumn.cs
- XmlName.cs
- LineUtil.cs
- SpellCheck.cs
- CheckBoxPopupAdapter.cs
- PolicyImporterElement.cs
- Mapping.cs
- SqlConnectionPoolProviderInfo.cs
- WindowsGraphicsWrapper.cs
- IndentedWriter.cs
- ProfileServiceManager.cs
- DesignerVerbCollection.cs
- _HeaderInfo.cs
- DataServiceRequestOfT.cs
- HttpStreamXmlDictionaryWriter.cs
- DropTarget.cs
- DesignerTextBoxAdapter.cs
- DateTimeValueSerializerContext.cs
- StylusPointPropertyId.cs
- QuaternionAnimation.cs
- EnterpriseServicesHelper.cs
- PrimitiveCodeDomSerializer.cs
- DetailsViewDeletedEventArgs.cs
- DataSource.cs
- PropertyReferenceSerializer.cs
- RecoverInstanceLocksCommand.cs
- SrgsGrammarCompiler.cs
- CombinedGeometry.cs
- StylusTouchDevice.cs
- GridViewSortEventArgs.cs
- SQLMoneyStorage.cs
- InfoCardBinaryReader.cs
- ServiceDescriptionReflector.cs
- WebContext.cs
- TdsEnums.cs
- ExtenderProvidedPropertyAttribute.cs
- HScrollProperties.cs
- DbProviderFactoriesConfigurationHandler.cs
- ControlAdapter.cs
- SrgsElementFactoryCompiler.cs
- DataGridViewMethods.cs
- MonthChangedEventArgs.cs
- FactoryGenerator.cs
- CodeTypeDeclaration.cs
- CodeIdentifier.cs
- EditBehavior.cs
- DictionaryBase.cs
- CodeAccessSecurityEngine.cs
- StringResourceManager.cs
- ColumnHeaderConverter.cs
- PasswordTextNavigator.cs
- PublisherMembershipCondition.cs
- UnknownBitmapDecoder.cs
- TextTreeNode.cs
- EDesignUtil.cs
- SafeWaitHandle.cs
- TiffBitmapEncoder.cs
- ProgressiveCrcCalculatingStream.cs
- Selection.cs
- CellPartitioner.cs
- ServicesUtilities.cs
- Int32AnimationBase.cs
- EnumUnknown.cs
- FlowDocumentScrollViewer.cs
- FontFamilyIdentifier.cs
- ClientType.cs
- MultilineStringConverter.cs
- XmlChildEnumerator.cs
- ClientUrlResolverWrapper.cs
- ResourceDictionaryCollection.cs
- Permission.cs
- ColumnTypeConverter.cs