package net.i2p.util; import java.io.Serializable; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; /** * Count things. * * @author zzz, welterde */ public class ObjectCounter<K> implements Serializable { /** * Serializable so it can be passed in an Android Bundle */ private static final long serialVersionUID = 3160378641721937421L; private final ConcurrentHashMap<K, AtomicInteger> map; public ObjectCounter() { this.map = new ConcurrentHashMap<K, AtomicInteger>(); } /** * Add one. * @return count after increment */ public int increment(K h) { AtomicInteger i = this.map.putIfAbsent(h, new AtomicInteger(1)); if (i != null) return i.incrementAndGet(); return 1; } /** * @return current count */ public int count(K h) { AtomicInteger i = this.map.get(h); if (i != null) return i.get(); return 0; } /** * @return set of objects with counts > 0 */ public Set<K> objects() { return this.map.keySet(); } /** * start over * @since 0.7.11 */ public void clear() { this.map.clear(); } }