package com.googlecode.totallylazy.functions;
import java.util.concurrent.Callable;
public final class CountCalls0<T> implements Function0<T> {
private int count = 0;
private final Callable<? extends T> callable;
@SuppressWarnings("unchecked")
private CountCalls0(Callable<? extends T> callable) {
this.callable = callable == null ? new Callable() {
public Object call() throws Exception {
return count;
}
} : callable;
}
public final T call() throws Exception {
T result = callable.call();
count++;
return result;
}
public final int count() {
return count;
}
public static CountCalls0<Integer> counting() {
return CountCalls0.<Integer>counting(null);
}
public static <T> CountCalls0<T> counting(Callable<? extends T> callable) {
return new CountCalls0<T>(callable);
}
}