@Override public void setLong(int offset, long value) { if (offset < 0 || offset >= extendedChainHeaderSize) { throw new IllegalArgumentException("Offset not within bounds 0 >= " + offset + " < " + extendedChainHeaderSize); } else { storage.writeLong(toExtensionAddress(chainAddress) + offset, value); } }
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; }
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; }
storage.writeLong(chain + CHAIN_HEADER_TAIL_OFFSET, firstElementLocation); storage.writeLong(firstElementLocation + ELEMENT_HEADER_NEXT_OFFSET, chain); } else { storage.writeLong(firstElementLocation + ELEMENT_HEADER_NEXT_OFFSET, restOfElementsLocation); long currentLocation = restOfElementsLocation; int i = 0; final int adjustedLength = Integer.MIN_VALUE | elemLength; long nextLocation = currentLocation + elemLength + ELEMENT_HEADER_SIZE; storage.writeLong(currentLocation + ELEMENT_HEADER_NEXT_OFFSET, nextLocation); storage.writeLong(currentLocation + ELEMENT_HEADER_NEXT_OFFSET, chain); storage.writeInt(currentLocation + ELEMENT_HEADER_LENGTH_OFFSET, adjustedLength); storage.writeLong(chain + CHAIN_HEADER_TAIL_OFFSET, currentLocation);
private void backward(long p, long value) { storage.writeLong(p + (3 * SIZE_T_SIZE), value); }
private void forward(long p, long value) { storage.writeLong(p + (2 * SIZE_T_SIZE), value); }
private void prevFoot(long p, long value) { storage.writeLong(p, value); }
private void forward(long p, long value) { storage.writeLong(p + (2 * SIZE_T_SIZE), value); }
private void head(long p, long value) { storage.writeLong(p + SIZE_T_SIZE, value); }
private void parent(long p, long value) { storage.writeLong(p + (6 * SIZE_T_SIZE), value); }
private void prevFoot(long p, long value) { storage.writeLong(p, value); }
private void head(long p, long value) { storage.writeLong(p + SIZE_T_SIZE, value); }
private void parent(long p, long value) { storage.writeLong(p + (6 * SIZE_T_SIZE), value); }
private void backward(long p, long value) { storage.writeLong(p + (3 * SIZE_T_SIZE), value); }
@Override public void setLong(int offset, long value) { if (offset < 0 || offset > max) { throw new IllegalArgumentException(); } else { storageArea.writeLong(address + offset, value); } }
@Override public void setLong(int offset, long value) { if (offset < 0 || offset > max) { throw new IllegalArgumentException(); } else { storageArea.writeLong(address + offset, value); } }
@FindbugsSuppressWarnings("ICAST_INTEGER_MULTIPLY_CAST_TO_LONG") private void child(long p, int index, long value) { storage.writeLong(p + ((4 + index) * SIZE_T_SIZE), value); }
@FindbugsSuppressWarnings("ICAST_INTEGER_MULTIPLY_CAST_TO_LONG") private void child(long p, int index, long value) { storage.writeLong(p + ((4 + index) * SIZE_T_SIZE), value); }