code: public BinaryRow append(LookupInfo info, BinaryRow value) throws IOException {
  		try {
  			if (numElements >= growthThreshold) {
  				growAndRehash();
  				//update info's bucketSegmentIndex and bucketOffset
  				lookup(info.key);
  			}
  			BinaryRow toAppend = hashSetMode ? reusedValue : value;
  			long pointerToAppended = recordArea.appendRecord(info.key, toAppend);
  			bucketSegments.get(info.bucketSegmentIndex).putLong(info.bucketOffset, pointerToAppended);
  			bucketSegments.get(info.bucketSegmentIndex).putInt(
  					info.bucketOffset + ELEMENT_POINT_LENGTH, info.keyHashCode);
  			numElements++;
  			recordArea.setReadPosition(pointerToAppended);
  			recordArea.skipKey();
  			return recordArea.readValue(reusedValue);
  		} catch (EOFException e) {
  			numSpillFiles++;
  			spillInBytes += recordArea.segments.size() * ((long) segmentSize);
  			throw e;
  		}
  
  	}
docs: Append an value into the hash map's record area.
  
  @return An BinaryRow mapping to the memory segments in the map's record area belonging to
  the newly appended value.
  @throws EOFException if the map can't allocate much more memory.