package edu.uw.zookeeper.protocol.server; import static com.google.common.base.Preconditions.checkArgument; import java.util.concurrent.atomic.AtomicLong; import com.google.common.base.MoreObjects; /** * Generates increasing zxid starting with 1. * * Threadsafe */ public class ZxidIncrementer implements ZxidGenerator { public static ZxidIncrementer fromZero() { return of(new AtomicLong(0)); } public static ZxidIncrementer of(AtomicLong lastZxid) { checkArgument(lastZxid.get() >= 0); return new ZxidIncrementer(lastZxid); } protected final AtomicLong lastZxid; protected ZxidIncrementer(AtomicLong lastZxid) { super(); this.lastZxid = lastZxid; } @Override public long get() { return lastZxid.get(); } @Override public long next() { return lastZxid.incrementAndGet(); } @Override public String toString() { return MoreObjects.toStringHelper(this) .addValue(String.format("0x%s", Long.toHexString(get()))) .toString(); } }