@Override public long get(long index) { assert index >= 0 && index < valueCount; final int block = (int) (index >>> blockShift); final int idx = (int) (index & blockMask); return expected(minValues[block], averages[block], idx) + subReaders[block].get(idx); }
@Override int decodeBlock(int block, long[] dest) { final int count = super.decodeBlock(block, dest); final float average = averages[block]; for (int i = 0; i < count; ++i) { dest[i] += expected(0, average, i); } return count; }
@Override void pack(long[] values, int numValues, int block, float acceptableOverheadRatio) { final float average = numValues == 1 ? 0 : (float) (values[numValues - 1] - values[0]) / (numValues - 1); for (int i = 0; i < numValues; ++i) { values[i] -= expected(0, average, i); } super.pack(values, numValues, block, acceptableOverheadRatio); averages[block] = average; }
@Override long get(int block, int element) { return expected(mins[block], averages[block], element) + values[block].get(element); }
protected void flush() throws IOException { assert off > 0; final float avg = off == 1 ? 0f : (float) (values[off - 1] - values[0]) / (off - 1); long min = values[0]; // adjust min so that all deltas will be positive for (int i = 1; i < off; ++i) { final long actual = values[i]; final long expected = expected(min, avg, i); if (expected > actual) { min -= (expected - actual); } } long maxDelta = 0; for (int i = 0; i < off; ++i) { values[i] = values[i] - expected(min, avg, i); maxDelta = Math.max(maxDelta, values[i]); } out.writeZLong(min); out.writeInt(Float.floatToIntBits(avg)); if (maxDelta == 0) { out.writeVInt(0); } else { final int bitsRequired = PackedInts.bitsRequired(maxDelta); out.writeVInt(bitsRequired); writeValues(bitsRequired); } off = 0; }
@Override void pack(long[] values, int numValues, int block, float acceptableOverheadRatio) { final float average = numValues == 1 ? 0 : (float) (values[numValues - 1] - values[0]) / (numValues - 1); for (int i = 0; i < numValues; ++i) { values[i] -= expected(0, average, i); } super.pack(values, numValues, block, acceptableOverheadRatio); averages[block] = average; }
@Override int decodeBlock(int block, long[] dest) { final int count = super.decodeBlock(block, dest); final float average = averages[block]; for (int i = 0; i < count; ++i) { dest[i] += expected(0, average, i); } return count; }
@Override int decodeBlock(int block, long[] dest) { final int count = super.decodeBlock(block, dest); final float average = averages[block]; for (int i = 0; i < count; ++i) { dest[i] += expected(0, average, i); } return count; }
@Override void pack(long[] values, int numValues, int block, float acceptableOverheadRatio) { final float average = numValues == 1 ? 0 : (float) (values[numValues - 1] - values[0]) / (numValues - 1); for (int i = 0; i < numValues; ++i) { values[i] -= expected(0, average, i); } super.pack(values, numValues, block, acceptableOverheadRatio); averages[block] = average; }
@Override public long get(long index) { assert index >= 0 && index < valueCount; final int block = (int) (index >>> blockShift); final int idx = (int) (index & blockMask); return expected(minValues[block], averages[block], idx) + subReaders[block].get(idx); }
@Override void pack(long[] values, int numValues, int block, float acceptableOverheadRatio) { final float average = numValues == 1 ? 0 : (float) (values[numValues - 1] - values[0]) / (numValues - 1); for (int i = 0; i < numValues; ++i) { values[i] -= expected(0, average, i); } super.pack(values, numValues, block, acceptableOverheadRatio); averages[block] = average; }
@Override int decodeBlock(int block, long[] dest) { final int count = super.decodeBlock(block, dest); final float average = averages[block]; for (int i = 0; i < count; ++i) { dest[i] += expected(0, average, i); } return count; }
@Override long get(int block, int element) { return expected(mins[block], averages[block], element) + values[block].get(element); }
@Override long get(int block, int element) { return expected(mins[block], averages[block], element) + values[block].get(element); }
@Override long get(int block, int element) { return expected(mins[block], averages[block], element) + values[block].get(element); }
@Override public long get(long index) { assert index >= 0 && index < valueCount; final int block = (int) (index >>> blockShift); final int idx = (int) (index & blockMask); return expected(minValues[block], averages[block], idx) + decodeDelta(subReaders[block].get(idx)); }
@Override public long get(long index) { assert index >= 0 && index < valueCount; final int block = (int) (index >>> blockShift); final int idx = (int) (index & blockMask); return expected(minValues[block], averages[block], idx) + decodeDelta(subReaders[block].get(idx)); }
protected void flush() throws IOException { assert off > 0; final float avg = off == 1 ? 0f : (float) (values[off - 1] - values[0]) / (off - 1); long min = values[0]; // adjust min so that all deltas will be positive for (int i = 1; i < off; ++i) { final long actual = values[i]; final long expected = expected(min, avg, i); if (expected > actual) { min -= (expected - actual); } } long maxDelta = 0; for (int i = 0; i < off; ++i) { values[i] = values[i] - expected(min, avg, i); maxDelta = Math.max(maxDelta, values[i]); } out.writeZLong(min); out.writeInt(Float.floatToIntBits(avg)); if (maxDelta == 0) { out.writeVInt(0); } else { final int bitsRequired = PackedInts.bitsRequired(maxDelta); out.writeVInt(bitsRequired); writeValues(bitsRequired); } off = 0; }
protected void flush() throws IOException { assert off > 0; final float avg = off == 1 ? 0f : (float) (values[off - 1] - values[0]) / (off - 1); long min = values[0]; // adjust min so that all deltas will be positive for (int i = 1; i < off; ++i) { final long actual = values[i]; final long expected = expected(min, avg, i); if (expected > actual) { min -= (expected - actual); } } long maxDelta = 0; for (int i = 0; i < off; ++i) { values[i] = values[i] - expected(min, avg, i); maxDelta = Math.max(maxDelta, values[i]); } out.writeZLong(min); out.writeInt(Float.floatToIntBits(avg)); if (maxDelta == 0) { out.writeVInt(0); } else { final int bitsRequired = PackedInts.bitsRequired(maxDelta); out.writeVInt(bitsRequired); writeValues(bitsRequired); } off = 0; }
protected void flush() throws IOException { assert off > 0; final float avg = off == 1 ? 0f : (float) (values[off - 1] - values[0]) / (off - 1); long min = values[0]; // adjust min so that all deltas will be positive for (int i = 1; i < off; ++i) { final long actual = values[i]; final long expected = expected(min, avg, i); if (expected > actual) { min -= (expected - actual); } } long maxDelta = 0; for (int i = 0; i < off; ++i) { values[i] = values[i] - expected(min, avg, i); maxDelta = Math.max(maxDelta, values[i]); } out.writeZLong(min); out.writeInt(Float.floatToIntBits(avg)); if (maxDelta == 0) { out.writeVInt(0); } else { final int bitsRequired = PackedInts.bitsRequired(maxDelta); out.writeVInt(bitsRequired); writeValues(bitsRequired); } off = 0; }