/// <summary> /// Gets the index of the first message in this block that has a sequence token at or before the provided token /// </summary> /// <param name="token"></param> /// <param name="comparer"></param> /// <returns></returns> public int GetIndexOfFirstMessageLessThanOrEqualTo(StreamSequenceToken token, ICacheDataComparer <TCachedMessage> comparer) { for (int i = writeIndex - 1; i >= readIndex; i--) { if (comparer.Compare(cachedMessages[i], token) <= 0) { return(i); } } throw new ArgumentOutOfRangeException("token"); }
public bool TryFindNextMessage(int start, IStreamIdentity streamIdentity, ICacheDataComparer <TCachedMessage> comparer, out int index) { if (start < readIndex) { throw new ArgumentOutOfRangeException("start"); } for (int i = start; i < writeIndex; i++) { if (comparer.Compare(cachedMessages[i], streamIdentity) == 0) { index = i; return(true); } } index = writeIndex - 1; return(false); }
/// <summary> /// Compare a cached message with a sequence token to determine if it message is before or after the token /// </summary> /// <param name="cachedMessage"></param> /// <param name="comparer"></param> /// <param name="streamToken"></param> /// <returns></returns> public static int Compare <TCachedMessage>(this ICacheDataComparer <TCachedMessage> comparer, StreamSequenceToken streamToken, TCachedMessage cachedMessage) { return(0 - comparer.Compare(cachedMessage, streamToken)); }
public static int Compare <TCachedMessage>(this ICacheDataComparer <TCachedMessage> comparer, IStreamIdentity streamIdentity, TCachedMessage cachedMessage) { return(0 - comparer.Compare(cachedMessage, streamIdentity)); }