@Override public void write(byte[] b) { write(b, 0, b.length); }
public long add(byte[] keyBytes, int keyStart, int keyLength) { boolean isKeyLengthBig = (keyLength >= SmallKeyLength.threshold); long absoluteKeyOffset = writeBuffers.getWritePoint(); if (isKeyLengthBig) { writeBuffers.writeVInt(keyLength); } writeBuffers.write(keyBytes, keyStart, keyLength); long keyRefWord = IsNonZeroFlag.flagOnMask; if (isKeyLengthBig) { keyRefWord |= SmallKeyLength.allBitsOnBitShifted; } else { keyRefWord |= ((long) keyLength) << SmallKeyLength.bitShift; } keyRefWord |= absoluteKeyOffset; // LOG.debug("VectorMapJoinFastKeyStore add keyLength " + keyLength + " absoluteKeyOffset " + absoluteKeyOffset + " keyRefWord " + Long.toHexString(keyRefWord)); return keyRefWord; }
writeBuffers.write(valueBytes, valueStart, valueLength);
/** * @param ref The ref. * @return The offset to list record pointer; list record is created if it doesn't exist. */ private long createOrGetListRecord(long ref) { if (Ref.hasList(ref)) { // LOG.info("Found list record at " + writeBuffers.getReadPoint()); return writeBuffers.getUnsafeReadPoint(); // Assumes we are here after key compare. } long firstTailOffset = Ref.getOffset(ref); // LOG.info("First tail offset to create list record is " + firstTailOffset); // Determine the length of storage for value and key lengths of the first record. writeBuffers.setUnsafeReadPoint(firstTailOffset); writeBuffers.unsafeSkipVLong(); writeBuffers.unsafeSkipVLong(); int lengthsLength = (int)(writeBuffers.getUnsafeReadPoint() - firstTailOffset); // Create the list record, copy first record value/key lengths there. writeBuffers.writeBytes(firstTailOffset, lengthsLength); long lrPtrOffset = writeBuffers.getWritePoint(); // LOG.info("Creating list record: copying " + lengthsLength + ", lrPtrOffset " + lrPtrOffset); // Reserve 5 bytes for writeValueRecord to fill. There might be junk there so null them. writeBuffers.write(FIVE_ZEROES); // Link the list record to the first element. writeBuffers.writeFiveByteULong(firstTailOffset, lrPtrOffset - lengthsLength - firstTailOffset); return lrPtrOffset; }
public void writeFiveByteULong(long v) { if (isAllInOneWriteBuffer(5)) { writePos.buffer[writePos.offset] = (byte)(v >>> 32); writePos.buffer[writePos.offset + 1] = (byte)(v >>> 24); writePos.buffer[writePos.offset + 2] = (byte)(v >>> 16); writePos.buffer[writePos.offset + 3] = (byte)(v >>> 8); writePos.buffer[writePos.offset + 4] = (byte)(v); writePos.offset += 5; } else { write((byte)(v >>> 32)); write((byte)(v >>> 24)); write((byte)(v >>> 16)); write((byte)(v >>> 8)); write((byte)(v)); } }
/** * @param ref The ref. * @return The offset to list record pointer; list record is created if it doesn't exist. */ private long createOrGetListRecord(long ref) { if (Ref.hasList(ref)) { // LOG.info("Found list record at " + writeBuffers.getReadPoint()); return writeBuffers.getUnsafeReadPoint(); // Assumes we are here after key compare. } long firstTailOffset = Ref.getOffset(ref); // LOG.info("First tail offset to create list record is " + firstTailOffset); // Determine the length of storage for value and key lengths of the first record. writeBuffers.setUnsafeReadPoint(firstTailOffset); writeBuffers.unsafeSkipVLong(); writeBuffers.unsafeSkipVLong(); int lengthsLength = (int)(writeBuffers.getUnsafeReadPoint() - firstTailOffset); // Create the list record, copy first record value/key lengths there. writeBuffers.writeBytes(firstTailOffset, lengthsLength); long lrPtrOffset = writeBuffers.getWritePoint(); // LOG.info("Creating list record: copying " + lengthsLength + ", lrPtrOffset " + lrPtrOffset); // Reserve 5 bytes for writeValueRecord to fill. There might be junk there so null them. writeBuffers.write(FIVE_ZEROES); // Link the list record to the first element. writeBuffers.writeFiveByteULong(firstTailOffset, lrPtrOffset - lengthsLength - firstTailOffset); return lrPtrOffset; }
writeBuffers.write(valueBytes, valueStart, valueLength);
public long add(byte[] keyBytes, int keyStart, int keyLength) { boolean isKeyLengthBig = (keyLength >= SmallKeyLength.threshold); long absoluteKeyOffset = writeBuffers.getWritePoint(); if (isKeyLengthBig) { writeBuffers.writeVInt(keyLength); } writeBuffers.write(keyBytes, keyStart, keyLength); long keyRefWord = IsNonZeroFlag.flagOnMask; if (isKeyLengthBig) { keyRefWord |= SmallKeyLength.allBitsOnBitShifted; } else { keyRefWord |= ((long) keyLength) << SmallKeyLength.bitShift; } keyRefWord |= absoluteKeyOffset; // LOG.debug("VectorMapJoinFastKeyStore add keyLength " + keyLength + " absoluteKeyOffset " + absoluteKeyOffset + " keyRefWord " + Long.toHexString(keyRefWord)); return keyRefWord; }
writeBuffers.write(FOUR_ZEROES);
writeBuffers.write(FOUR_ZEROES);
writeBuffers.writeVInt(keyLength); writeBuffers.write(keyBytes, keyStart, keyLength);
@Override public void write(byte[] b) { write(b, 0, b.length); }
@Override public void write(byte[] b) { write(b, 0, b.length); }
@Override public void write(byte[] b) { write(b, 0, b.length); }
@Override public void write(byte[] b) { write(b, 0, b.length); }