private long writeElement(long address, ByteBuffer element) { storage.writeLong(address + ELEMENT_HEADER_SEQUENCE_OFFSET, nextSequenceNumber++); storage.writeInt(address + ELEMENT_HEADER_LENGTH_OFFSET, element.remaining()); storage.writeBuffer(address + ELEMENT_HEADER_SIZE, element.duplicate()); return address; }
if (relocated >= 0) { if (relocated < target) { writeBuffer(relocated, readBuffer(target, sizeOfArea)); owner.moved(target, relocated); allocator.free(target);
private Long createAttachedChain(ByteBuffer keyBuffer, int hash, ByteBuffer elemBuffer) { long chain = storage.allocate(keyBuffer.remaining() + elemBuffer.remaining() + this.totalChainHeaderSize + ELEMENT_HEADER_SIZE); if (chain < 0) { return null; } int keySize = keyBuffer.remaining(); storage.writeInt(chain + CHAIN_HEADER_KEY_HASH_OFFSET, hash); storage.writeInt(chain + CHAIN_HEADER_KEY_LENGTH_OFFSET, Integer.MIN_VALUE | keySize); storage.writeBuffer(chain + this.totalChainHeaderSize + ELEMENT_HEADER_SIZE + elemBuffer.remaining(), keyBuffer); if (extendedChainHeaderSize > 0) { storage.writeBuffer(chain + CHAIN_HEADER_SIZE, emptyExtendedChainHeader.duplicate()); } long element = chain + this.totalChainHeaderSize; writeElement(element, elemBuffer); storage.writeLong(element + ELEMENT_HEADER_NEXT_OFFSET, chain); storage.writeLong(chain + CHAIN_HEADER_TAIL_OFFSET, element); return chain; }
if (relocated >= 0) { if (relocated < target) { writeBuffer(relocated, readBuffer(target, sizeOfArea)); owner.moved(target, relocated); allocator.free(target);
storage.writeBuffer(keyLocation, binaryKey); storage.writeBuffer(firstElementLocation, firstElementWithHeader); storage.writeBuffer(chain + CHAIN_HEADER_SIZE, emptyExtendedChainHeader.duplicate()); if (restOfElementsBuffer.hasRemaining()) { storage.writeBuffer(restOfElementsLocation, restOfElementsBuffer);
private void writeToExtendedArea(long chainAddress, int hash, ByteBuffer keyBuffer, ByteBuffer valueBuffer) { ExtendedHeaderForTest hdr = createAtExtensionAddress(chainAddress); long address = hdr.getAddress(); if (address != NULL_ENCODING) { // free previous 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()); }
public void writeBuffers(long address, ByteBuffer[] data) { for (ByteBuffer buffer : data) { int length = buffer.remaining(); writeBuffer(address, buffer); address += length; } }
public void writeBuffers(long address, ByteBuffer[] data) { for (ByteBuffer buffer : data) { int length = buffer.remaining(); writeBuffer(address, buffer); address += length; } }
@Override protected Long writeMappingBuffers(ByteBuffer keyBuffer, ByteBuffer valueBuffer, int hash) { int keyLength = keyBuffer.remaining(); int valueLength = valueBuffer.remaining(); long address = storageArea.allocate(keyLength + valueLength + HEADER_SIZE); if (address >= 0) { storageArea.writeInt(address + KEY_HASH_OFFSET, hash); storageArea.writeInt(address + KEY_LENGTH_OFFSET, keyLength); storageArea.writeInt(address + VALUE_LENGTH_OFFSET, valueLength); storageArea.writeBuffer(address + DATA_OFFSET, keyBuffer); storageArea.writeBuffer(address + DATA_OFFSET + keyLength, valueBuffer); return address; } else { return null; } }
@Override protected Long writeMappingBuffers(ByteBuffer keyBuffer, ByteBuffer valueBuffer, int hash) { int keyLength = keyBuffer.remaining(); int valueLength = valueBuffer.remaining(); long address = storageArea.allocate(keyLength + valueLength + HEADER_SIZE); if (address >= 0) { storageArea.writeInt(address + KEY_HASH_OFFSET, hash); storageArea.writeInt(address + KEY_LENGTH_OFFSET, keyLength); storageArea.writeInt(address + VALUE_LENGTH_OFFSET, valueLength); storageArea.writeBuffer(address + DATA_OFFSET, keyBuffer); storageArea.writeBuffer(address + DATA_OFFSET + keyLength, valueBuffer); return address; } else { return null; } }
@Override protected Integer writeBuffer(ByteBuffer buffer, int hash) { int length = buffer.remaining(); int address = (int) storageArea.allocate(length + HEADER_LENGTH); if (address >= 0) { storageArea.writeInt(address + KEY_HASH_OFFSET, hash); storageArea.writeInt(address + LENGTH_OFFSET, length); storageArea.writeBuffer(address + DATA_OFFSET, buffer); return address; } else { return null; } }
@Override protected Integer writeBuffer(ByteBuffer buffer, int hash) { int length = buffer.remaining(); int address = (int) storageArea.allocate(length + HEADER_LENGTH); if (address >= 0) { storageArea.writeInt(address + KEY_HASH_OFFSET, hash); storageArea.writeInt(address + LENGTH_OFFSET, length); storageArea.writeBuffer(address + DATA_OFFSET, buffer); return address; } else { return null; } }