code: public static <T1, T2, T3, R> TriFunction<T1, T2, T3, R> monitor(TriFunction<T1, T2, T3, R> function, AtomicLong calls) {
          return new TernaryMonitoringFunction<T1, T2, T3, R>(function, calls);
      }
docs: Monitors calls to a ternary function.
  
  @param <R> the function result type
  @param <T1> the function first parameter type
  @param <T2> the function second parameter type
  @param <T3> the function third parameter type
  @param function the function that will be monitored
  @param calls a value holder accumulating calls
  @return the proxied function