/** Update the required space. */ void finish() { if (max > min) { spaceInBits += DirectWriter.unsignedBitsRequired(max - min) * numValues; } }
meta.writeByte((byte) 0); } else { final int bitsRequired = DirectWriter.unsignedBitsRequired(maxDelta); DirectWriter writer = DirectWriter.getInstance(data, bufferSize, bitsRequired); for (int i = 0; i < bufferSize; ++i) {
if (uniqueValues != null && uniqueValues.size() > 1 && DirectWriter.unsignedBitsRequired(uniqueValues.size() - 1) < DirectWriter.unsignedBitsRequired((max - min) / gcd)) { numBitsPerValue = DirectWriter.unsignedBitsRequired(uniqueValues.size() - 1); final Long[] sortedUniqueValues = uniqueValues.toArray(new Long[0]); Arrays.sort(sortedUniqueValues); meta.writeInt(-2 - NUMERIC_BLOCK_SHIFT); } else { numBitsPerValue = DirectWriter.unsignedBitsRequired((max - min) / gcd); if (gcd == 1 && min > 0 && DirectWriter.unsignedBitsRequired(max) == DirectWriter.unsignedBitsRequired(max - min)) { min = 0;
private void writeBlock(long[] values, int length, long gcd, GrowableByteArrayDataOutput buffer) throws IOException { assert length > 0; long min = values[0]; long max = values[0]; for (int i = 1; i < length; ++i) { final long v = values[i]; assert Math.floorMod(values[i] - min, gcd) == 0; min = Math.min(min, v); max = Math.max(max, v); } if (min == max) { data.writeByte((byte) 0); data.writeLong(min); } else { final int bitsPerValue = DirectWriter.unsignedBitsRequired(max - min); buffer.reset(); assert buffer.getPosition() == 0; final DirectWriter w = DirectWriter.getInstance(buffer, length, bitsPerValue); for (int i = 0; i < length; ++i) { w.add((values[i] - min) / gcd); } w.finish(); data.writeByte((byte) bitsPerValue); data.writeLong(min); data.writeInt(buffer.getPosition()); data.writeBytes(buffer.getBytes(), buffer.getPosition()); } }
meta.writeLong(0L); } else { int numberOfBitsPerOrd = DirectWriter.unsignedBitsRequired(values.getValueCount() - 1); meta.writeByte((byte) numberOfBitsPerOrd); long start = data.getFilePointer();
int numberOfBitsPerOrd = DirectWriter.unsignedBitsRequired(values.getValueCount() - 1); meta.writeByte((byte) numberOfBitsPerOrd); long start = data.getFilePointer();
/** Update the required space. */ void finish() { if (max > min) { spaceInBits += DirectWriter.unsignedBitsRequired(max - min) * numValues; } }
meta.writeByte((byte) 0); } else { final int bitsRequired = DirectWriter.unsignedBitsRequired(maxDelta); DirectWriter writer = DirectWriter.getInstance(data, bufferSize, bitsRequired); for (int i = 0; i < bufferSize; ++i) {
meta.writeByte((byte) 0); } else { final int bitsRequired = DirectWriter.unsignedBitsRequired(maxDelta); DirectWriter writer = DirectWriter.getInstance(data, bufferSize, bitsRequired); for (int i = 0; i < bufferSize; ++i) {
meta.writeByte((byte) 0); } else { final int bitsRequired = DirectWriter.unsignedBitsRequired(maxDelta); DirectWriter writer = DirectWriter.getInstance(data, bufferSize, bitsRequired); for (int i = 0; i < bufferSize; ++i) {
final int deltaBitsRequired = DirectWriter.unsignedBitsRequired(delta); final int tableBitsRequired = uniqueValues == null ? Integer.MAX_VALUE } else if (gcd != 0 && gcd != 1) { final long gcdDelta = (maxValue - minValue) / gcd; final long gcdBitsRequired = DirectWriter.unsignedBitsRequired(gcdDelta); format = gcdBitsRequired < deltaBitsRequired ? GCD_COMPRESSED : DELTA_COMPRESSED; } else { meta.writeLong(gcd); final long maxDelta = (maxValue - minValue) / gcd; final int bits = DirectWriter.unsignedBitsRequired(maxDelta); meta.writeVInt(bits); final DirectWriter quotientWriter = DirectWriter.getInstance(data, count, bits);
final int deltaBitsRequired = DirectWriter.unsignedBitsRequired(delta); final int tableBitsRequired = uniqueValues == null ? Integer.MAX_VALUE } else if (gcd != 0 && gcd != 1) { final long gcdDelta = (maxValue - minValue) / gcd; final long gcdBitsRequired = DirectWriter.unsignedBitsRequired(gcdDelta); format = gcdBitsRequired < deltaBitsRequired ? GCD_COMPRESSED : DELTA_COMPRESSED; } else { meta.writeLong(gcd); final long maxDelta = (maxValue - minValue) / gcd; final int bits = DirectWriter.unsignedBitsRequired(maxDelta); meta.writeVInt(bits); final DirectWriter quotientWriter = DirectWriter.getInstance(data, count, bits);
final int deltaBitsRequired = DirectWriter.unsignedBitsRequired(delta); final int tableBitsRequired = uniqueValues == null ? Integer.MAX_VALUE } else if (gcd != 0 && gcd != 1) { final long gcdDelta = (maxValue - minValue) / gcd; final long gcdBitsRequired = DirectWriter.unsignedBitsRequired(gcdDelta); format = gcdBitsRequired < deltaBitsRequired ? GCD_COMPRESSED : DELTA_COMPRESSED; } else { meta.writeLong(gcd); final long maxDelta = (maxValue - minValue) / gcd; final int bits = DirectWriter.unsignedBitsRequired(maxDelta); meta.writeVInt(bits); final DirectWriter quotientWriter = DirectWriter.getInstance(data, count, bits);
final int deltaBitsRequired = DirectWriter.unsignedBitsRequired(delta); final int tableBitsRequired = uniqueValues == null ? Integer.MAX_VALUE } else if (gcd != 0 && gcd != 1) { final long gcdDelta = (maxValue - minValue) / gcd; final long gcdBitsRequired = DirectWriter.unsignedBitsRequired(gcdDelta); format = gcdBitsRequired < deltaBitsRequired ? GCD_COMPRESSED : DELTA_COMPRESSED; } else { meta.writeLong(gcd); final long maxDelta = (maxValue - minValue) / gcd; final int bits = DirectWriter.unsignedBitsRequired(maxDelta); meta.writeVInt(bits); final DirectWriter quotientWriter = DirectWriter.getInstance(data, count, bits);
final int deltaBitsRequired = DirectWriter.unsignedBitsRequired(delta); final int tableBitsRequired = uniqueValues == null ? Integer.MAX_VALUE } else if (gcd != 0 && gcd != 1) { final long gcdDelta = (maxValue - minValue) / gcd; final long gcdBitsRequired = DirectWriter.unsignedBitsRequired(gcdDelta); format = gcdBitsRequired < deltaBitsRequired ? GCD_COMPRESSED : DELTA_COMPRESSED; } else { meta.writeLong(gcd); final long maxDelta = (maxValue - minValue) / gcd; final int bits = DirectWriter.unsignedBitsRequired(maxDelta); meta.writeVInt(bits); final DirectWriter quotientWriter = DirectWriter.getInstance(data, count, bits);
final int deltaBitsRequired = DirectWriter.unsignedBitsRequired(delta); final int tableBitsRequired = uniqueValues == null ? Integer.MAX_VALUE } else if (gcd != 0 && gcd != 1) { final long gcdDelta = (maxValue - minValue) / gcd; final long gcdBitsRequired = DirectWriter.unsignedBitsRequired(gcdDelta); format = gcdBitsRequired < deltaBitsRequired ? GCD_COMPRESSED : DELTA_COMPRESSED; } else { meta.writeLong(gcd); final long maxDelta = (maxValue - minValue) / gcd; final int bits = DirectWriter.unsignedBitsRequired(maxDelta); meta.writeVInt(bits); final DirectWriter quotientWriter = DirectWriter.getInstance(data, count, bits);
if (uniqueValues != null && uniqueValues.size() > 1 && DirectWriter.unsignedBitsRequired(uniqueValues.size() - 1) < DirectWriter.unsignedBitsRequired((max - min) / gcd)) { numBitsPerValue = DirectWriter.unsignedBitsRequired(uniqueValues.size() - 1); final Long[] sortedUniqueValues = uniqueValues.toArray(new Long[0]); Arrays.sort(sortedUniqueValues); meta.writeInt(-2 - NUMERIC_BLOCK_SHIFT); } else { numBitsPerValue = DirectWriter.unsignedBitsRequired((max - min) / gcd); if (gcd == 1 && min > 0 && DirectWriter.unsignedBitsRequired(max) == DirectWriter.unsignedBitsRequired(max - min)) { min = 0;
private void writeBlock(long[] values, int length, long gcd, GrowableByteArrayDataOutput buffer) throws IOException { assert length > 0; long min = values[0]; long max = values[0]; for (int i = 1; i < length; ++i) { final long v = values[i]; assert Math.floorMod(values[i] - min, gcd) == 0; min = Math.min(min, v); max = Math.max(max, v); } if (min == max) { data.writeByte((byte) 0); data.writeLong(min); } else { final int bitsPerValue = DirectWriter.unsignedBitsRequired(max - min); buffer.reset(); assert buffer.getPosition() == 0; final DirectWriter w = DirectWriter.getInstance(buffer, length, bitsPerValue); for (int i = 0; i < length; ++i) { w.add((values[i] - min) / gcd); } w.finish(); data.writeByte((byte) bitsPerValue); data.writeLong(min); data.writeInt(buffer.getPosition()); data.writeBytes(buffer.getBytes(), buffer.getPosition()); } }
meta.writeLong(0L); } else { int numberOfBitsPerOrd = DirectWriter.unsignedBitsRequired(values.getValueCount() - 1); meta.writeByte((byte) numberOfBitsPerOrd); long start = data.getFilePointer();
int numberOfBitsPerOrd = DirectWriter.unsignedBitsRequired(values.getValueCount() - 1); meta.writeByte((byte) numberOfBitsPerOrd); long start = data.getFilePointer();