diff options
author | Eugene Kliuchnikov <eustas.ru@gmail.com> | 2021-01-18 10:56:39 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-18 10:56:39 +0100 |
commit | 5692e422da6af1e991f9182345d58df87866bc5e (patch) | |
tree | 8d0f6aac7513439ef557401b2cb266d39936c3fb /java | |
parent | f16845614dd2c5a7de054a6dd9617296d7e25c30 (diff) | |
download | brotli-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.java | 2 | ||||
-rw-r--r-- | java/org/brotli/dec/Decode.java | 2 | ||||
-rw-r--r-- | java/org/brotli/dec/Dictionary.java | 28 | ||||
-rw-r--r-- | java/org/brotli/dec/DictionaryData.java | 11 | ||||
-rw-r--r-- | java/org/brotli/dec/Utils.java | 13 |
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(); |