@Override
  public void add(ExtendedCell cell) {
    prepare(cell);
    byte type = cell.getTypeByte();
    switch (Type.codeToType(type)) {
      // By the order of seen. We put null cq at first.
      case DeleteFamily: // Delete all versions of all columns of the specified family
        delFamMap.put(cell.getSequenceId(),
          new DeleteVersionsNode(cell.getTimestamp(), cell.getSequenceId()));
        break;
      case DeleteFamilyVersion: // Delete all columns of the specified family and specified version
        delFamMap.ceilingEntry(cell.getSequenceId()).getValue().addVersionDelete(cell);
        break;

      // These two kinds of markers are mix with Puts.
      case DeleteColumn: // Delete all versions of the specified column
        delColMap.put(cell.getSequenceId(),
          new DeleteVersionsNode(cell.getTimestamp(), cell.getSequenceId()));
        break;
      case Delete: // Delete the specified version of the specified column.
        delColMap.ceilingEntry(cell.getSequenceId()).getValue().addVersionDelete(cell);
        break;
      default:
        throw new AssertionError("Unknown delete marker type for " + cell);
    }
  }
Reset the map if it is different with the last Cell. Save the cq array/offset/length for next
Cell.
@return If this put has duplicate ts with last cell, return the mvcc of last cell. Else return
        MAX_VALUE.
hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/NewVersionBehaviorTracker.java