summaryrefslogtreecommitdiffstats
path: root/vespajlib
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-10-25 11:46:47 +0200
committerjonmv <venstad@gmail.com>2022-10-26 12:07:18 +0200
commit731208d1aef2d3fb107b9f4fbfc4a733f8569841 (patch)
tree35cec9078c40f5fc9f0c219e12afaf4e95c1f346 /vespajlib
parent74ab1c364fb11c46811cc12ed92807d06da674ff (diff)
Add IntegerCompressor.compressionMode
Diffstat (limited to 'vespajlib')
-rw-r--r--vespajlib/src/main/java/com/yahoo/compress/IntegerCompressor.java8
-rw-r--r--vespajlib/src/test/java/com/yahoo/compress/IntegerCompressorTest.java13
2 files changed, 21 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/compress/IntegerCompressor.java b/vespajlib/src/main/java/com/yahoo/compress/IntegerCompressor.java
index fada7243b95..42178fa3ffd 100644
--- a/vespajlib/src/main/java/com/yahoo/compress/IntegerCompressor.java
+++ b/vespajlib/src/main/java/com/yahoo/compress/IntegerCompressor.java
@@ -10,6 +10,14 @@ import java.nio.ByteBuffer;
*/
public class IntegerCompressor {
+ public enum Mode { NONE, COMPRESSED, COMPRESSED_POSITIVE; }
+
+ public static Mode compressionMode(int min, int max) {
+ if (min >= 0 && max < 1 << 30) return Mode.COMPRESSED_POSITIVE;
+ if (min > -1 << 29 && max < 1 << 29) return Mode.COMPRESSED;
+ return Mode.NONE;
+ }
+
public static void putCompressedNumber(int n, ByteBuffer buf) {
int negative = n < 0 ? 0x80 : 0x0;
if (negative != 0) {
diff --git a/vespajlib/src/test/java/com/yahoo/compress/IntegerCompressorTest.java b/vespajlib/src/test/java/com/yahoo/compress/IntegerCompressorTest.java
index 921ae6746be..c53a834659c 100644
--- a/vespajlib/src/test/java/com/yahoo/compress/IntegerCompressorTest.java
+++ b/vespajlib/src/test/java/com/yahoo/compress/IntegerCompressorTest.java
@@ -1,6 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.compress;
+import com.yahoo.compress.IntegerCompressor.Mode;
import org.junit.Test;
import java.nio.ByteBuffer;
@@ -91,6 +92,18 @@ public class IntegerCompressorTest {
assertThrows(IllegalArgumentException.class, () -> verifyNumber(-0x80000000, mx80000000)).getMessage());
}
+ @Test
+ public void testMode() {
+ assertEquals(Mode.NONE, IntegerCompressor.compressionMode(-0x80000000, 0x00000000));
+ assertEquals(Mode.NONE, IntegerCompressor.compressionMode(-0x20000000, 0x00000000));
+ assertEquals(Mode.NONE, IntegerCompressor.compressionMode(-0x00000001, 0x3fffffff));
+ assertEquals(Mode.COMPRESSED, IntegerCompressor.compressionMode(-0x1fffffff, 0x1fffffff));
+ assertEquals(Mode.COMPRESSED, IntegerCompressor.compressionMode(-0x1fffffff, -0x1fffffff));
+ assertEquals(Mode.COMPRESSED, IntegerCompressor.compressionMode(-0x1fffffff, 0x00000000));
+ assertEquals(Mode.COMPRESSED, IntegerCompressor.compressionMode(-0x00000001, 0x1fffffff));
+ assertEquals(Mode.COMPRESSED_POSITIVE, IntegerCompressor.compressionMode( 0x00000000, 0x00000000));
+ assertEquals(Mode.COMPRESSED_POSITIVE, IntegerCompressor.compressionMode( 0x00000000, 0x3fffffff));
+ assertEquals(Mode.COMPRESSED_POSITIVE, IntegerCompressor.compressionMode( 0x3fffffff, 0x3fffffff));
}
}