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
- ListControl.cs
- PropertyMappingExceptionEventArgs.cs
- ColorContextHelper.cs
- DisplayNameAttribute.cs
- OdbcDataAdapter.cs
- Point3DCollectionValueSerializer.cs
- SqlCachedBuffer.cs
- RC2CryptoServiceProvider.cs
- NullReferenceException.cs
- Int32CAMarshaler.cs
- BrowserCapabilitiesFactory.cs
- RawStylusInputCustomDataList.cs
- ValidationErrorEventArgs.cs
- MimeTextImporter.cs
- ReachSerializerAsync.cs
- PenThreadPool.cs
- XmlAttributeCollection.cs
- CacheSection.cs
- ListDictionaryInternal.cs
- AlphabeticalEnumConverter.cs
- PartManifestEntry.cs
- TabOrder.cs
- Funcletizer.cs
- Symbol.cs
- SystemIcmpV4Statistics.cs
- OleDbRowUpdatingEvent.cs
- SortFieldComparer.cs
- ParseHttpDate.cs
- BorderGapMaskConverter.cs
- XamlTemplateSerializer.cs
- DataServiceProviderWrapper.cs
- StopStoryboard.cs
- IPPacketInformation.cs
- ScriptComponentDescriptor.cs
- RegexGroupCollection.cs
- QuaternionAnimation.cs
- OrderedDictionary.cs
- QilCloneVisitor.cs
- ContextDataSource.cs
- log.cs
- Condition.cs
- _Semaphore.cs
- SecurityHelper.cs
- Stopwatch.cs
- CircleHotSpot.cs
- UpdateRecord.cs
- Type.cs
- CodeThrowExceptionStatement.cs
- StatusBar.cs
- TreeNodeSelectionProcessor.cs
- StringFormat.cs
- ReliabilityContractAttribute.cs
- XslTransformFileEditor.cs
- InkCanvasSelectionAdorner.cs
- ExportOptions.cs
- CompositeScriptReferenceEventArgs.cs
- TypeConverterValueSerializer.cs
- SoapParser.cs
- PhoneCall.cs
- Debug.cs
- TargetException.cs
- ValidationSummaryDesigner.cs
- PathFigureCollection.cs
- FormsAuthenticationCredentials.cs
- WizardStepBase.cs
- SpecialNameAttribute.cs
- UTF7Encoding.cs
- GridViewColumn.cs
- HyperLinkColumn.cs
- CompilationLock.cs
- EventLogRecord.cs
- Button.cs
- SignedXml.cs
- Point4D.cs
- PointKeyFrameCollection.cs
- HtmlImage.cs
- CodeSubDirectoriesCollection.cs
- Root.cs
- Collection.cs
- ResourceKey.cs
- SQLBoolean.cs
- UrlMappingsModule.cs
- SatelliteContractVersionAttribute.cs
- ProjectedSlot.cs
- IgnoreFileBuildProvider.cs
- TypeTypeConverter.cs
- EdmItemCollection.cs
- TextEditorMouse.cs
- MaskDescriptor.cs
- OpenTypeLayout.cs
- Quad.cs
- SchemaElementLookUpTable.cs
- XPathEmptyIterator.cs
- ListViewPagedDataSource.cs
- DataBoundControlAdapter.cs
- LambdaCompiler.Logical.cs
- ChineseLunisolarCalendar.cs
- ColorPalette.cs
- TimeoutValidationAttribute.cs
- DaylightTime.cs