mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 10:17:35 +00:00
LibCompress: Move CanonicalCode
in the Brotli
namespace
The class was an inner class of `BrotliDecompressionStream`, let's move it outside the `Stream` object in order to ease the access to user only interested in this part.
This commit is contained in:
parent
9248fd7f33
commit
96eace8390
2 changed files with 34 additions and 28 deletions
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
namespace Compress {
|
namespace Compress {
|
||||||
|
|
||||||
ErrorOr<size_t> BrotliDecompressionStream::CanonicalCode::read_symbol(LittleEndianInputBitStream& input_stream) const
|
ErrorOr<size_t> Brotli::CanonicalCode::read_symbol(LittleEndianInputBitStream& input_stream) const
|
||||||
{
|
{
|
||||||
size_t code_bits = 1;
|
size_t code_bits = 1;
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@ ErrorOr<size_t> BrotliDecompressionStream::read_variable_length()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<size_t> BrotliDecompressionStream::CanonicalCode::read_complex_prefix_code_length(LittleEndianInputBitStream& stream)
|
ErrorOr<size_t> Brotli::CanonicalCode::read_complex_prefix_code_length(LittleEndianInputBitStream& stream)
|
||||||
{
|
{
|
||||||
// Symbol Code
|
// Symbol Code
|
||||||
// ------ ----
|
// ------ ----
|
||||||
|
@ -171,7 +171,7 @@ ErrorOr<size_t> BrotliDecompressionStream::CanonicalCode::read_complex_prefix_co
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<BrotliDecompressionStream::CanonicalCode> BrotliDecompressionStream::CanonicalCode::read_prefix_code(LittleEndianInputBitStream& stream, size_t alphabet_size)
|
ErrorOr<Brotli::CanonicalCode> Brotli::CanonicalCode::read_prefix_code(LittleEndianInputBitStream& stream, size_t alphabet_size)
|
||||||
{
|
{
|
||||||
size_t hskip = TRY(stream.read_bits(2));
|
size_t hskip = TRY(stream.read_bits(2));
|
||||||
|
|
||||||
|
@ -181,7 +181,7 @@ ErrorOr<BrotliDecompressionStream::CanonicalCode> BrotliDecompressionStream::Can
|
||||||
return TRY(read_complex_prefix_code(stream, alphabet_size, hskip));
|
return TRY(read_complex_prefix_code(stream, alphabet_size, hskip));
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<BrotliDecompressionStream::CanonicalCode> BrotliDecompressionStream::CanonicalCode::read_simple_prefix_code(LittleEndianInputBitStream& stream, size_t alphabet_size)
|
ErrorOr<Brotli::CanonicalCode> Brotli::CanonicalCode::read_simple_prefix_code(LittleEndianInputBitStream& stream, size_t alphabet_size)
|
||||||
{
|
{
|
||||||
CanonicalCode code {};
|
CanonicalCode code {};
|
||||||
|
|
||||||
|
@ -230,7 +230,7 @@ ErrorOr<BrotliDecompressionStream::CanonicalCode> BrotliDecompressionStream::Can
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<BrotliDecompressionStream::CanonicalCode> BrotliDecompressionStream::CanonicalCode::read_complex_prefix_code(LittleEndianInputBitStream& stream, size_t alphabet_size, size_t hskip)
|
ErrorOr<Brotli::CanonicalCode> Brotli::CanonicalCode::read_complex_prefix_code(LittleEndianInputBitStream& stream, size_t alphabet_size, size_t hskip)
|
||||||
{
|
{
|
||||||
// hskip should only be 0, 2 or 3
|
// hskip should only be 0, 2 or 3
|
||||||
VERIFY(hskip != 1);
|
VERIFY(hskip != 1);
|
||||||
|
@ -259,7 +259,7 @@ ErrorOr<BrotliDecompressionStream::CanonicalCode> BrotliDecompressionStream::Can
|
||||||
return Error::from_string_literal("invalid prefix code");
|
return Error::from_string_literal("invalid prefix code");
|
||||||
}
|
}
|
||||||
|
|
||||||
BrotliDecompressionStream::CanonicalCode temp_code;
|
CanonicalCode temp_code;
|
||||||
if (number_of_non_zero_symbols > 1) {
|
if (number_of_non_zero_symbols > 1) {
|
||||||
size_t code_value = 0;
|
size_t code_value = 0;
|
||||||
for (size_t bits = 1; bits <= 5; bits++) {
|
for (size_t bits = 1; bits <= 5; bits++) {
|
||||||
|
|
|
@ -13,7 +13,35 @@
|
||||||
|
|
||||||
namespace Compress {
|
namespace Compress {
|
||||||
|
|
||||||
|
namespace Brotli {
|
||||||
|
|
||||||
|
class CanonicalCode {
|
||||||
|
public:
|
||||||
|
CanonicalCode() = default;
|
||||||
|
|
||||||
|
static ErrorOr<CanonicalCode> read_prefix_code(LittleEndianInputBitStream&, size_t alphabet_size);
|
||||||
|
static ErrorOr<CanonicalCode> read_simple_prefix_code(LittleEndianInputBitStream&, size_t alphabet_size);
|
||||||
|
static ErrorOr<CanonicalCode> read_complex_prefix_code(LittleEndianInputBitStream&, size_t alphabet_size, size_t hskip);
|
||||||
|
|
||||||
|
ErrorOr<size_t> read_symbol(LittleEndianInputBitStream&) const;
|
||||||
|
void clear()
|
||||||
|
{
|
||||||
|
m_symbol_codes.clear();
|
||||||
|
m_symbol_values.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
static ErrorOr<size_t> read_complex_prefix_code_length(LittleEndianInputBitStream&);
|
||||||
|
|
||||||
|
Vector<size_t> m_symbol_codes;
|
||||||
|
Vector<size_t> m_symbol_values;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
class BrotliDecompressionStream : public Stream {
|
class BrotliDecompressionStream : public Stream {
|
||||||
|
using CanonicalCode = Brotli::CanonicalCode;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum class State {
|
enum class State {
|
||||||
WindowSize,
|
WindowSize,
|
||||||
|
@ -26,28 +54,6 @@ public:
|
||||||
CompressedDictionary,
|
CompressedDictionary,
|
||||||
};
|
};
|
||||||
|
|
||||||
class CanonicalCode {
|
|
||||||
public:
|
|
||||||
CanonicalCode() = default;
|
|
||||||
|
|
||||||
static ErrorOr<CanonicalCode> read_prefix_code(LittleEndianInputBitStream&, size_t alphabet_size);
|
|
||||||
static ErrorOr<CanonicalCode> read_simple_prefix_code(LittleEndianInputBitStream&, size_t alphabet_size);
|
|
||||||
static ErrorOr<CanonicalCode> read_complex_prefix_code(LittleEndianInputBitStream&, size_t alphabet_size, size_t hskip);
|
|
||||||
|
|
||||||
ErrorOr<size_t> read_symbol(LittleEndianInputBitStream&) const;
|
|
||||||
void clear()
|
|
||||||
{
|
|
||||||
m_symbol_codes.clear();
|
|
||||||
m_symbol_values.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
static ErrorOr<size_t> read_complex_prefix_code_length(LittleEndianInputBitStream&);
|
|
||||||
|
|
||||||
Vector<size_t> m_symbol_codes;
|
|
||||||
Vector<size_t> m_symbol_values;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Block {
|
struct Block {
|
||||||
size_t type;
|
size_t type;
|
||||||
size_t type_previous;
|
size_t type_previous;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue