コード例 #1
0
ファイル: MessageId.cs プロジェクト: stangelandcl/Actors
 public bool Equals(IMessageId other)
 {
     if(other == null || other.GetType() != GetType())
         return false;
     return ((MessageId)other).id == id;
 }
コード例 #2
0
        public int CompareTo(IMessageId o)
        {
            if (o is BatchMessageId bm)
            {
                var ord           = 0;
                var ledgercompare = _ledgerId.CompareTo(bm.LedgerId);

                if (ledgercompare != 0)
                {
                    ord = ledgercompare;
                }

                var entryCompare = EntryId.CompareTo(bm.EntryId);
                if (entryCompare != 0 && ord == 0)
                {
                    ord = entryCompare;
                }

                var partitionCompare = PartitionIndex.CompareTo(bm.PartitionIndex);
                if (partitionCompare != 0 && ord == 0)
                {
                    ord = partitionCompare;
                }

                var result = ledgercompare == 0 && entryCompare == 0 && partitionCompare == 0;
                if (result && bm.BatchIndex > -1)
                {
                    return(-1);
                }

                return(ord);
            }
            if (o is MessageId other)
            {
                var ledgerCompare = _ledgerId.CompareTo(other.LedgerId);
                if (ledgerCompare != 0)
                {
                    return(ledgerCompare);
                }

                var entryCompare = _entryId.CompareTo(other.EntryId);
                if (entryCompare != 0)
                {
                    return(entryCompare);
                }

                var partitionedCompare = _partitionIndex.CompareTo(other.PartitionIndex);
                if (partitionedCompare != 0)
                {
                    return(partitionedCompare);
                }

                return(0);
            }
            if (o is TopicMessageId impl)
            {
                return(CompareTo(impl.InnerMessageId));
            }
            throw new ArgumentException("expected MessageId object. Got instance of " + o.GetType().FullName);
        }
コード例 #3
0
ファイル: MultiMessageId.cs プロジェクト: eaba/SharpPulsar
        // If all messageId in map are same Size, and all bigger/smaller than the other, return valid value.
        public int CompareTo(IMessageId o)
        {
            if (!(o is MultiMessageId))
            {
                throw new ArgumentException("expected MultiMessageId object. Got instance of " + o.GetType().FullName);
            }

            var other    = (MultiMessageId)o;
            var otherMap = other.Map;

            if ((Map == null || Map.Count == 0) && (otherMap == null || otherMap.Count == 0))
            {
                return(0);
            }

            if (otherMap == null || Map == null || otherMap.Count != Map.Count)
            {
                throw new ArgumentException("Current Size and other Size not equals");
            }

            var result = 0;

            foreach (var entry in HashMapHelper.SetOfKeyValuePairs(Map))
            {
                if (!otherMap.TryGetValue(entry.Key, out var otherMessage))
                {
                    throw new ArgumentException("Other MessageId not have topic " + entry.Key);
                }

                var currentResult = entry.Value.CompareTo(otherMessage);
                if (result == 0)
                {
                    result = currentResult;
                }
                else if (currentResult == 0)
                {
                    continue;
                }
                else if (result != currentResult)
                {
                    throw new ArgumentException("Different MessageId in Map get different compare result");
                }
                else
                {
                    continue;
                }
            }

            return(result);
        }