/******************************************************************************* * Copyright © 2012-2015 eBay Software Foundation * This program is dual licensed under the MIT and Apache 2.0 licenses. * Please see LICENSE for more information. *******************************************************************************/ /** * */ package com.ebay.jetstream.counter; import java.util.concurrent.atomic.AtomicLong; import com.ebay.jetstream.xmlser.Hidden; /** * @author shmurthy * */ public class LongCounter { AtomicLong m_count = new AtomicLong(0); public long addAndGetHandlingRollover(long value) { if ((m_count.get() + value) < 0) { synchronized (this) { if ((m_count.get() + value) < 0) m_count.set(0); } } return m_count.addAndGet(value); } public long addAndGet(long value) { return m_count.addAndGet(value); } public long decrement() { if (m_count.get() < 1) { return 0; } return m_count.decrementAndGet(); } public long get() { return m_count.get(); } @Hidden public long getAndReset() { return m_count.getAndSet(0); } public long incrementHandlingRollover() { return addAndGetHandlingRollover(1); } public long increment() { return m_count.addAndGet(1); } public void reset() { m_count.set(0); } /** * @param l */ public void set(long val) { m_count.set(val); } public String toString() { return m_count.toString(); } }