Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }