package com.revolsys.util;
import java.util.Map;
public final class ShortCounter extends Number {
private static final short ONE = (short)1;
private static final short MINUS_ONE = (short)-1;
private static final short ZERO = (short)0;
private static final long serialVersionUID = 1L;
public static <K> short deccrement(final Map<K, ShortCounter> counts, final K key) {
if (key == null) {
return ZERO;
} else {
synchronized (counts) {
ShortCounter counter = counts.get(key);
if (counter == null) {
counter = new ShortCounter(MINUS_ONE);
counts.put(key, counter);
return MINUS_ONE;
} else {
final short count = counter.decrementAndGet();
if (count == ZERO) {
counts.remove(counter);
}
return count;
}
}
}
}
public static <K> short increment(final Map<K, ShortCounter> counts, final K key) {
if (key == null) {
return ZERO;
} else {
synchronized (counts) {
ShortCounter counter = counts.get(key);
if (counter == null) {
counter = new ShortCounter(ONE);
counts.put(key, counter);
return ONE;
} else {
return counter.incrementAndGet();
}
}
}
}
private short count = 0;
public ShortCounter() {
}
public ShortCounter(final short count) {
this.count = count;
}
public synchronized short decrementAndGet() {
return --this.count;
}
@Override
public double doubleValue() {
return this.count;
}
@Override
public float floatValue() {
return this.count;
}
public final short get() {
return this.count;
}
public synchronized short getAndDecrement() {
return --this.count;
}
public synchronized short getAndIncrement() {
return ++this.count;
}
public synchronized short incrementAndGet() {
return ++this.count;
}
@Override
public int intValue() {
return this.count;
}
@Override
public long longValue() {
return this.count;
}
@Override
public short shortValue() {
return this.count;
}
@Override
public String toString() {
return Short.toString(this.count);
}
}