private void writeToExtendedArea(long chainAddress, int hash, ByteBuffer keyBuffer, ByteBuffer valueBuffer) {
ExtendedHeaderForTest hdr = createAtExtensionAddress(chainAddress);
long address = hdr.getAddress();
if (address != NULL_ENCODING) {
extendedArea.free(address);
} else {
chainAddresses.add(chainAddress);
}
int size = (2 * Integer.BYTES) + keyBuffer.remaining() + valueBuffer.remaining();
address = extendedArea.allocate(size);
hdr.setAddress(address);
hdr.setHashAndSize(hash, size);
extendedArea.writeInt(address + STORAGE_KEY_LENGTH_OFFSET, keyBuffer.remaining());
extendedArea.writeInt(address + STORAGE_VALUE_LENGTH_OFFSET, valueBuffer.remaining());
extendedArea.writeBuffer(address + STORAGE_HEADER_OFFSET, keyBuffer.duplicate());
extendedArea.writeBuffer(address + STORAGE_HEADER_OFFSET + keyBuffer.remaining(), valueBuffer.duplicate());
}