/// <summary> /// Compares two StreamStoreConsolidatedKey objects and returns a value indicating whether one is less than, equal to, or greater than the other. /// </summary> /// <returns> /// A signed integer that indicates the relative values of <paramref name="x"/> and <paramref name="y"/>, as shown in the following table. /// Value Meaning Less than zero<paramref name="x"/> is less than <paramref name="y"/>. /// Zero<paramref name="x"/> equals <paramref name="y"/>. /// Greater than zero<paramref name="x"/> is greater than <paramref name="y"/>. /// </returns> /// <param name="x">The first StreamStoreConsolidatedKey object to compare.</param> /// <param name="y">The second StreamStoreConsolidatedKey object to compare.</param> public int Compare(StreamStoreConsolidatedKey x, StreamStoreConsolidatedKey y) { // Comparison when x == null. if (null == x) { return(null == y ? 0 : 1); } // Comparision when y == null. if (null == y) { return(-1); } // x !null and y !null, // Check the Store Kind var kindCompare = x.StoreKind.CompareTo(y.StoreKind); // if they are same kind and then check individual store key objects. if (0 == kindCompare) { if (x.StoreKind == StreamStoreKind.MessageStore) { var messageKeyComparercomparer = new StreamStoreMessageKeyComparer(); return(messageKeyComparercomparer.Compare(x.MessageKey, y.MessageKey)); } if (x.StoreKind == StreamStoreKind.MetadataStore) { var metadataKeyComparercomparer = new StreamMetadataKeyComparer(); return(metadataKeyComparercomparer.Compare(x.MetadataKey, y.MetadataKey)); } var nameKeyComparercomparer = new StreamNameKeyComparer(); return(nameKeyComparercomparer.Compare(x.NameKey, y.NameKey)); } // Not the same kind return(kindCompare); }
/// <summary> /// Returns a hash code for the specified StreamStoreConsolidatedKey object. /// </summary> /// <returns> /// A hash code for the specified StreamStoreConsolidatedKey object. /// </returns> /// <param name="obj">The <see cref="StreamMetadataKey"/> for which a hash code is to be returned.</param> /// <exception cref="System.ArgumentNullException">The type of <paramref name="obj"/> is a reference type and <paramref name="obj"/> is null.</exception> public int GetHashCode(StreamStoreConsolidatedKey obj) { var kindCode = obj.StoreKind.GetHashCode(); int keyCode; if (obj.StoreKind == StreamStoreKind.MessageStore) { var messageKeyComparer = new StreamStoreMessageKeyComparer(); keyCode = messageKeyComparer.GetHashCode(obj.MessageKey); } else if (obj.StoreKind == StreamStoreKind.MetadataStore) { var streamMetadataKeyComparer = new StreamMetadataKeyComparer(); keyCode = streamMetadataKeyComparer.GetHashCode(obj.MetadataKey); } else { var streamNameKeyComparer = new StreamNameKeyComparer(); keyCode = streamNameKeyComparer.GetHashCode(obj.NameKey); } return(kindCode ^ keyCode); }