From 40bca93884b12c31a8abd9ab50b5e494a5e4d874 Mon Sep 17 00:00:00 2001 From: Viktor Lofgren Date: Mon, 24 Jun 2024 13:56:43 +0200 Subject: [PATCH] (gamma) Minor clean-up --- .../marginalia/sequence/GammaCodedSequence.java | 15 ++++++++++++--- .../java/nu/marginalia/sequence/io/BitWriter.java | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/code/libraries/coded-sequence/java/nu/marginalia/sequence/GammaCodedSequence.java b/code/libraries/coded-sequence/java/nu/marginalia/sequence/GammaCodedSequence.java index a2335fbf..25caa2dc 100644 --- a/code/libraries/coded-sequence/java/nu/marginalia/sequence/GammaCodedSequence.java +++ b/code/libraries/coded-sequence/java/nu/marginalia/sequence/GammaCodedSequence.java @@ -17,8 +17,8 @@ import java.util.StringJoiner; public class GammaCodedSequence implements BinarySerializable, Iterable { private final ByteBuffer raw; - int startPos = 0; - int startLimit = 0; + private final int startPos; + private final int startLimit; /** Create a new GammaCodedSequence from a sequence of integers. * @@ -116,6 +116,9 @@ public class GammaCodedSequence implements BinarySerializable, Iterable return sj.toString(); } + /** Return the backing ByteBuffer of the sequence, configured with a position and limit + * that is equal to the relevant data range + */ public ByteBuffer buffer() { raw.position(startPos); raw.limit(startLimit); @@ -123,11 +126,17 @@ public class GammaCodedSequence implements BinarySerializable, Iterable return raw; } + /** Return the number of bytes used by the sequence in the buffer */ public int bufferSize() { - return raw.capacity(); + return startLimit - startPos; } + /** Return the number of items in the sequence */ public int valueCount() { + // if the first byte is zero, the sequence is empty and we can skip decoding + if (0 == raw.get(startPos)) + return 0; + return EliasGammaCodec.readCount(buffer()); } } diff --git a/code/libraries/coded-sequence/java/nu/marginalia/sequence/io/BitWriter.java b/code/libraries/coded-sequence/java/nu/marginalia/sequence/io/BitWriter.java index e5636064..f92876b1 100644 --- a/code/libraries/coded-sequence/java/nu/marginalia/sequence/io/BitWriter.java +++ b/code/libraries/coded-sequence/java/nu/marginalia/sequence/io/BitWriter.java @@ -88,7 +88,7 @@ public class BitWriter { var outBuffer = ByteBuffer.allocate(totalMeaningfulBytes); - outBuffer.put(underlying.array(), 0, totalMeaningfulBytes); + outBuffer.put(0, underlying, 0, totalMeaningfulBytes); outBuffer.position(0); outBuffer.limit(totalMeaningfulBytes);