aboutsummaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorEugene Kliuchnikov <eustas.ru@gmail.com>2021-01-18 10:56:39 +0100
committerGitHub <noreply@github.com>2021-01-18 10:56:39 +0100
commit5692e422da6af1e991f9182345d58df87866bc5e (patch)
tree8d0f6aac7513439ef557401b2cb266d39936c3fb /java
parentf16845614dd2c5a7de054a6dd9617296d7e25c30 (diff)
downloadbrotli-5692e422da6af1e991f9182345d58df87866bc5e.zip
brotli-5692e422da6af1e991f9182345d58df87866bc5e.tar.gz
brotli-5692e422da6af1e991f9182345d58df87866bc5e.tar.bz2
Update (#852)
* Update * comments and clarifications in block_splitter * power-of-2 aligned allocations for Hasher * refresh decode.js from Java sources * disable JS build
Diffstat (limited to 'java')
-rw-r--r--java/org/brotli/dec/BitReader.java2
-rw-r--r--java/org/brotli/dec/Decode.java2
-rw-r--r--java/org/brotli/dec/Dictionary.java28
-rw-r--r--java/org/brotli/dec/DictionaryData.java11
-rw-r--r--java/org/brotli/dec/Utils.java13
5 files changed, 35 insertions, 21 deletions
diff --git a/java/org/brotli/dec/BitReader.java b/java/org/brotli/dec/BitReader.java
index 6dfeedc..0fb4bfa 100644
--- a/java/org/brotli/dec/BitReader.java
+++ b/java/org/brotli/dec/BitReader.java
@@ -211,7 +211,7 @@ final class BitReader {
return limit - s.halfOffset;
}
- static void copyBytes(State s, byte[] data, int offset, int length) {
+ static void copyRawBytes(State s, byte[] data, int offset, int length) {
if ((s.bitOffset & 7) != 0) {
throw new BrotliRuntimeException("Unaligned copyBytes");
}
diff --git a/java/org/brotli/dec/Decode.java b/java/org/brotli/dec/Decode.java
index 8395f04..da7c453 100644
--- a/java/org/brotli/dec/Decode.java
+++ b/java/org/brotli/dec/Decode.java
@@ -903,7 +903,7 @@ final class Decode {
}
int chunkLength = Math.min(s.ringBufferSize - s.pos, s.metaBlockLength);
- BitReader.copyBytes(s, ringBuffer, s.pos, chunkLength);
+ BitReader.copyRawBytes(s, ringBuffer, s.pos, chunkLength);
s.metaBlockLength -= chunkLength;
s.pos += chunkLength;
if (s.pos == s.ringBufferSize) {
diff --git a/java/org/brotli/dec/Dictionary.java b/java/org/brotli/dec/Dictionary.java
index 043572f..458e597 100644
--- a/java/org/brotli/dec/Dictionary.java
+++ b/java/org/brotli/dec/Dictionary.java
@@ -21,7 +21,7 @@ public final class Dictionary {
static final int MIN_DICTIONARY_WORD_LENGTH = 4;
static final int MAX_DICTIONARY_WORD_LENGTH = 31;
- private static ByteBuffer data;
+ private static ByteBuffer data = null;
static final int[] offsets = new int[32];
static final int[] sizeBits = new int[32];
@@ -39,45 +39,45 @@ public final class Dictionary {
}
}
- public static void setData(ByteBuffer data, int[] sizeBits) {
- if (!data.isDirect() || !data.isReadOnly()) {
- throw new BrotliRuntimeException("data must be a direct read-only byte buffer");
+ public static void setData(ByteBuffer newData, int[] newSizeBits) {
+ if ((Utils.isDirect(newData) == 0) || (Utils.isReadOnly(newData) == 0)) {
+ throw new BrotliRuntimeException("newData must be a direct read-only byte buffer");
}
// TODO: is that so?
- if (sizeBits.length > MAX_DICTIONARY_WORD_LENGTH) {
+ if (newSizeBits.length > MAX_DICTIONARY_WORD_LENGTH) {
throw new BrotliRuntimeException(
"sizeBits length must be at most " + MAX_DICTIONARY_WORD_LENGTH);
}
for (int i = 0; i < MIN_DICTIONARY_WORD_LENGTH; ++i) {
- if (sizeBits[i] != 0) {
+ if (newSizeBits[i] != 0) {
throw new BrotliRuntimeException("first " + MIN_DICTIONARY_WORD_LENGTH + " must be 0");
}
}
int[] dictionaryOffsets = Dictionary.offsets;
int[] dictionarySizeBits = Dictionary.sizeBits;
- System.arraycopy(sizeBits, 0, dictionarySizeBits, 0, sizeBits.length);
+ System.arraycopy(newSizeBits, 0, dictionarySizeBits, 0, newSizeBits.length);
int pos = 0;
- int limit = data.capacity();
- for (int i = 0; i < sizeBits.length; ++i) {
+ int limit = newData.capacity();
+ for (int i = 0; i < newSizeBits.length; ++i) {
dictionaryOffsets[i] = pos;
int bits = dictionarySizeBits[i];
if (bits != 0) {
if (bits >= 31) {
- throw new BrotliRuntimeException("sizeBits values must be less than 31");
+ throw new BrotliRuntimeException("newSizeBits values must be less than 31");
}
pos += i << bits;
if (pos <= 0 || pos > limit) {
- throw new BrotliRuntimeException("sizeBits is inconsistent: overflow");
+ throw new BrotliRuntimeException("newSizeBits is inconsistent: overflow");
}
}
}
- for (int i = sizeBits.length; i < 32; ++i) {
+ for (int i = newSizeBits.length; i < 32; ++i) {
dictionaryOffsets[i] = pos;
}
if (pos != limit) {
- throw new BrotliRuntimeException("sizeBits is inconsistent: underflow");
+ throw new BrotliRuntimeException("newSizeBits is inconsistent: underflow");
}
- Dictionary.data = data;
+ Dictionary.data = newData;
}
public static ByteBuffer getData() {
diff --git a/java/org/brotli/dec/DictionaryData.java b/java/org/brotli/dec/DictionaryData.java
index db281e3..4a8450c 100644
--- a/java/org/brotli/dec/DictionaryData.java
+++ b/java/org/brotli/dec/DictionaryData.java
@@ -62,10 +62,11 @@ final class DictionaryData {
}
static {
- ByteBuffer dictionary = ByteBuffer.allocateDirect(122784);
- int[] sizeBits = new int[25];
- unpackDictionaryData(dictionary, DATA0, DATA1, SKIP_FLIP, sizeBits, SIZE_BITS_DATA);
- Utils.flipBuffer(dictionary);
- Dictionary.setData(dictionary.asReadOnlyBuffer(), sizeBits);
+ ByteBuffer dictionaryData = ByteBuffer.allocateDirect(122784);
+ int[] dictionarySizeBits = new int[25];
+ unpackDictionaryData(
+ dictionaryData, DATA0, DATA1, SKIP_FLIP, dictionarySizeBits, SIZE_BITS_DATA);
+ Utils.flipBuffer(dictionaryData);
+ Dictionary.setData(Utils.asReadOnlyBuffer(dictionaryData), dictionarySizeBits);
}
}
diff --git a/java/org/brotli/dec/Utils.java b/java/org/brotli/dec/Utils.java
index 3fb2bfa..cc4a9f0 100644
--- a/java/org/brotli/dec/Utils.java
+++ b/java/org/brotli/dec/Utils.java
@@ -10,6 +10,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.nio.Buffer;
+import java.nio.ByteBuffer;
/**
* A set of utility methods.
@@ -88,6 +89,18 @@ final class Utils {
}
}
+ static ByteBuffer asReadOnlyBuffer(ByteBuffer src) {
+ return src.asReadOnlyBuffer();
+ }
+
+ static int isReadOnly(ByteBuffer src) {
+ return src.isReadOnly() ? 1 : 0;
+ }
+
+ static int isDirect(ByteBuffer src) {
+ return src.isDirect() ? 1 : 0;
+ }
+
// Crazy pills factory: code compiled for JDK8 does not work on JRE9.
static void flipBuffer(Buffer buffer) {
buffer.flip();