You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2011/02/10 16:47:57 UTC

svn commit: r1069435 - in /lucene/dev/branches/bulkpostings/lucene/src: java/org/apache/lucene/index/codecs/ java/org/apache/lucene/index/codecs/simple64/ test/org/apache/lucene/index/codecs/simple64/

Author: rmuir
Date: Thu Feb 10 15:47:56 2011
New Revision: 1069435

URL: http://svn.apache.org/viewvc?rev=1069435&view=rev
Log:
LUCENE-2886: optimize Simple64Var, remove simple64-fixed, rename Simple64Var to Simple64

Added:
    lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/simple64/Simple64Codec.java
      - copied, changed from r1069395, lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/simple64/Simple64VarIntCodec.java
    lucene/dev/branches/bulkpostings/lucene/src/test/org/apache/lucene/index/codecs/simple64/Simple64Test.java
      - copied, changed from r1069395, lucene/dev/branches/bulkpostings/lucene/src/test/org/apache/lucene/index/codecs/simple64/Simple64VarIntTest.java
Removed:
    lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/simple64/Simple64VarIntCodec.java
    lucene/dev/branches/bulkpostings/lucene/src/test/org/apache/lucene/index/codecs/simple64/Simple64VarIntTest.java
Modified:
    lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/CodecProvider.java
    lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/simple64/Simple64.java

Modified: lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/CodecProvider.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/CodecProvider.java?rev=1069435&r1=1069434&r2=1069435&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/CodecProvider.java (original)
+++ lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/CodecProvider.java Thu Feb 10 15:47:56 2011
@@ -27,7 +27,7 @@ import org.apache.lucene.index.codecs.bu
 import org.apache.lucene.index.codecs.preflex.PreFlexCodec;
 import org.apache.lucene.index.codecs.pulsing.PulsingCodec;
 import org.apache.lucene.index.codecs.simple64.Simple64Codec;
-import org.apache.lucene.index.codecs.simple64.Simple64VarIntCodec;
+import org.apache.lucene.index.codecs.simple64.Simple64Codec;
 import org.apache.lucene.index.codecs.simpletext.SimpleTextCodec;
 import org.apache.lucene.index.codecs.standard.StandardCodec;
 import org.apache.lucene.index.codecs.pfordelta.PatchedFrameOfRefCodec;
