//--------------------------------------------------------------------- // <copyright file="Pair.cs" company="Microsoft"> // Copyright (c) Microsoft Corporation. All rights reserved. // </copyright> // // @owner Microsoft // @backupOwner Microsoft //--------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Linq; namespace System.Data.Common.Utils { internal class Pair<TFirst, TSecond> : InternalBase { #region Fields private readonly TFirst first; private readonly TSecond second; #endregion #region Constructor internal Pair(TFirst first, TSecond second) { this.first = first; this.second = second; } #endregion #region Properties internal TFirst First { get { return first; } } internal TSecond Second { get { return second; } } #endregion #region Methods public override int GetHashCode() { return (first.GetHashCode()<<5) ^ second.GetHashCode(); } public bool Equals(Pair<TFirst, TSecond> other) { return first.Equals(other.first) && second.Equals(other.second); } public override bool Equals(object other) { Pair<TFirst, TSecond> otherPair = other as Pair<TFirst, TSecond>; return (otherPair != null && Equals(otherPair)); } #endregion #region InternalBase internal override void ToCompactString(StringBuilder builder) { builder.Append("<"); builder.Append(first.ToString()); builder.Append(", "+second.ToString()); builder.Append(">"); } #endregion internal class PairComparer : IEqualityComparer<Pair<TFirst, TSecond>> { private PairComparer() { } internal static readonly PairComparer Instance = new PairComparer(); private static readonly EqualityComparer<TFirst> firstComparer = EqualityComparer<TFirst>.Default; private static readonly EqualityComparer<TSecond> secondComparer = EqualityComparer<TSecond>.Default; public bool Equals(Pair<TFirst, TSecond> x, Pair<TFirst, TSecond> y) { return firstComparer.Equals(x.First, y.First) && secondComparer.Equals(x.Second, y.Second); } public int GetHashCode(Pair<TFirst, TSecond> source) { return source.GetHashCode(); } } } }