package com.googlecode.totallylazy.functions;
public final class Time1<A,B> implements Function1<A, B> {
private final Function1<? super A, ? extends B> callable;
private final Function1<? super Number, ?> reporter;
private Time1(Function1<? super A, ? extends B> callable, Function1<? super Number, ?> reporter) {
this.callable = callable;
this.reporter = reporter;
}
@Override
public final B call(A a) throws Exception {
long start = System.nanoTime();
B result = callable.call(a);
reporter.call(Time0.calculateMilliseconds(start, System.nanoTime()));
return result;
}
public static <A,B> Time1<A,B> time1(Function1<? super A, ? extends B> callable){
return time1(callable, Time0.DEFAULT_REPORTER);
}
public static <A,B> Time1<A,B> time1(Function1<? super A, ? extends B> callable, Function1<? super Number, ?> reporter){
return new Time1<A,B>(callable, reporter);
}
}