| File: FrameworkFork\Microsoft.Xml\Xml\XPath\XPathNavigatorKeyComparer.cs | Web Access |
| Project: src\src\dotnet-svcutil\lib\src\dotnet-svcutil-lib.csproj (dotnet-svcutil-lib) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.IO; using Microsoft.Xml.Schema; using System.Collections; using System.Diagnostics; using MS.Internal.Xml.Cache; namespace Microsoft.Xml.XPath { using System; using Microsoft.Xml; internal class XPathNavigatorKeyComparer : IEqualityComparer { bool IEqualityComparer.Equals(Object obj1, Object obj2) { XPathNavigator nav1 = obj1 as XPathNavigator; XPathNavigator nav2 = obj2 as XPathNavigator; if ((nav1 != null) && (nav2 != null)) { if (nav1.IsSamePosition(nav2)) return true; } return false; } int IEqualityComparer.GetHashCode(Object obj) { int hashCode; XPathNavigator nav; XPathDocumentNavigator xpdocNav; if (obj == null) { throw new ArgumentNullException("obj"); } else if (null != (xpdocNav = obj as XPathDocumentNavigator)) { hashCode = xpdocNav.GetPositionHashCode(); } else if (null != (nav = obj as XPathNavigator)) { Object underlyingObject = nav.UnderlyingObject; if (underlyingObject != null) { hashCode = underlyingObject.GetHashCode(); } else { hashCode = (int)nav.NodeType; hashCode ^= nav.LocalName.GetHashCode(); hashCode ^= nav.Prefix.GetHashCode(); hashCode ^= nav.NamespaceURI.GetHashCode(); } } else { hashCode = obj.GetHashCode(); } return hashCode; } } }