diff --git a/src/main/java/gr/aueb/compression/gorilla/Compressor32.java b/src/main/java/gr/aueb/compression/gorilla/Compressor32.java index a11bff1..75c1f89 100644 --- a/src/main/java/gr/aueb/compression/gorilla/Compressor32.java +++ b/src/main/java/gr/aueb/compression/gorilla/Compressor32.java @@ -130,7 +130,12 @@ private void writeNewLeading(int xor, int leadingZeros, int trailingZeros) { out.writeBits(leadingZeros, 4); // Number of leading zeros in the next 4 bits int significantBits = 32 - leadingZeros - trailingZeros; - out.writeBits(significantBits, 6); // Length of meaningful bits in the next 5 bits + if (significantBits == 32) { + out.writeBits(0, 5); // Length of meaningful bits in the next 5 bits + } else { + out.writeBits(significantBits, 5); // Length of meaningful bits in the next 5 bits + } + out.writeBits(xor >>> trailingZeros, significantBits); // Store the meaningful bits of XOR storedLeadingZeros = leadingZeros; diff --git a/src/main/java/gr/aueb/compression/gorilla/Decompressor32.java b/src/main/java/gr/aueb/compression/gorilla/Decompressor32.java index 9577d10..cf5eb5a 100644 --- a/src/main/java/gr/aueb/compression/gorilla/Decompressor32.java +++ b/src/main/java/gr/aueb/compression/gorilla/Decompressor32.java @@ -59,7 +59,7 @@ private void nextValue() { // New leading and trailing zeros storedLeadingZeros = (int) in.getLong(4); - byte significantBits = (byte) in.getLong(6); + byte significantBits = (byte) in.getLong(5); if(significantBits == 0) { significantBits = 32; } diff --git a/src/main/java/gr/aueb/compression/gorilla/LossyCompressor32.java b/src/main/java/gr/aueb/compression/gorilla/LossyCompressor32.java index 59d4ab4..fc45d12 100644 --- a/src/main/java/gr/aueb/compression/gorilla/LossyCompressor32.java +++ b/src/main/java/gr/aueb/compression/gorilla/LossyCompressor32.java @@ -19,7 +19,6 @@ public class LossyCompressor32 { private float trailingDiff; private float leadingDiff; - private BitOutput out; private int logOfError; @@ -158,12 +157,15 @@ private void writeNewLeading(int xor, int leadingZeros, int trailingZeros) { out.writeBits(leadingZeros, 4); // Number of leading zeros in the next 4 bits int significantBits = 32 - leadingZeros - trailingZeros; - out.writeBits(significantBits, 6); // Length of meaningful bits in the next 5 bits + if (significantBits == 32) { + out.writeBits(0, 5); // Length of meaningful bits in the next 5 bits + } else { + out.writeBits(significantBits, 5); // Length of meaningful bits in the next 5 bits + } out.writeBits(xor >>> trailingZeros, significantBits); // Store the meaningful bits of XOR storedLeadingZeros = leadingZeros; storedTrailingZeros = trailingZeros; - size += 1 + 4 + 5 + significantBits; }