code: Deferred<Object> compact(final ArrayList<KeyValue> row,
        final KeyValue[] compacted,
        List<Annotation> annotations,
        List<HistogramDataPoint> histograms) {
      return new Compaction(row, compacted, annotations, histograms).compact();
    }
docs: Compacts a row into a single {@link KeyValue}.
  <p>
  If the {@code row} is empty, this function does literally nothing.
  If {@code compacted} is not {@code null}, then the compacted form of this
  {@code row} will be stored in {@code compacted[0]}.  Obviously, if the
  {@code row} contains a single cell, then that cell is the compacted form.
  Otherwise the compaction process takes places.
  @param row The row containing all the KVs to compact.  Must be non-null.
  @param compacted If non-null, the first item in the array will be set to
  a {@link KeyValue} containing the compacted form of this row.
  If non-null, we will also not write the compacted form back to HBase
  unless the timestamp in the row key is old enough.
  @param annotations supplied list which will have all encountered
  annotations added to it.
  @return A {@link Deferred} if the compaction processed required a write
  to HBase, otherwise {@code null}.