package org.jgroups.protocols.tom; /** * Manages the messages sequence number (keeps it up-to-date) * * @author Pedro Ruivo * @since 3.1 */ public class SequenceNumberManager { private long sequenceNumber = 0; /** * * @return the next sequence number */ public synchronized long getAndIncrement() { return sequenceNumber++; } /** * updates the sequence number to the maximum between them * @param otherSequenceNumber the sequence number received */ public synchronized void update(long otherSequenceNumber) { sequenceNumber = Math.max(sequenceNumber, otherSequenceNumber + 1); } /** * updates the sequence number and returns the next, that will be used a propose sequence number * @param otherSequenceNumber the sequence number received * @return the next sequence number or the received sequence number, if the received sequence * number is higher the the actual sequence number */ public synchronized long updateAndGet(long otherSequenceNumber) { if (sequenceNumber >= otherSequenceNumber) { return sequenceNumber++; } else { sequenceNumber = otherSequenceNumber + 1; return otherSequenceNumber; } } }