@@ -53,7 +53,7 @@ public class CodecProvider {
 
   private final Set<String> knownExtensions = new HashSet<String>();
 
-  public final static String[] CORE_CODECS = new String[] {"Standard", "Pulsing", "PreFlex", "SimpleText", "PatchedFrameOfRef", "FrameOfRef", "PatchedFrameOfRef2", "BulkVInt", "Simple64", "Simple64VarInt"};
+  public final static String[] CORE_CODECS = new String[] {"Standard", "Pulsing", "PreFlex", "SimpleText", "PatchedFrameOfRef", "FrameOfRef", "PatchedFrameOfRef2", "BulkVInt", "Simple64" };
 
   public synchronized void register(Codec codec) {
     if (codec.name == null) {
@@ -180,7 +180,6 @@ class DefaultCodecProvider extends Codec
     register(new FrameOfRefCodec());
     register(new PForDeltaFixedIntBlockCodec(128));
     register(new BulkVIntCodec(128));
-    register(new Simple64Codec(128));
-    register(new Simple64VarIntCodec());
+    register(new Simple64Codec(4));
   }
 }

Modified: lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/simple64/Simple64.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/simple64/Simple64.java?rev=1069435&r1=1069434&r2=1069435&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/simple64/Simple64.java (original)
+++ lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/simple64/Simple64.java Thu Feb 10 15:47:56 2011
@@ -17,12 +17,12 @@
 
 package org.apache.lucene.index.codecs.simple64;
 
-import java.nio.LongBuffer;
+import java.nio.IntBuffer;
 
 public class Simple64 {
 
   protected int compressedSize = 0;
-  protected LongBuffer compressedBuffer;
+  protected IntBuffer compressedBuffer;
 
   /** Uncompressed data */
   protected int[] unCompressedData;
@@ -31,7 +31,7 @@ public class Simple64 {
   /** Size of unCompressedData, -1 when not available. */
   protected int unComprSize = -1;
 
-  public void setCompressedBuffer(final LongBuffer compressedBuffer) {
+  public void setCompressedBuffer(final IntBuffer compressedBuffer) {
     this.compressedBuffer = compressedBuffer;
   }
 
@@ -48,20 +48,20 @@ public class Simple64 {
 
   private static final int NUM_DATA_BITS = 60;
   private static final long BITS_60_MASK = (1L << 60) - 1;
-  private static final long BITS_30_MASK = (1 << 30) - 1;
-  private static final long BITS_20_MASK = (1 << 20) - 1;
-  private static final long BITS_15_MASK = (1 << 15) - 1;
-  private static final long BITS_12_MASK = (1 << 12) - 1;
-  private static final long BITS_11_MASK = (1 << 11) - 1;
-  private static final long BITS_10_MASK = (1 << 10) - 1;
-  private static final long BITS_8_MASK = (1 << 8) - 1; // 4 bits unused, then the last value take them
-  private static final long BITS_7_MASK = (1 << 7) - 1; // 4 bits unused, then the last value take them
-  private static final long BITS_6_MASK = (1 << 6) - 1;
-  private static final long BITS_5_MASK = (1 << 5) - 1;
-  private static final long BITS_4_MASK = (1 << 4) - 1;
-  private static final long BITS_3_MASK = (1 << 3) - 1;
-  private static final long BITS_2_MASK = (1 << 2) - 1;
-  private static final long BITS_1_MASK = (1 << 1) - 1;
+  private static final int BITS_30_MASK = (1 << 30) - 1;
+  private static final int BITS_20_MASK = (1 << 20) - 1;
+  private static final int BITS_15_MASK = (1 << 15) - 1;
+  private static final int BITS_12_MASK = (1 << 12) - 1;
+  private static final int BITS_11_MASK = (1 << 11) - 1;
+  private static final int BITS_10_MASK = (1 << 10) - 1;
+  private static final int BITS_8_MASK = (1 << 8) - 1; // 4 bits unused, then the last value take them
+  private static final int BITS_7_MASK = (1 << 7) - 1; // 4 bits unused, then the last value take them
+  private static final int BITS_6_MASK = (1 << 6) - 1;
+  private static final int BITS_5_MASK = (1 << 5) - 1;
+  private static final int BITS_4_MASK = (1 << 4) - 1;
+  private static final int BITS_3_MASK = (1 << 3) - 1;
+  private static final int BITS_2_MASK = (1 << 2) - 1;
+  private static final int BITS_1_MASK = (1 << 1) - 1;
 
   private static final int STATUS_1NUM_60BITS = 14;
   private static final int STATUS_2NUM_30BITS = 13;
@@ -434,7 +434,7 @@ public class Simple64 {
     return 0;
   }
 
-  public static int compressSingle(final int[] uncompressed, final int inOffset, final int inSize, final LongBuffer compressedBuffer, final int outOffset) {
+  public static int compressSingle(final int[] uncompressed, final int inOffset, final int inSize, final IntBuffer compressedBuffer, final int outOffset) {
     if (inSize < 1) {
       throw new IllegalArgumentException("Cannot compress input with non positive size " + inSize);
     }
@@ -489,20 +489,23 @@ public class Simple64 {
     case 60:
       s9 = STATUS_1NUM_60BITS;
       s9 |= (long) (uncompressed[inOffset]) << 4;
-      compressedBuffer.put(outOffset, s9);
+      compressedBuffer.put(outOffset, (int) (s9 >> 32));
+      compressedBuffer.put(outOffset+1, (int) s9);
       return 1;
     case 30:
       s9 = STATUS_2NUM_30BITS;
       s9 |= (long) (uncompressed[inOffset]) << 4;
       s9 |= (long) (uncompressed[inOffset+1]) << 34;
-      compressedBuffer.put(outOffset, s9);
+      compressedBuffer.put(outOffset, (int) (s9 >> 32));
+      compressedBuffer.put(outOffset+1, (int) s9);
       return 2;
     case 20:
       s9 = STATUS_3NUM_20BITS;
       s9 |= (long) (uncompressed[inOffset]) << 4;
       s9 |= (long) (uncompressed[inOffset+1]) << 24;
       s9 |= (long) (uncompressed[inOffset+2]) << 44;
-      compressedBuffer.put(outOffset, s9);
+      compressedBuffer.put(outOffset, (int) (s9 >> 32));
+      compressedBuffer.put(outOffset+1, (int) s9);
       return 3;
     case 15:
       s9 = STATUS_4NUM_15BITS;
@@ -510,7 +513,8 @@ public class Simple64 {
       s9 |= (long) (uncompressed[inOffset+1]) << 19;
       s9 |= (long) (uncompressed[inOffset+2]) << 34;
       s9 |= (long) (uncompressed[inOffset+3]) << 49;
-      compressedBuffer.put(outOffset, s9);
+      compressedBuffer.put(outOffset, (int) (s9 >> 32));
+      compressedBuffer.put(outOffset+1, (int) s9);
       return 4;
     case 12:
       s9 = STATUS_5NUM_12BITS;
@@ -519,7 +523,8 @@ public class Simple64 {
       s9 |= (long) (uncompressed[inOffset+2]) << 28;
       s9 |= (long) (uncompressed[inOffset+3]) << 40;
       s9 |= (long) (uncompressed[inOffset+4]) << 52;
-      compressedBuffer.put(outOffset, s9);
+      compressedBuffer.put(outOffset, (int) (s9 >> 32));
+      compressedBuffer.put(outOffset+1, (int) s9);
       return 5;
     case 10:
       s9 = STATUS_6NUM_10BITS;
@@ -529,7 +534,8 @@ public class Simple64 {
       s9 |= (long) (uncompressed[inOffset+3]) << 34;
       s9 |= (long) (uncompressed[inOffset+4]) << 44;
       s9 |= (long) (uncompressed[inOffset+5]) << 54;
-      compressedBuffer.put(outOffset, s9);
+      compressedBuffer.put(outOffset, (int) (s9 >> 32));
+      compressedBuffer.put(outOffset+1, (int) s9);
       return 6;
     case 8:
       s9 = STATUS_7NUM_8BITS;
@@ -540,7 +546,8 @@ public class Simple64 {
       s9 |= (long) (uncompressed[inOffset+4]) << 36;
       s9 |= (long) (uncompressed[inOffset+5]) << 44;
       s9 |= (long) (uncompressed[inOffset+6]) << 52; // 4 more bits
-      compressedBuffer.put(outOffset, s9);
+      compressedBuffer.put(outOffset, (int) (s9 >> 32));
+      compressedBuffer.put(outOffset+1, (int) s9);
       return 7;
     case 7:
       s9 = STATUS_8NUM_7BITS;
@@ -552,7 +559,8 @@ public class Simple64 {
       s9 |= (long) (uncompressed[inOffset+5]) << 39;
       s9 |= (long) (uncompressed[inOffset+6]) << 46;
       s9 |= (long) (uncompressed[inOffset+7]) << 53; // 4 more bits
-      compressedBuffer.put(outOffset, s9);
+      compressedBuffer.put(outOffset, (int) (s9 >> 32));
+      compressedBuffer.put(outOffset+1, (int) s9);
       return 8;
     case 6:
       s9 = STATUS_10NUM_6BITS;
@@ -566,7 +574,8 @@ public class Simple64 {
       s9 |= (long) (uncompressed[inOffset+7]) << 46;
       s9 |= (long) (uncompressed[inOffset+8]) << 52;
       s9 |= (long) (uncompressed[inOffset+9]) << 58;
-      compressedBuffer.put(outOffset, s9);
+      compressedBuffer.put(outOffset, (int) (s9 >> 32));
+      compressedBuffer.put(outOffset+1, (int) s9);
       return 10;
     case 5:
       s9 = STATUS_12NUM_5BITS;
@@ -582,7 +591,8 @@ public class Simple64 {
       s9 |= (long) (uncompressed[inOffset+9]) << 49;
       s9 |= (long) (uncompressed[inOffset+10]) << 54;
       s9 |= (long) (uncompressed[inOffset+11]) << 59;
-      compressedBuffer.put(outOffset, s9);
+      compressedBuffer.put(outOffset, (int) (s9 >> 32));
+      compressedBuffer.put(outOffset+1, (int) s9);
       return 12;
     case 4:
       s9 = STATUS_15NUM_4BITS;
@@ -601,7 +611,8 @@ public class Simple64 {
       s9 |= (long) (uncompressed[inOffset+12]) << 52;
       s9 |= (long) (uncompressed[inOffset+13]) << 56;
       s9 |= (long) (uncompressed[inOffset+14]) << 60;
-      compressedBuffer.put(outOffset, s9);
+      compressedBuffer.put(outOffset, (int) (s9 >> 32));
+      compressedBuffer.put(outOffset+1, (int) s9);
       return 15;
     case 3:
       s9 = STATUS_20NUM_3BITS;
@@ -625,7 +636,8 @@ public class Simple64 {
       s9 |= (long) (uncompressed[inOffset+17]) << 55;
       s9 |= (long) (uncompressed[inOffset+18]) << 58;
       s9 |= (long) (uncompressed[inOffset+19]) << 61;
-      compressedBuffer.put(outOffset, s9);
+      compressedBuffer.put(outOffset, (int) (s9 >> 32));
+      compressedBuffer.put(outOffset+1, (int) s9);
       return 20;
     case 2:
       s9 = STATUS_30NUM_2BITS;
@@ -659,7 +671,8 @@ public class Simple64 {
       s9 |= (long) (uncompressed[inOffset+27]) << 58;
       s9 |= (long) (uncompressed[inOffset+28]) << 60;
       s9 |= (long) (uncompressed[inOffset+29]) << 62;
-      compressedBuffer.put(outOffset, s9);
+      compressedBuffer.put(outOffset, (int) (s9 >> 32));
+      compressedBuffer.put(outOffset+1, (int) s9);
       return 30;
     case 1:
       s9 = STATUS_60NUM_1BITS;
@@ -723,231 +736,229 @@ public class Simple64 {
       s9 |= (long) (uncompressed[inOffset+57]) << 61;
       s9 |= (long) (uncompressed[inOffset+58]) << 62;
       s9 |= (long) (uncompressed[inOffset+59]) << 63;
-      compressedBuffer.put(outOffset, s9);
+      compressedBuffer.put(outOffset, (int) (s9 >> 32));
+      compressedBuffer.put(outOffset+1, (int) s9);
       return 60;
     default:
       throw new Error("S98b.compressSingle internal error: unknown minBits: " + minBits);
     }
   }
-
-
-  public static int decompressSingle(final long s9, final int[] decompressed, final int outOffset) {
-    //System.out.println("S64.decompressSingle header=" + (int) (s9&15));
-    // nocommit case s9 to int then & with 15???
-    switch ((int) (s9 & 15)) {
+  
+  public static int decompressSingle(final int s9a, final int s9b, final int[] decompressed, final int outOffset) {
+    switch (s9b & 15) {
     case STATUS_1NUM_60BITS:
-      decompressed[outOffset] = (int) ((s9 >>> 4) & BITS_60_MASK); // The value can't be bigger than 2^32-1
-      return 1;
+      decompressed[outOffset] = (s9b >>> 4) | (s9a << 28);
+     return 1;
     case STATUS_2NUM_30BITS:
-      decompressed[outOffset] = (int) ((s9 >>> 4) & BITS_30_MASK);
-      decompressed[outOffset+1] = (int) ((s9 >>> 34) & BITS_30_MASK);
+      decompressed[outOffset] = (s9b >>> 4 | (s9a << 28)) & BITS_30_MASK;
+      decompressed[outOffset+1] = (s9a >>> 2) & BITS_30_MASK;
       return 2;
     case STATUS_3NUM_20BITS:
-      decompressed[outOffset] = (int) ((s9 >>> 4) & BITS_20_MASK);
-      decompressed[outOffset+1] = (int) ((s9 >>> 24) & BITS_20_MASK);
-      decompressed[outOffset+2] = (int) ((s9 >>> 44) & BITS_20_MASK);
+      decompressed[outOffset] = (s9b >>> 4) & BITS_20_MASK;
+      decompressed[outOffset+1] = ((s9b >>> 24) | (s9a << 8)) & BITS_20_MASK;
+      decompressed[outOffset+2] = (s9a >>> 12) & BITS_20_MASK;
       return 3;
     case STATUS_4NUM_15BITS:
-      decompressed[outOffset] = (int) ((s9 >>> 4) & BITS_15_MASK);
-      decompressed[outOffset+1] = (int) ((s9 >>> 19) & BITS_15_MASK);
-      decompressed[outOffset+2] = (int) ((s9 >>> 34) & BITS_15_MASK);
-      decompressed[outOffset+3] = (int) ((s9 >>> 49) & BITS_15_MASK);
+      decompressed[outOffset] = (s9b >>> 4) & BITS_15_MASK;
+      decompressed[outOffset+1] = ((s9b >>> 19) | (s9a << 13)) & BITS_15_MASK;
+      decompressed[outOffset+2] = (s9a >>> 2) & BITS_15_MASK;
+      decompressed[outOffset+3] = (s9a >>> 17) & BITS_15_MASK;
       return 4;
     case STATUS_5NUM_12BITS:
-      decompressed[outOffset] = (int) ((s9 >>> 4) & BITS_12_MASK);
-      decompressed[outOffset+1] = (int) ((s9 >>> 16) & BITS_12_MASK);
-      decompressed[outOffset+2] = (int) ((s9 >>> 28) & BITS_12_MASK);
-      decompressed[outOffset+3] = (int) ((s9 >>> 40) & BITS_12_MASK);
-      decompressed[outOffset+4] = (int) ((s9 >>> 52) & BITS_12_MASK);
+      decompressed[outOffset] = (s9b >>> 4) & BITS_12_MASK;
+      decompressed[outOffset+1] = (s9b >>> 16) & BITS_12_MASK;
+      decompressed[outOffset+2] = ((s9b >>> 28) | (s9a << 4)) & BITS_12_MASK;
+      decompressed[outOffset+3] = (s9a >>> 8) & BITS_12_MASK;
+      decompressed[outOffset+4] = (s9a >>> 20) & BITS_12_MASK;
       return 5;
     case STATUS_6NUM_10BITS:
-      decompressed[outOffset] = (int) ((s9 >>> 4) & BITS_10_MASK);
-      decompressed[outOffset+1] = (int) ((s9 >>> 14) & BITS_10_MASK);
-      decompressed[outOffset+2] = (int) ((s9 >>> 24) & BITS_10_MASK);
-      decompressed[outOffset+3] = (int) ((s9 >>> 34) & BITS_10_MASK);
-      decompressed[outOffset+4] = (int) ((s9 >>> 44) & BITS_10_MASK);
-      decompressed[outOffset+5] = (int) ((s9 >>> 54) & BITS_10_MASK);
+      decompressed[outOffset] = (s9b >>> 4) & BITS_10_MASK;
+      decompressed[outOffset+1] = (s9b >>> 14) & BITS_10_MASK;
+      decompressed[outOffset+2] = ((s9b >>> 24) | (s9a << 8)) & BITS_10_MASK;
+      decompressed[outOffset+3] = (s9a >>> 2) & BITS_10_MASK;
+      decompressed[outOffset+4] = (s9a >>> 12) & BITS_10_MASK;
+      decompressed[outOffset+5] = (s9a >>> 22) & BITS_10_MASK;
       return 6;
     case STATUS_7NUM_8BITS:
-      decompressed[outOffset] = (int) ((s9 >>> 4) & BITS_8_MASK);
-      decompressed[outOffset+1] = (int) ((s9 >>> 12) & BITS_8_MASK);
-      decompressed[outOffset+2] = (int) ((s9 >>> 20) & BITS_8_MASK);
-      decompressed[outOffset+3] = (int) ((s9 >>> 28) & BITS_8_MASK);
-      decompressed[outOffset+4] = (int) ((s9 >>> 36) & BITS_8_MASK);
-      decompressed[outOffset+5] = (int) ((s9 >>> 44) & BITS_8_MASK);
-      decompressed[outOffset+6] = (int) ((s9 >>> 52) & BITS_12_MASK);
+      decompressed[outOffset] = (s9b >>> 4) & BITS_8_MASK;
+      decompressed[outOffset+1] = (s9b >>> 12) & BITS_8_MASK;
+      decompressed[outOffset+2] = (s9b >>> 20) & BITS_8_MASK;
+      decompressed[outOffset+3] = ((s9b >>> 28) | (s9a << 4)) & BITS_8_MASK;
+      decompressed[outOffset+4] = (s9a >>> 4) & BITS_8_MASK;
+      decompressed[outOffset+5] = (s9a >>> 12) & BITS_8_MASK;
+      decompressed[outOffset+6] = (s9a >>> 20) & BITS_12_MASK;
       return 7;
     case STATUS_8NUM_7BITS:
-      decompressed[outOffset] = (int) ((s9 >>> 4) & BITS_7_MASK);
-      decompressed[outOffset+1] = (int) ((s9 >>> 11) & BITS_7_MASK);
-      decompressed[outOffset+2] = (int) ((s9 >>> 18) & BITS_7_MASK);
-      decompressed[outOffset+3] = (int) ((s9 >>> 25) & BITS_7_MASK);
-      decompressed[outOffset+4] = (int) ((s9 >>> 32) & BITS_7_MASK);
-      decompressed[outOffset+5] = (int) ((s9 >>> 39) & BITS_7_MASK);
-      decompressed[outOffset+6] = (int) ((s9 >>> 46) & BITS_7_MASK);
-      decompressed[outOffset+7] = (int) ((s9 >>> 53) & BITS_11_MASK);
+      decompressed[outOffset] = (s9b >>> 4) & BITS_7_MASK;
+      decompressed[outOffset+1] = (s9b >>> 11) & BITS_7_MASK;
+      decompressed[outOffset+2] = (s9b >>> 18) & BITS_7_MASK;
+      decompressed[outOffset+3] = (s9b >>> 25) & BITS_7_MASK;
+      decompressed[outOffset+4] = s9a & BITS_7_MASK;
+      decompressed[outOffset+5] = (s9a >>> 7) & BITS_7_MASK;
+      decompressed[outOffset+6] = (s9a >>> 14) & BITS_7_MASK;
+      decompressed[outOffset+7] = (s9a >>> 21) & BITS_11_MASK;
       return 8;
     case STATUS_10NUM_6BITS:
-      decompressed[outOffset] = (int) ((s9 >>> 4) & BITS_6_MASK);
-      decompressed[outOffset+1] = (int) ((s9 >>> 10) & BITS_6_MASK);
-      decompressed[outOffset+2] = (int) ((s9 >>> 16) & BITS_6_MASK);
-      decompressed[outOffset+3] = (int) ((s9 >>> 22) & BITS_6_MASK);
-      decompressed[outOffset+4] = (int) ((s9 >>> 28) & BITS_6_MASK);
-      decompressed[outOffset+5] = (int) ((s9 >>> 34) & BITS_6_MASK);
-      decompressed[outOffset+6] = (int) ((s9 >>> 40) & BITS_6_MASK);
-      decompressed[outOffset+7] = (int) ((s9 >>> 46) & BITS_6_MASK);
-      decompressed[outOffset+8] = (int) ((s9 >>> 52) & BITS_6_MASK);
-      decompressed[outOffset+9] = (int) ((s9 >>> 58) & BITS_6_MASK);
+      decompressed[outOffset] = (s9b >>> 4) & BITS_6_MASK;
+      decompressed[outOffset+1] = (s9b >>> 10) & BITS_6_MASK;
+      decompressed[outOffset+2] = (s9b >>> 16) & BITS_6_MASK;
+      decompressed[outOffset+3] = (s9b >>> 22) & BITS_6_MASK;
+      decompressed[outOffset+4] = ((s9b >>> 28) | (s9a << 4)) & BITS_6_MASK;
+      decompressed[outOffset+5] = (s9a >>> 2) & BITS_6_MASK;
+      decompressed[outOffset+6] = (s9a >>> 8) & BITS_6_MASK;
+      decompressed[outOffset+7] = (s9a >>> 14) & BITS_6_MASK;
+      decompressed[outOffset+8] = (s9a >>> 20) & BITS_6_MASK;
+      decompressed[outOffset+9] = (s9a >>> 26) & BITS_6_MASK;
       return 10;
     case STATUS_12NUM_5BITS:
-      decompressed[outOffset] = (int) ((s9 >>> 4) & BITS_5_MASK);
-      decompressed[outOffset+1] = (int) ((s9 >>> 9) & BITS_5_MASK);
-      decompressed[outOffset+2] = (int) ((s9 >>> 14) & BITS_5_MASK);
-      decompressed[outOffset+3] = (int) ((s9 >>> 19) & BITS_5_MASK);
-      decompressed[outOffset+4] = (int) ((s9 >>> 24) & BITS_5_MASK);
-      decompressed[outOffset+5] = (int) ((s9 >>> 29) & BITS_5_MASK);
-      decompressed[outOffset+6] = (int) ((s9 >>> 34) & BITS_5_MASK);
-      decompressed[outOffset+7] = (int) ((s9 >>> 39) & BITS_5_MASK);
-      decompressed[outOffset+8] = (int) ((s9 >>> 44) & BITS_5_MASK);
-      decompressed[outOffset+9] = (int) ((s9 >>> 49) & BITS_5_MASK);
-      decompressed[outOffset+10] = (int) ((s9 >>> 54) & BITS_5_MASK);
-      decompressed[outOffset+11] = (int) ((s9 >>> 59) & BITS_5_MASK);
+      decompressed[outOffset] = (s9b >>> 4) & BITS_5_MASK;
+      decompressed[outOffset+1] = (s9b >>> 9) & BITS_5_MASK;
+      decompressed[outOffset+2] = (s9b >>> 14) & BITS_5_MASK;
+      decompressed[outOffset+3] = (s9b >>> 19) & BITS_5_MASK;
+      decompressed[outOffset+4] = (s9b >>> 24) & BITS_5_MASK;
+      decompressed[outOffset+5] = ((s9b >>> 29) | (s9a << 3)) & BITS_5_MASK;
+      decompressed[outOffset+6] = (s9a >>> 2) & BITS_5_MASK;
+      decompressed[outOffset+7] = (s9a >>> 7) & BITS_5_MASK;
+      decompressed[outOffset+8] = (s9a >>> 12) & BITS_5_MASK;
+      decompressed[outOffset+9] = (s9a >>> 17) & BITS_5_MASK;
+      decompressed[outOffset+10] = (s9a >>> 22) & BITS_5_MASK;
+      decompressed[outOffset+11] = (s9a >>> 27) & BITS_5_MASK;
       return 12;
     case STATUS_15NUM_4BITS:
-      decompressed[outOffset] = (int) ((s9 >>> 4) & BITS_4_MASK);
-      decompressed[outOffset+1] = (int) ((s9 >>> 8) & BITS_4_MASK);
-      decompressed[outOffset+2] = (int) ((s9 >>> 12) & BITS_4_MASK);
-      decompressed[outOffset+3] = (int) ((s9 >>> 16) & BITS_4_MASK);
-      decompressed[outOffset+4] = (int) ((s9 >>> 20) & BITS_4_MASK);
-      decompressed[outOffset+5] = (int) ((s9 >>> 24) & BITS_4_MASK);
-      decompressed[outOffset+6] = (int) ((s9 >>> 28) & BITS_4_MASK);
-      decompressed[outOffset+7] = (int) ((s9 >>> 32) & BITS_4_MASK);
-      decompressed[outOffset+8] = (int) ((s9 >>> 36) & BITS_4_MASK);
-      decompressed[outOffset+9] = (int) ((s9 >>> 40) & BITS_4_MASK);
-      decompressed[outOffset+10] = (int) ((s9 >>> 44) & BITS_4_MASK);
-      decompressed[outOffset+11] = (int) ((s9 >>> 48) & BITS_4_MASK);
-      decompressed[outOffset+12] = (int) ((s9 >>> 52) & BITS_4_MASK);
-      decompressed[outOffset+13] = (int) ((s9 >>> 56) & BITS_4_MASK);
-      decompressed[outOffset+14] = (int) ((s9 >>> 60) & BITS_4_MASK);
+      decompressed[outOffset] = (s9b >>> 4) & BITS_4_MASK;
+      decompressed[outOffset+1] = (s9b >>> 8) & BITS_4_MASK;
+      decompressed[outOffset+2] = (s9b >>> 12) & BITS_4_MASK;
+      decompressed[outOffset+3] = (s9b >>> 16) & BITS_4_MASK;
+      decompressed[outOffset+4] = (s9b >>> 20) & BITS_4_MASK;
+      decompressed[outOffset+5] = (s9b >>> 24) & BITS_4_MASK;
+      decompressed[outOffset+6] = (s9b >>> 28) & BITS_4_MASK;
+      decompressed[outOffset+7] = s9a & BITS_4_MASK;
+      decompressed[outOffset+8] = (s9a >>> 4) & BITS_4_MASK;
+      decompressed[outOffset+9] = (s9a >>> 8) & BITS_4_MASK;
+      decompressed[outOffset+10] = (s9a >>> 12) & BITS_4_MASK;
+      decompressed[outOffset+11] = (s9a >>> 16) & BITS_4_MASK;
+      decompressed[outOffset+12] = (s9a >>> 20) & BITS_4_MASK;
+      decompressed[outOffset+13] = (s9a >>> 24) & BITS_4_MASK;
+      decompressed[outOffset+14] = (s9a >>> 28) & BITS_4_MASK;
       return 15;
     case STATUS_20NUM_3BITS:
-      decompressed[outOffset] = (int) ((s9 >>> 4) & BITS_3_MASK);
-      decompressed[outOffset+1] = (int) ((s9 >>> 7) & BITS_3_MASK);
-      decompressed[outOffset+2] = (int) ((s9 >>> 10) & BITS_3_MASK);
-      decompressed[outOffset+3] = (int) ((s9 >>> 13) & BITS_3_MASK);
-      decompressed[outOffset+4] = (int) ((s9 >>> 16) & BITS_3_MASK);
-      decompressed[outOffset+5] = (int) ((s9 >>> 19) & BITS_3_MASK);
-      decompressed[outOffset+6] = (int) ((s9 >>> 22) & BITS_3_MASK);
-      decompressed[outOffset+7] = (int) ((s9 >>> 25) & BITS_3_MASK);
-      decompressed[outOffset+8] = (int) ((s9 >>> 28) & BITS_3_MASK);
-      decompressed[outOffset+9] = (int) ((s9 >>> 31) & BITS_3_MASK);
-      decompressed[outOffset+10] = (int) ((s9 >>> 34) & BITS_3_MASK);
-      decompressed[outOffset+11] = (int) ((s9 >>> 37) & BITS_3_MASK);
-      decompressed[outOffset+12] = (int) ((s9 >>> 40) & BITS_3_MASK);
-      decompressed[outOffset+13] = (int) ((s9 >>> 43) & BITS_3_MASK);
-      decompressed[outOffset+14] = (int) ((s9 >>> 46) & BITS_3_MASK);
-      decompressed[outOffset+15] = (int) ((s9 >>> 49) & BITS_3_MASK);
-      decompressed[outOffset+16] = (int) ((s9 >>> 52) & BITS_3_MASK);
-      decompressed[outOffset+17] = (int) ((s9 >>> 55) & BITS_3_MASK);
-      decompressed[outOffset+18] = (int) ((s9 >>> 58) & BITS_3_MASK);
-      decompressed[outOffset+19] = (int) ((s9 >>> 61) & BITS_3_MASK);
+      decompressed[outOffset] = (s9b >>> 4) & BITS_3_MASK;
+      decompressed[outOffset+1] = (s9b >>> 7) & BITS_3_MASK;
+      decompressed[outOffset+2] = (s9b >>> 10) & BITS_3_MASK;
+      decompressed[outOffset+3] = (s9b >>> 13) & BITS_3_MASK;
+      decompressed[outOffset+4] = (s9b >>> 16) & BITS_3_MASK;
+      decompressed[outOffset+5] = (s9b >>> 19) & BITS_3_MASK;
+      decompressed[outOffset+6] = (s9b >>> 22) & BITS_3_MASK;
+      decompressed[outOffset+7] = (s9b >>> 25) & BITS_3_MASK;
+      decompressed[outOffset+8] = (s9b >>> 28) & BITS_3_MASK;
+      decompressed[outOffset+9] = ((s9b >>> 31) | (s9a << 1)) & BITS_3_MASK;
+      decompressed[outOffset+10] = (s9a >>> 2) & BITS_3_MASK;
+      decompressed[outOffset+11] = (s9a >>> 5) & BITS_3_MASK;
+      decompressed[outOffset+12] = (s9a >>> 8) & BITS_3_MASK;
+      decompressed[outOffset+13] = (s9a >>> 11) & BITS_3_MASK;
+      decompressed[outOffset+14] = (s9a >>> 14) & BITS_3_MASK;
+      decompressed[outOffset+15] = (s9a >>> 17) & BITS_3_MASK;
+      decompressed[outOffset+16] = (s9a >>> 20) & BITS_3_MASK;
+      decompressed[outOffset+17] = (s9a >>> 23) & BITS_3_MASK;
+      decompressed[outOffset+18] = (s9a >>> 26) & BITS_3_MASK;
+      decompressed[outOffset+19] = (s9a >>> 29) & BITS_3_MASK;
       return 20;
     case STATUS_30NUM_2BITS:
-      decompressed[outOffset] = (int) ((s9 >>> 4) & BITS_2_MASK);
-      decompressed[outOffset+1] = (int) ((s9 >>> 6) & BITS_2_MASK);
-      decompressed[outOffset+2] = (int) ((s9 >>> 8) & BITS_2_MASK);
-      decompressed[outOffset+3] = (int) ((s9 >>> 10) & BITS_2_MASK);
-      decompressed[outOffset+4] = (int) ((s9 >>> 12) & BITS_2_MASK);
-      decompressed[outOffset+5] = (int) ((s9 >>> 14) & BITS_2_MASK);
-      decompressed[outOffset+6] = (int) ((s9 >>> 16) & BITS_2_MASK);
-      decompressed[outOffset+7] = (int) ((s9 >>> 18) & BITS_2_MASK);
-      decompressed[outOffset+8] = (int) ((s9 >>> 20) & BITS_2_MASK);
-      decompressed[outOffset+9] = (int) ((s9 >>> 22) & BITS_2_MASK);
-      decompressed[outOffset+10] = (int) ((s9 >>> 24) & BITS_2_MASK);
-      decompressed[outOffset+11] = (int) ((s9 >>> 26) & BITS_2_MASK);
-      decompressed[outOffset+12] = (int) ((s9 >>> 28) & BITS_2_MASK);
-      decompressed[outOffset+13] = (int) ((s9 >>> 30) & BITS_2_MASK);
-      decompressed[outOffset+14] = (int) ((s9 >>> 32) & BITS_2_MASK);
-      decompressed[outOffset+15] = (int) ((s9 >>> 34) & BITS_2_MASK);
-      decompressed[outOffset+16] = (int) ((s9 >>> 36) & BITS_2_MASK);
-      decompressed[outOffset+17] = (int) ((s9 >>> 38) & BITS_2_MASK);
-      decompressed[outOffset+18] = (int) ((s9 >>> 40) & BITS_2_MASK);
-      decompressed[outOffset+19] = (int) ((s9 >>> 42) & BITS_2_MASK);
-      decompressed[outOffset+20] = (int) ((s9 >>> 44) & BITS_2_MASK);
-      decompressed[outOffset+21] = (int) ((s9 >>> 46) & BITS_2_MASK);
-      decompressed[outOffset+22] = (int) ((s9 >>> 48) & BITS_2_MASK);
-      decompressed[outOffset+23] = (int) ((s9 >>> 50) & BITS_2_MASK);
-      decompressed[outOffset+24] = (int) ((s9 >>> 52) & BITS_2_MASK);
-      decompressed[outOffset+25] = (int) ((s9 >>> 54) & BITS_2_MASK);
-      decompressed[outOffset+26] = (int) ((s9 >>> 56) & BITS_2_MASK);
-      decompressed[outOffset+27] = (int) ((s9 >>> 58) & BITS_2_MASK);
-      decompressed[outOffset+28] = (int) ((s9 >>> 60) & BITS_2_MASK);
-      decompressed[outOffset+29] = (int) ((s9 >>> 62) & BITS_2_MASK);
+      decompressed[outOffset] = (s9b >>> 4) & BITS_2_MASK;
+      decompressed[outOffset+1] = (s9b >>> 6) & BITS_2_MASK;
+      decompressed[outOffset+2] = (s9b >>> 8) & BITS_2_MASK;
+      decompressed[outOffset+3] = (s9b >>> 10) & BITS_2_MASK;
+      decompressed[outOffset+4] = (s9b >>> 12) & BITS_2_MASK;
+      decompressed[outOffset+5] = (s9b >>> 14) & BITS_2_MASK;
+      decompressed[outOffset+6] = (s9b >>> 16) & BITS_2_MASK;
+      decompressed[outOffset+7] = (s9b >>> 18) & BITS_2_MASK;
+      decompressed[outOffset+8] = (s9b >>> 20) & BITS_2_MASK;
+      decompressed[outOffset+9] = (s9b >>> 22) & BITS_2_MASK;
+      decompressed[outOffset+10] = (s9b >>> 24) & BITS_2_MASK;
+      decompressed[outOffset+11] = (s9b >>> 26) & BITS_2_MASK;
+      decompressed[outOffset+12] = (s9b >>> 28) & BITS_2_MASK;
+      decompressed[outOffset+13] = (s9b >>> 30) & BITS_2_MASK;
+      decompressed[outOffset+14] = s9a & BITS_2_MASK;
+      decompressed[outOffset+15] = (s9a >>> 2) & BITS_2_MASK;
+      decompressed[outOffset+16] = (s9a >>> 4) & BITS_2_MASK;
+      decompressed[outOffset+17] = (s9a >>> 6) & BITS_2_MASK;
+      decompressed[outOffset+18] = (s9a >>> 8) & BITS_2_MASK;
+      decompressed[outOffset+19] = (s9a >>> 10) & BITS_2_MASK;
+      decompressed[outOffset+20] = (s9a >>> 12) & BITS_2_MASK;
+      decompressed[outOffset+21] = (s9a >>> 14) & BITS_2_MASK;
+      decompressed[outOffset+22] = (s9a >>> 16) & BITS_2_MASK;
+      decompressed[outOffset+23] = (s9a >>> 18) & BITS_2_MASK;
+      decompressed[outOffset+24] = (s9a >>> 20) & BITS_2_MASK;
+      decompressed[outOffset+25] = (s9a >>> 22) & BITS_2_MASK;
+      decompressed[outOffset+26] = (s9a >>> 24) & BITS_2_MASK;
+      decompressed[outOffset+27] = (s9a >>> 26) & BITS_2_MASK;
+      decompressed[outOffset+28] = (s9a >>> 28) & BITS_2_MASK;
+      decompressed[outOffset+29] = (s9a >>> 30) & BITS_2_MASK;
       return 30;
     case STATUS_60NUM_1BITS:
-      decompressed[outOffset] = (int) ((s9 >>> 4) & BITS_1_MASK);
-      decompressed[outOffset+1] = (int) ((s9 >>> 5) & BITS_1_MASK);
-      decompressed[outOffset+2] = (int) ((s9 >>> 6) & BITS_1_MASK);
-      decompressed[outOffset+3] = (int) ((s9 >>> 7) & BITS_1_MASK);
-      decompressed[outOffset+4] = (int) ((s9 >>> 8) & BITS_1_MASK);
-      decompressed[outOffset+5] = (int) ((s9 >>> 9) & BITS_1_MASK);
-      decompressed[outOffset+6] = (int) ((s9 >>> 10) & BITS_1_MASK);
-      decompressed[outOffset+7] = (int) ((s9 >>> 11) & BITS_1_MASK);
-      decompressed[outOffset+8] = (int) ((s9 >>> 12) & BITS_1_MASK);
-      decompressed[outOffset+9] = (int) ((s9 >>> 13) & BITS_1_MASK);
-      decompressed[outOffset+10] = (int) ((s9 >>> 14) & BITS_1_MASK);
-      decompressed[outOffset+11] = (int) ((s9 >>> 15) & BITS_1_MASK);
-      decompressed[outOffset+12] = (int) ((s9 >>> 16) & BITS_1_MASK);
-      decompressed[outOffset+13] = (int) ((s9 >>> 17) & BITS_1_MASK);
-      decompressed[outOffset+14] = (int) ((s9 >>> 18) & BITS_1_MASK);
-      decompressed[outOffset+15] = (int) ((s9 >>> 19) & BITS_1_MASK);
-      decompressed[outOffset+16] = (int) ((s9 >>> 20) & BITS_1_MASK);
-      decompressed[outOffset+17] = (int) ((s9 >>> 21) & BITS_1_MASK);
-      decompressed[outOffset+18] = (int) ((s9 >>> 22) & BITS_1_MASK);
-      decompressed[outOffset+19] = (int) ((s9 >>> 23) & BITS_1_MASK);
-      decompressed[outOffset+20] = (int) ((s9 >>> 24) & BITS_1_MASK);
-      decompressed[outOffset+21] = (int) ((s9 >>> 25) & BITS_1_MASK);
-      decompressed[outOffset+22] = (int) ((s9 >>> 26) & BITS_1_MASK);
-      decompressed[outOffset+23] = (int) ((s9 >>> 27) & BITS_1_MASK);
-      decompressed[outOffset+24] = (int) ((s9 >>> 28) & BITS_1_MASK);
-      decompressed[outOffset+25] = (int) ((s9 >>> 29) & BITS_1_MASK);
-      decompressed[outOffset+26] = (int) ((s9 >>> 30) & BITS_1_MASK);
-      decompressed[outOffset+27] = (int) ((s9 >>> 31) & BITS_1_MASK);
-      decompressed[outOffset+28] = (int) ((s9 >>> 32) & BITS_1_MASK);
-      decompressed[outOffset+29] = (int) ((s9 >>> 33) & BITS_1_MASK);
-      decompressed[outOffset+30] = (int) ((s9 >>> 34) & BITS_1_MASK);
-      decompressed[outOffset+31] = (int) ((s9 >>> 35) & BITS_1_MASK);
-      decompressed[outOffset+32] = (int) ((s9 >>> 36) & BITS_1_MASK);
-      decompressed[outOffset+33] = (int) ((s9 >>> 37) & BITS_1_MASK);
-      decompressed[outOffset+34] = (int) ((s9 >>> 38) & BITS_1_MASK);
-      decompressed[outOffset+35] = (int) ((s9 >>> 39) & BITS_1_MASK);
-      decompressed[outOffset+36] = (int) ((s9 >>> 40) & BITS_1_MASK);
-      decompressed[outOffset+37] = (int) ((s9 >>> 41) & BITS_1_MASK);
-      decompressed[outOffset+38] = (int) ((s9 >>> 42) & BITS_1_MASK);
-      decompressed[outOffset+39] = (int) ((s9 >>> 43) & BITS_1_MASK);
-      decompressed[outOffset+40] = (int) ((s9 >>> 44) & BITS_1_MASK);
-      decompressed[outOffset+41] = (int) ((s9 >>> 45) & BITS_1_MASK);
-      decompressed[outOffset+42] = (int) ((s9 >>> 46) & BITS_1_MASK);
-      decompressed[outOffset+43] = (int) ((s9 >>> 47) & BITS_1_MASK);
-      decompressed[outOffset+44] = (int) ((s9 >>> 48) & BITS_1_MASK);
-      decompressed[outOffset+45] = (int) ((s9 >>> 49) & BITS_1_MASK);
-      decompressed[outOffset+46] = (int) ((s9 >>> 50) & BITS_1_MASK);
-      decompressed[outOffset+47] = (int) ((s9 >>> 51) & BITS_1_MASK);
-      decompressed[outOffset+48] = (int) ((s9 >>> 52) & BITS_1_MASK);
-      decompressed[outOffset+49] = (int) ((s9 >>> 53) & BITS_1_MASK);
-      decompressed[outOffset+50] = (int) ((s9 >>> 54) & BITS_1_MASK);
-      decompressed[outOffset+51] = (int) ((s9 >>> 55) & BITS_1_MASK);
-      decompressed[outOffset+52] = (int) ((s9 >>> 56) & BITS_1_MASK);
-      decompressed[outOffset+53] = (int) ((s9 >>> 57) & BITS_1_MASK);
-      decompressed[outOffset+54] = (int) ((s9 >>> 58) & BITS_1_MASK);
-      decompressed[outOffset+55] = (int) ((s9 >>> 59) & BITS_1_MASK);
-      decompressed[outOffset+56] = (int) ((s9 >>> 60) & BITS_1_MASK);
-      decompressed[outOffset+57] = (int) ((s9 >>> 61) & BITS_1_MASK);
-      decompressed[outOffset+58] = (int) ((s9 >>> 62) & BITS_1_MASK);
-      decompressed[outOffset+59] = (int) ((s9 >>> 63) & BITS_1_MASK);
+      decompressed[outOffset] = (s9b >>> 4) & BITS_1_MASK;
+      decompressed[outOffset+1] = (s9b >>> 5) & BITS_1_MASK;
+      decompressed[outOffset+2] = (s9b >>> 6) & BITS_1_MASK;
+      decompressed[outOffset+3] = (s9b >>> 7) & BITS_1_MASK;
+      decompressed[outOffset+4] = (s9b >>> 8) & BITS_1_MASK;
+      decompressed[outOffset+5] = (s9b >>> 9) & BITS_1_MASK;
+      decompressed[outOffset+6] = (s9b >>> 10) & BITS_1_MASK;
+      decompressed[outOffset+7] = (s9b >>> 11) & BITS_1_MASK;
+      decompressed[outOffset+8] = (s9b >>> 12) & BITS_1_MASK;
+      decompressed[outOffset+9] = (s9b >>> 13) & BITS_1_MASK;
+      decompressed[outOffset+10] = (s9b >>> 14) & BITS_1_MASK;
+      decompressed[outOffset+11] = (s9b >>> 15) & BITS_1_MASK;
+      decompressed[outOffset+12] = (s9b >>> 16) & BITS_1_MASK;
+      decompressed[outOffset+13] = (s9b >>> 17) & BITS_1_MASK;
+      decompressed[outOffset+14] = (s9b >>> 18) & BITS_1_MASK;
+      decompressed[outOffset+15] = (s9b >>> 19) & BITS_1_MASK;
+      decompressed[outOffset+16] = (s9b >>> 20) & BITS_1_MASK;
+      decompressed[outOffset+17] = (s9b >>> 21) & BITS_1_MASK;
+      decompressed[outOffset+18] = (s9b >>> 22) & BITS_1_MASK;
+      decompressed[outOffset+19] = (s9b >>> 23) & BITS_1_MASK;
+      decompressed[outOffset+20] = (s9b >>> 24) & BITS_1_MASK;
+      decompressed[outOffset+21] = (s9b >>> 25) & BITS_1_MASK;
+      decompressed[outOffset+22] = (s9b >>> 26) & BITS_1_MASK;
+      decompressed[outOffset+23] = (s9b >>> 27) & BITS_1_MASK;
+      decompressed[outOffset+24] = (s9b >>> 28) & BITS_1_MASK;
+      decompressed[outOffset+25] = (s9b >>> 29) & BITS_1_MASK;
+      decompressed[outOffset+26] = (s9b >>> 30) & BITS_1_MASK;
+      decompressed[outOffset+27] = (s9b >>> 31) & BITS_1_MASK;
+      decompressed[outOffset+28] = s9a & BITS_1_MASK;
+      decompressed[outOffset+29] = (s9a >>> 1) & BITS_1_MASK;
+      decompressed[outOffset+30] = (s9a >>> 2) & BITS_1_MASK;
+      decompressed[outOffset+31] = (s9a >>> 3) & BITS_1_MASK;
+      decompressed[outOffset+32] = (s9a >>> 4) & BITS_1_MASK;
+      decompressed[outOffset+33] = (s9a >>> 5) & BITS_1_MASK;
+      decompressed[outOffset+34] = (s9a >>> 6) & BITS_1_MASK;
+      decompressed[outOffset+35] = (s9a >>> 7) & BITS_1_MASK;
+      decompressed[outOffset+36] = (s9a >>> 8) & BITS_1_MASK;
+      decompressed[outOffset+37] = (s9a >>> 9) & BITS_1_MASK;
+      decompressed[outOffset+38] = (s9a >>> 10) & BITS_1_MASK;
+      decompressed[outOffset+39] = (s9a >>> 11) & BITS_1_MASK;
+      decompressed[outOffset+40] = (s9a >>> 12) & BITS_1_MASK;
+      decompressed[outOffset+41] = (s9a >>> 13) & BITS_1_MASK;
+      decompressed[outOffset+42] = (s9a >>> 14) & BITS_1_MASK;
+      decompressed[outOffset+43] = (s9a >>> 15) & BITS_1_MASK;
+      decompressed[outOffset+44] = (s9a >>> 16) & BITS_1_MASK;
+      decompressed[outOffset+45] = (s9a >>> 17) & BITS_1_MASK;
+      decompressed[outOffset+46] = (s9a >>> 18) & BITS_1_MASK;
+      decompressed[outOffset+47] = (s9a >>> 19) & BITS_1_MASK;
+      decompressed[outOffset+48] = (s9a >>> 20) & BITS_1_MASK;
+      decompressed[outOffset+49] = (s9a >>> 21) & BITS_1_MASK;
+      decompressed[outOffset+50] = (s9a >>> 22) & BITS_1_MASK;
+      decompressed[outOffset+51] = (s9a >>> 23) & BITS_1_MASK;
+      decompressed[outOffset+52] = (s9a >>> 24) & BITS_1_MASK;
+      decompressed[outOffset+53] = (s9a >>> 25) & BITS_1_MASK;
+      decompressed[outOffset+54] = (s9a >>> 26) & BITS_1_MASK;
+      decompressed[outOffset+55] = (s9a >>> 27) & BITS_1_MASK;
+      decompressed[outOffset+56] = (s9a >>> 28) & BITS_1_MASK;
+      decompressed[outOffset+57] = (s9a >>> 29) & BITS_1_MASK;
+      decompressed[outOffset+58] = (s9a >>> 30) & BITS_1_MASK;
+      decompressed[outOffset+59] = (s9a >>> 31) & BITS_1_MASK;
       return 60;
     default:
-      throw new IllegalArgumentException("Unknown Simple9 status: " + (s9 >>> NUM_DATA_BITS));
+      throw new IllegalArgumentException("Unknown Simple9 status: " + (s9b >>> NUM_DATA_BITS));
     }
   }
 
@@ -959,9 +970,9 @@ public class Simple64 {
       encoded = compressSingle(unCompressedData, offset, unComprSize, compressedBuffer, compressedSize);
       offset += encoded;
       unComprSize -= encoded;
-      compressedSize++;
+      compressedSize+=2;
     }
-    compressedSize <<= 3;
+    compressedSize <<= 2;
   }
 
   public void decompress() {
@@ -969,7 +980,7 @@ public class Simple64 {
 
     compressedBuffer.rewind();
     while (unComprSize > 0) {
-      final int decoded = decompressSingle(compressedBuffer.get(), unCompressedData, totalOut);
+      final int decoded = decompressSingle(compressedBuffer.get(), compressedBuffer.get(), unCompressedData, totalOut);
       unComprSize -= decoded;
       totalOut += decoded;
     }

Copied: lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/simple64/Simple64Codec.java (from r1069395, lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/simple64/Simple64VarIntCodec.java)
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/simple64/Simple64Codec.java?p2=lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/simple64/Simple64Codec.java&p1=lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/simple64/Simple64VarIntCodec.java&r1=1069395&r2=1069435&rev=1069435&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/simple64/Simple64VarIntCodec.java (original)
+++ lucene/dev/branches/bulkpostings/lucene/src/java/org/apache/lucene/index/codecs/simple64/Simple64Codec.java Thu Feb 10 15:47:56 2011
@@ -51,10 +51,12 @@ import org.apache.lucene.util.BytesRef;
  * @lucene.experimental
  */
 
-public class Simple64VarIntCodec extends Codec {
+public class Simple64Codec extends Codec {
+  private final int multiplier;
 
-  public Simple64VarIntCodec() {
-    name = "Simple64VarInt";
+  public Simple64Codec(int multiplier) {
+    name = "Simple64";
+    this.multiplier = multiplier;
   }
 
   @Override
@@ -76,15 +78,19 @@ public class Simple64VarIntCodec extends
         @Override
         protected BlockReader getBlockReader(final IndexInput in, final int[] buffer) throws IOException {
           return new BlockReader() {
+            private final int numBytes = multiplier*8;
+            private final byte[] bbuf = new byte[numBytes];
             public int readBlock() throws IOException {
-              //System.out.println("S64.readBlock in.fp=" + in.getFilePointer());
-              int count = Simple64.decompressSingle(in.readLong(), buffer, 0);
-              /*
-              System.out.println("  count=" + count);
-              for(int i=0;i<count;i++) {
-                System.out.println("" + buffer[i]);
+              int count = 0;
+              int bufferPosition = 0;
+              in.readBytes(bbuf, 0, numBytes);
+              for(int i=0;i<multiplier;i++) {
+                final int i1 = ((bbuf[bufferPosition++] & 0xFF) << 24) | ((bbuf[bufferPosition++] & 0xFF) << 16)
+                | ((bbuf[bufferPosition++] & 0xFF) <<  8) |  (bbuf[bufferPosition++] & 0xFF);
+                final int i2 = ((bbuf[bufferPosition++] & 0xFF) << 24) | ((bbuf[bufferPosition++] & 0xFF) << 16)
+                | ((bbuf[bufferPosition++] & 0xFF) <<  8) |  (bbuf[bufferPosition++] & 0xFF);
+                count += Simple64.decompressSingle(i1, i2, buffer, count);
               }
-              */
               return count;
             }
           };
@@ -94,18 +100,34 @@ public class Simple64VarIntCodec extends
 
     @Override
     public IntIndexOutput createOutput(Directory dir, String fileName) throws IOException {
-      return new VariableIntBlockIndexOutput(dir.createOutput(fileName), 61) {
-        final long[] result = new long[1];
-        final Simple64 compressor = new Simple64();
+      return new VariableIntBlockIndexOutput(dir.createOutput(fileName), 61*multiplier) {
+        private final long[] buffer = new long[multiplier];
+        private int totWritten;
+        private int totConsumed;
+
+        private final long[] result = new long[1];
+        private final Simple64 compressor = new Simple64();
         
         @Override
         protected int add(int v) throws IOException {
           final int consumed = compressor.add(v, result);
           if (consumed != 0) {
-            //System.out.println("S64.write count=" + consumed + " out.fp=" + out.getFilePointer());
-            out.writeLong(result[0]);
+            totConsumed += consumed;
+            buffer[totWritten++] = result[0];
+            if (totWritten == multiplier) {
+              for(int i=0;i<multiplier;i++) {
+                out.writeLong(buffer[i]);
+              }
+              final int ret = totConsumed;
+              totConsumed = 0;
+              totWritten = 0;
+              return ret;
+            } else {
+              return 0;
+            }
+          } else {
+            return 0;
           }
-          return consumed;
         }
       };
     }

Copied: lucene/dev/branches/bulkpostings/lucene/src/test/org/apache/lucene/index/codecs/simple64/Simple64Test.java (from r1069395, lucene/dev/branches/bulkpostings/lucene/src/test/org/apache/lucene/index/codecs/simple64/Simple64VarIntTest.java)
URL: http://svn.apache.org/viewvc/lucene/dev/branches/bulkpostings/lucene/src/test/org/apache/lucene/index/codecs/simple64/Simple64Test.java?p2=lucene/dev/branches/bulkpostings/lucene/src/test/org/apache/lucene/index/codecs/simple64/Simple64Test.java&p1=lucene/dev/branches/bulkpostings/lucene/src/test/org/apache/lucene/index/codecs/simple64/Simple64VarIntTest.java&r1=1069395&r2=1069435&rev=1069435&view=diff
==============================================================================
--- lucene/dev/branches/bulkpostings/lucene/src/test/org/apache/lucene/index/codecs/simple64/Simple64VarIntTest.java (original)
+++ lucene/dev/branches/bulkpostings/lucene/src/test/org/apache/lucene/index/codecs/simple64/Simple64Test.java Thu Feb 10 15:47:56 2011
@@ -32,7 +32,7 @@ import org.apache.lucene.store.RAMDirect
 import org.apache.lucene.util._TestUtil;
 import org.junit.Test;
 
-public class Simple64VarIntTest extends CodecTestCase {
+public class Simple64Test extends CodecTestCase {
 
   @Test
   public void testSimple() throws IOException {
@@ -62,7 +62,7 @@ public class Simple64VarIntTest extends 
       throws IOException {
     final RAMDirectory dir = new RAMDirectory();
     final String filename = Simple64.class.toString();
-    final IntStreamFactory factory = new Simple64VarIntCodec().getIntFactory();
+    final IntStreamFactory factory = new Simple64Codec(_TestUtil.nextInt(random, 1, 4)).getIntFactory();
     final IntIndexOutput output = factory.createOutput(dir, filename);
 
     if (VERBOSE) {