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
- EventWaitHandleSecurity.cs
- ListViewGroupConverter.cs
- DesignerTransactionCloseEvent.cs
- SchemaImporterExtensionsSection.cs
- QilTargetType.cs
- validation.cs
- DataViewSetting.cs
- WmlValidatorAdapter.cs
- BufferedWebEventProvider.cs
- Geometry3D.cs
- HttpHandlerAction.cs
- TextSchema.cs
- SHA1.cs
- DataGridDetailsPresenterAutomationPeer.cs
- ParamArrayAttribute.cs
- Int32.cs
- CapabilitiesAssignment.cs
- VariableBinder.cs
- oledbmetadatacolumnnames.cs
- SerializationInfoEnumerator.cs
- FixedSOMPageConstructor.cs
- SamlAssertionKeyIdentifierClause.cs
- GeometryDrawing.cs
- DataGridViewCellPaintingEventArgs.cs
- SecurityResources.cs
- QilStrConcatenator.cs
- FontConverter.cs
- WindowCollection.cs
- HTMLTextWriter.cs
- FixedBufferAttribute.cs
- MultiBinding.cs
- SessionEndingCancelEventArgs.cs
- EncodingStreamWrapper.cs
- ColorAnimationUsingKeyFrames.cs
- ViewManager.cs
- SerialPort.cs
- panel.cs
- Popup.cs
- DiscoveryRequestHandler.cs
- DurableEnlistmentState.cs
- EntityClientCacheKey.cs
- XamlGridLengthSerializer.cs
- HybridDictionary.cs
- ObjectQueryProvider.cs
- BlurEffect.cs
- Pair.cs
- DataGridState.cs
- EditorOptionAttribute.cs
- SqlReferenceCollection.cs
- Util.cs
- Speller.cs
- UInt32Storage.cs
- BitmapInitialize.cs
- RoutingConfiguration.cs
- SkewTransform.cs
- AutomationProperties.cs
- CompressedStack.cs
- SessionState.cs
- BindingFormattingDialog.cs
- Duration.cs
- ButtonBase.cs
- JoinGraph.cs
- DesignerValidationSummaryAdapter.cs
- CodeTypeConstructor.cs
- Guid.cs
- DiffuseMaterial.cs
- DataBindEngine.cs
- Event.cs
- FloaterBaseParagraph.cs
- ResourceSet.cs
- ButtonFieldBase.cs
- TableCell.cs
- RootContext.cs
- HiddenFieldDesigner.cs
- COMException.cs
- PointAnimationUsingKeyFrames.cs
- ConnectionPoint.cs
- QueuedDeliveryRequirementsMode.cs
- PartManifestEntry.cs
- SoapIncludeAttribute.cs
- MsmqChannelFactory.cs
- Timer.cs
- TextBoxAutomationPeer.cs
- ButtonBaseAutomationPeer.cs
- SqlNotificationRequest.cs
- EventLogPermission.cs
- WindowsToolbar.cs
- DiagnosticsConfigurationHandler.cs
- CreateUserWizard.cs
- WebConvert.cs
- ExecutionEngineException.cs
- PersistencePipeline.cs
- HybridDictionary.cs
- ImmutableObjectAttribute.cs
- WebZone.cs
- ISFClipboardData.cs
- GeometryDrawing.cs
- ModifiableIteratorCollection.cs
- ResourceDefaultValueAttribute.cs
- TabControlAutomationPeer.cs