code: public void add(AbstractCompactedRow row)
      {
          assert desc.range.contains(row.key.getToken()) : row.key.getToken() + " is not contained in " + desc.range;
          assert lastKey == null || lastKey.compareTo(row.key) < 0
                 : "row " + row.key + " received out of order wrt " + lastKey;
          lastKey = row.key;
  
          if (range == null)
              range = ranges.next();
  
          // generate new ranges as long as case 1 is true
          while (!range.contains(row.key.getToken()))
          {
              // add the empty hash, and move to the next range
              range.ensureHashInitialised();
              range = ranges.next();
          }
  
          // case 3 must be true: mix in the hashed row
          RowHash rowHash = rowHash(row);
          if (rowHash != null)
          {
              range.addHash(rowHash);
          }
      }
docs: Called (in order) for every row present in the CF.
  Hashes the row, and adds it to the tree being built.
  
  @param row Row to add hash