code: @Override
    public UnsafeRow appendRow(Object kbase, long koff, int klen,
                               Object vbase, long voff, int vlen) {
      // if run out of max supported rows or page size, return null
      if (numRows >= capacity || page == null || page.size() - pageCursor < recordLength) {
        return null;
      }
  
      long offset = page.getBaseOffset() + pageCursor;
      final long recordOffset = offset;
      Platform.copyMemory(kbase, koff, base, offset, klen);
      offset += klen;
      Platform.copyMemory(vbase, voff, base, offset, vlen);
      offset += vlen;
      Platform.putLong(base, offset, 0);
  
      pageCursor += recordLength;
  
      keyRowId = numRows;
      keyRow.pointTo(base, recordOffset, klen);
      valueRow.pointTo(base, recordOffset + klen, vlen);
      numRows++;
      return valueRow;
    }
docs: Append a key value pair.
  It copies data into the backing MemoryBlock.
  Returns an UnsafeRow pointing to the value if succeeds, otherwise returns null.