You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jp...@apache.org on 2012/11/16 15:40:06 UTC
svn commit: r1410371 - in /lucene/dev/branches/lucene4547/lucene/core/src:
java/org/apache/lucene/util/packed/AppendingLongBuffer.java
test/org/apache/lucene/util/packed/TestPackedInts.java
Author: jpountz
Date: Fri Nov 16 14:40:05 2012
New Revision: 1410371
URL: http://svn.apache.org/viewvc?rev=1410371&view=rev
Log:
AppendingLongBuffer: better handle the "all values equal" case.
Modified:
lucene/dev/branches/lucene4547/lucene/core/src/java/org/apache/lucene/util/packed/AppendingLongBuffer.java
lucene/dev/branches/lucene4547/lucene/core/src/test/org/apache/lucene/util/packed/TestPackedInts.java
Modified: lucene/dev/branches/lucene4547/lucene/core/src/java/org/apache/lucene/util/packed/AppendingLongBuffer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/core/src/java/org/apache/lucene/util/packed/AppendingLongBuffer.java?rev=1410371&r1=1410370&r2=1410371&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/core/src/java/org/apache/lucene/util/packed/AppendingLongBuffer.java (original)
+++ lucene/dev/branches/lucene4547/lucene/core/src/java/org/apache/lucene/util/packed/AppendingLongBuffer.java Fri Nov 16 14:40:05 2012
@@ -73,25 +73,26 @@ public class AppendingLongBuffer {
}
final long delta = maxValue - minValue;
- // build a new packed reader
- final int bitsRequired = delta < 0 ? 64 : PackedInts.bitsRequired(delta);
- for (int i = 0; i < pendingOff; ++i) {
- pending[i] -= minValue;
- }
- final PackedInts.Mutable mutable = PackedInts.getMutable(pendingOff, bitsRequired, PackedInts.COMPACT);
- for (int i = 0; i < pendingOff; ) {
- i += mutable.set(i, pending, i, pendingOff - i);
- }
-
- // store it
minValues[valuesOff] = minValue;
- values[valuesOff] = mutable;
+ if (delta != 0) {
+ // build a new packed reader
+ final int bitsRequired = delta < 0 ? 64 : PackedInts.bitsRequired(delta);
+ for (int i = 0; i < pendingOff; ++i) {
+ pending[i] -= minValue;
+ }
+ final PackedInts.Mutable mutable = PackedInts.getMutable(pendingOff, bitsRequired, PackedInts.COMPACT);
+ for (int i = 0; i < pendingOff; ) {
+ i += mutable.set(i, pending, i, pendingOff - i);
+ }
+ values[valuesOff] = mutable;
+ }
++valuesOff;
// reset pending buffer
pendingOff = 0;
}
+ /** Get the number of values that have been added to the buffer. */
public int size() {
return valuesOff * MAX_PENDING_COUNT + pendingOff;
}
@@ -120,6 +121,8 @@ public class AppendingLongBuffer {
private void fillValues() {
if (vOff == valuesOff) {
currentValues = pending;
+ } else if (values[vOff] == null) {
+ Arrays.fill(currentValues, minValues[vOff]);
} else {
for (int k = 0; k < MAX_PENDING_COUNT; ++k) {
k += values[vOff].get(k, currentValues, k, MAX_PENDING_COUNT - k);
@@ -164,7 +167,9 @@ public class AppendingLongBuffer {
+ RamUsageEstimator.alignObjectSize(RamUsageEstimator.NUM_BYTES_ARRAY_HEADER + (long) RamUsageEstimator.NUM_BYTES_OBJECT_REF * values.length); // values
for (int i = 0; i < valuesOff; ++i) {
- bytesUsed += values[i].ramBytesUsed();
+ if (values[i] != null) {
+ bytesUsed += values[i].ramBytesUsed();
+ }
}
return bytesUsed;
}
Modified: lucene/dev/branches/lucene4547/lucene/core/src/test/org/apache/lucene/util/packed/TestPackedInts.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4547/lucene/core/src/test/org/apache/lucene/util/packed/TestPackedInts.java?rev=1410371&r1=1410370&r2=1410371&view=diff
==============================================================================
--- lucene/dev/branches/lucene4547/lucene/core/src/test/org/apache/lucene/util/packed/TestPackedInts.java (original)
+++ lucene/dev/branches/lucene4547/lucene/core/src/test/org/apache/lucene/util/packed/TestPackedInts.java Fri Nov 16 14:40:05 2012
@@ -805,7 +805,7 @@ public class TestPackedInts extends Luce
} else {
final long minValue = _TestUtil.nextLong(random(), Long.MIN_VALUE, Long.MAX_VALUE - PackedInts.maxValue(bpv));
for (int i = 0; i < arr.length; ++i) {
- arr[i] = minValue + random().nextLong() & PackedInts.maxValue(bpv);
+ arr[i] = minValue + random().nextLong() & PackedInts.maxValue(bpv); // _TestUtil.nextLong is too slow
}
}
AppendingLongBuffer buf = new AppendingLongBuffer();