00001
00005 package edu.mit.csail.sdg.squander.utils;
00006
00007 import java.util.HashMap;
00008 import java.util.Map;
00009 import java.util.concurrent.atomic.AtomicInteger;
00010
00011 public final class Counter<T> {
00012
00013 private final Map<T,AtomicInteger> map = new HashMap<T,AtomicInteger>();
00014
00015 public Counter() {
00016 super();
00017 }
00018
00019 public int getCount(final T key) {
00020 final AtomicInteger probe = map.get(key);
00021 if (probe == null) {
00022 return 0;
00023 } else {
00024 return probe.intValue();
00025 }
00026 }
00027
00028 public int incrementAndGet(final T key) {
00029 final AtomicInteger probe = map.get(key);
00030 if (probe != null) {
00031
00032 final int result = probe.incrementAndGet();
00033 return result;
00034 } else {
00035
00036 final AtomicInteger a = new AtomicInteger(1);
00037 map.put(key, a);
00038 return a.intValue();
00039 }
00040 }
00041
00042 }