@Override public <T, R> R counted(Function<T, R> f, T arg, String counterName, long delta) { final Counter counter = getNamedCounter(counterName); try { return f.apply(arg); } finally { processCounter(counter, delta); } }
@Override public <T> void counted(Consumer<T> c, T arg, String counterName, long delta) { final Counter counter = getNamedCounter(counterName); try { c.accept(arg); } finally { processCounter(counter, delta); } }
@Override public void counted(Runnable r, String counterName, long delta) { final Counter counter = getNamedCounter(counterName); try { r.run(); } finally { processCounter(counter, delta); } }
@Override public <V> V counted(Callable<V> c, String counterName, long delta) throws Exception { final Counter counter = getNamedCounter(counterName); try { return c.call(); } finally { processCounter(counter, delta); } }
@Override public <T, U> void counted(BiConsumer<T, U> bc, T arg1, U arg2, String counterName, long delta) { final Counter counter = getNamedCounter(counterName); try { bc.accept(arg1, arg2); } finally { processCounter(counter, delta); } }
@Override public <T, U, R> R counted(BiFunction<T, U, R> bf, T arg1, U arg2, String counterName, long delta) { final Counter counter = getNamedCounter(counterName); try { return bf.apply(arg1, arg2); } finally { processCounter(counter, delta); } }