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();