This retransmitter is specialized in maintaining
ranges of seqnos, e.g. [3-20], [89-89], [100-120]. The ranges are stored in a sorted hashmap and the {@link Comparable#compareTo(Object)} method compares both rangesagain ranges, and ranges against seqnos. The latter helps to find a range given a seqno, e.g. seqno 105 will find range [100-120].
Each range is implemented by {@link org.jgroups.util.SeqnoRange}, which has a bitset of all missing seqnos. When a seqno is received, that bit set is updated; the bit corresponding to the seqno is set to 1. A task linked to the range periodically retransmits missing messages.
When all bits are 1 (= all messages have been received), the range is removed from the hashmap and the retransmission task is cancelled.
RangeBasedRetransmitter requires sequence numbers and sequence number ranges to be
added in ascending and non-overlapping order: e.g. 1 4 [10-21] 22 [50-60] is ok, while [3-7] [5-8] 20 18 is
not !
@author Bela Ban