@Override public void close() throws IOException { // Close all buffers for (CueballStreamBuffer cueballStreamBuffer : cueballStreamBuffers) { cueballStreamBuffer.close(); } }
if (cueballStreamBuffers[i].anyRemaining()) { if (cueballStreamBufferToUse == null) { cueballStreamBufferToUse = cueballStreamBuffers[i]; cueballStreamBufferToUseIndex = i; } else { int comparison = cueballStreamBufferToUse.compareTo(cueballStreamBuffers[i]); if (comparison == 0) { cueballStreamBufferToUse.consume(); cueballStreamBufferToUse = cueballStreamBuffers[i]; cueballStreamBufferToUseIndex = i; transformer.transform(cueballStreamBufferToUse.getBuffer(), cueballStreamBufferToUse.getCurrentOffset() + keyHashSize, cueballStreamBufferToUse.getIndex()); final ByteBuffer keyHash = ByteBuffer.wrap(cueballStreamBufferToUse.getBuffer(), cueballStreamBufferToUse.getCurrentOffset(), keyHashSize); final ByteBuffer valueBytes = ByteBuffer.wrap(cueballStreamBufferToUse.getBuffer(), cueballStreamBufferToUse.getCurrentOffset() + keyHashSize, valueSize); cueballStreamBufferToUse.consume();
/** * Compare the key hash at the current position of two stream buffers * * @param other The stream buffer to compare this to * @return */ public int compareTo(CueballStreamBuffer other) { return BytesUtils.compareBytesUnsigned(uncompressedBuffer, currentOffset, other.uncompressedBuffer, other.getCurrentOffset(), keyHashSize); }
public CueballStreamBufferMergeSort(CueballFilePath cueballBase, List<CueballFilePath> cueballDeltas, int keyHashSize, int valueSize, int hashIndexBits, CueballCompressionCodec compressionCodec, ValueTransformer transformer) throws IOException { this.keyHashSize = keyHashSize; this.valueSize = valueSize; this.transformer = transformer; cueballStreamBuffers = new CueballStreamBuffer[cueballDeltas.size() + 1]; // Open the base CueballStreamBuffer cueballBaseStreamBuffer = new CueballStreamBuffer(cueballBase.getPath(), 0, keyHashSize, valueSize, hashIndexBits, compressionCodec); cueballStreamBuffers[0] = cueballBaseStreamBuffer; // Open all the deltas int i = 1; for (CueballFilePath delta : cueballDeltas) { CueballStreamBuffer cueballStreamBuffer = new CueballStreamBuffer(delta.getPath(), i, keyHashSize, valueSize, hashIndexBits, compressionCodec); cueballStreamBuffers[i++] = cueballStreamBuffer; } }