brotli 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/brotli/brotli.cc +114 -24
- data/ext/brotli/brotli.h +0 -1
- data/ext/brotli/extconf.rb +30 -23
- data/lib/brotli/version.rb +1 -1
- data/vendor/brotli/LICENSE +1 -1
- data/vendor/brotli/dec/Makefile +1 -1
- data/vendor/brotli/dec/bit_reader.c +3 -3
- data/vendor/brotli/dec/bit_reader.h +25 -27
- data/vendor/brotli/dec/context.h +4 -4
- data/vendor/brotli/dec/decode.c +410 -486
- data/vendor/brotli/dec/decode.h +101 -105
- data/vendor/brotli/dec/dictionary.c +1 -1
- data/vendor/brotli/dec/dictionary.h +7 -8
- data/vendor/brotli/dec/huffman.c +103 -105
- data/vendor/brotli/dec/huffman.h +18 -18
- data/vendor/brotli/dec/port.h +52 -40
- data/vendor/brotli/dec/prefix.h +2 -0
- data/vendor/brotli/dec/state.c +13 -19
- data/vendor/brotli/dec/state.h +25 -39
- data/vendor/brotli/dec/transform.h +38 -44
- data/vendor/brotli/dec/types.h +2 -2
- data/vendor/brotli/enc/Makefile +1 -1
- data/vendor/brotli/enc/backward_references.cc +455 -359
- data/vendor/brotli/enc/backward_references.h +79 -3
- data/vendor/brotli/enc/bit_cost.h +54 -32
- data/vendor/brotli/enc/block_splitter.cc +285 -193
- data/vendor/brotli/enc/block_splitter.h +4 -12
- data/vendor/brotli/enc/brotli_bit_stream.cc +623 -324
- data/vendor/brotli/enc/brotli_bit_stream.h +76 -37
- data/vendor/brotli/enc/cluster.h +161 -120
- data/vendor/brotli/enc/command.h +60 -37
- data/vendor/brotli/enc/compress_fragment.cc +701 -0
- data/vendor/brotli/enc/compress_fragment.h +47 -0
- data/vendor/brotli/enc/compress_fragment_two_pass.cc +524 -0
- data/vendor/brotli/enc/compress_fragment_two_pass.h +40 -0
- data/vendor/brotli/enc/compressor.h +15 -0
- data/vendor/brotli/enc/context.h +1 -1
- data/vendor/brotli/enc/dictionary.h +2 -2
- data/vendor/brotli/enc/encode.cc +819 -286
- data/vendor/brotli/enc/encode.h +38 -15
- data/vendor/brotli/enc/encode_parallel.cc +40 -42
- data/vendor/brotli/enc/entropy_encode.cc +144 -147
- data/vendor/brotli/enc/entropy_encode.h +32 -8
- data/vendor/brotli/enc/entropy_encode_static.h +572 -0
- data/vendor/brotli/enc/fast_log.h +7 -40
- data/vendor/brotli/enc/find_match_length.h +9 -9
- data/vendor/brotli/enc/hash.h +462 -154
- data/vendor/brotli/enc/histogram.cc +6 -6
- data/vendor/brotli/enc/histogram.h +13 -13
- data/vendor/brotli/enc/literal_cost.cc +45 -45
- data/vendor/brotli/enc/metablock.cc +92 -89
- data/vendor/brotli/enc/metablock.h +12 -12
- data/vendor/brotli/enc/port.h +7 -16
- data/vendor/brotli/enc/prefix.h +23 -22
- data/vendor/brotli/enc/ringbuffer.h +75 -29
- data/vendor/brotli/enc/static_dict.cc +56 -48
- data/vendor/brotli/enc/static_dict.h +5 -5
- data/vendor/brotli/enc/streams.cc +1 -1
- data/vendor/brotli/enc/streams.h +5 -5
- data/vendor/brotli/enc/transform.h +40 -35
- data/vendor/brotli/enc/types.h +2 -0
- data/vendor/brotli/enc/utf8_util.cc +3 -2
- data/vendor/brotli/enc/write_bits.h +6 -6
- metadata +9 -5
- data/vendor/brotli/dec/streams.c +0 -102
- data/vendor/brotli/dec/streams.h +0 -95
data/vendor/brotli/enc/command.h
CHANGED
@@ -15,21 +15,21 @@
|
|
15
15
|
|
16
16
|
namespace brotli {
|
17
17
|
|
18
|
-
static
|
19
|
-
98, 130, 194, 322, 578, 1090, 2114, 6210, 22594 };
|
20
|
-
static
|
21
|
-
5, 6, 7, 8, 9, 10, 12, 14, 24 };
|
22
|
-
static
|
23
|
-
54, 70, 102, 134, 198, 326, 582, 1094, 2118 };
|
24
|
-
static
|
25
|
-
|
26
|
-
|
27
|
-
static inline uint16_t GetInsertLengthCode(
|
18
|
+
static uint32_t kInsBase[] = { 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50,
|
19
|
+
66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594 };
|
20
|
+
static uint32_t kInsExtra[] = { 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
|
21
|
+
5, 5, 6, 7, 8, 9, 10, 12, 14, 24 };
|
22
|
+
static uint32_t kCopyBase[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 18, 22, 30,
|
23
|
+
38, 54, 70, 102, 134, 198, 326, 582, 1094, 2118 };
|
24
|
+
static uint32_t kCopyExtra[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3,
|
25
|
+
4, 4, 5, 5, 6, 7, 8, 9, 10, 24 };
|
26
|
+
|
27
|
+
static inline uint16_t GetInsertLengthCode(size_t insertlen) {
|
28
28
|
if (insertlen < 6) {
|
29
29
|
return static_cast<uint16_t>(insertlen);
|
30
30
|
} else if (insertlen < 130) {
|
31
31
|
insertlen -= 2;
|
32
|
-
|
32
|
+
uint32_t nbits = Log2FloorNonZero(insertlen) - 1u;
|
33
33
|
return static_cast<uint16_t>((nbits << 1) + (insertlen >> nbits) + 2);
|
34
34
|
} else if (insertlen < 2114) {
|
35
35
|
return static_cast<uint16_t>(Log2FloorNonZero(insertlen - 66) + 10);
|
@@ -42,12 +42,12 @@ static inline uint16_t GetInsertLengthCode(int insertlen) {
|
|
42
42
|
}
|
43
43
|
}
|
44
44
|
|
45
|
-
static inline uint16_t GetCopyLengthCode(
|
45
|
+
static inline uint16_t GetCopyLengthCode(size_t copylen) {
|
46
46
|
if (copylen < 10) {
|
47
47
|
return static_cast<uint16_t>(copylen - 2);
|
48
48
|
} else if (copylen < 134) {
|
49
49
|
copylen -= 6;
|
50
|
-
|
50
|
+
uint32_t nbits = Log2FloorNonZero(copylen) - 1u;
|
51
51
|
return static_cast<uint16_t>((nbits << 1) + (copylen >> nbits) + 4);
|
52
52
|
} else if (copylen < 2118) {
|
53
53
|
return static_cast<uint16_t>(Log2FloorNonZero(copylen - 70) + 12);
|
@@ -71,61 +71,84 @@ static inline uint16_t CombineLengthCodes(
|
|
71
71
|
}
|
72
72
|
}
|
73
73
|
|
74
|
-
static inline void GetLengthCode(
|
74
|
+
static inline void GetLengthCode(size_t insertlen, size_t copylen,
|
75
75
|
bool use_last_distance,
|
76
|
-
uint16_t* code
|
76
|
+
uint16_t* code) {
|
77
77
|
uint16_t inscode = GetInsertLengthCode(insertlen);
|
78
78
|
uint16_t copycode = GetCopyLengthCode(copylen);
|
79
|
-
uint64_t insnumextra = insextra[inscode];
|
80
|
-
uint64_t numextra = insnumextra + copyextra[copycode];
|
81
|
-
uint64_t insextraval = insertlen - insbase[inscode];
|
82
|
-
uint64_t copyextraval = copylen - copybase[copycode];
|
83
79
|
*code = CombineLengthCodes(inscode, copycode, use_last_distance);
|
84
|
-
|
80
|
+
}
|
81
|
+
|
82
|
+
static inline uint32_t GetInsertBase(uint16_t inscode) {
|
83
|
+
return kInsBase[inscode];
|
84
|
+
}
|
85
|
+
|
86
|
+
static inline uint32_t GetInsertExtra(uint16_t inscode) {
|
87
|
+
return kInsExtra[inscode];
|
88
|
+
}
|
89
|
+
|
90
|
+
static inline uint32_t GetCopyBase(uint16_t copycode) {
|
91
|
+
return kCopyBase[copycode];
|
92
|
+
}
|
93
|
+
|
94
|
+
static inline uint32_t GetCopyExtra(uint16_t copycode) {
|
95
|
+
return kCopyExtra[copycode];
|
85
96
|
}
|
86
97
|
|
87
98
|
struct Command {
|
88
99
|
// distance_code is e.g. 0 for same-as-last short code, or 16 for offset 1.
|
89
|
-
Command(
|
90
|
-
|
100
|
+
Command(size_t insertlen, size_t copylen, size_t copylen_code,
|
101
|
+
size_t distance_code)
|
102
|
+
: insert_len_(static_cast<uint32_t>(insertlen)) {
|
103
|
+
copy_len_ = static_cast<uint32_t>(
|
104
|
+
copylen | ((copylen_code ^ copylen) << 24));
|
91
105
|
// The distance prefix and extra bits are stored in this Command as if
|
92
106
|
// npostfix and ndirect were 0, they are only recomputed later after the
|
93
107
|
// clustering if needed.
|
94
108
|
PrefixEncodeCopyDistance(distance_code, 0, 0, &dist_prefix_, &dist_extra_);
|
95
109
|
GetLengthCode(insertlen, copylen_code, dist_prefix_ == 0,
|
96
|
-
&cmd_prefix_
|
110
|
+
&cmd_prefix_);
|
97
111
|
}
|
98
112
|
|
99
|
-
Command(
|
100
|
-
: insert_len_(insertlen)
|
101
|
-
|
113
|
+
explicit Command(size_t insertlen)
|
114
|
+
: insert_len_(static_cast<uint32_t>(insertlen))
|
115
|
+
, copy_len_(4 << 24), dist_extra_(0), dist_prefix_(16) {
|
116
|
+
GetLengthCode(insertlen, 4, dist_prefix_ == 0, &cmd_prefix_);
|
102
117
|
}
|
103
118
|
|
104
|
-
|
119
|
+
uint32_t DistanceCode(void) const {
|
105
120
|
if (dist_prefix_ < 16) {
|
106
121
|
return dist_prefix_;
|
107
122
|
}
|
108
|
-
|
109
|
-
|
110
|
-
|
123
|
+
uint32_t nbits = dist_extra_ >> 24;
|
124
|
+
uint32_t extra = dist_extra_ & 0xffffff;
|
125
|
+
uint32_t prefix = dist_prefix_ - 12 - 2 * nbits;
|
111
126
|
return (prefix << nbits) + extra + 12;
|
112
127
|
}
|
113
128
|
|
114
|
-
|
115
|
-
|
116
|
-
|
129
|
+
uint32_t DistanceContext(void) const {
|
130
|
+
uint32_t r = cmd_prefix_ >> 6;
|
131
|
+
uint32_t c = cmd_prefix_ & 7;
|
117
132
|
if ((r == 0 || r == 2 || r == 4 || r == 7) && (c <= 2)) {
|
118
133
|
return c;
|
119
134
|
}
|
120
135
|
return 3;
|
121
136
|
}
|
122
137
|
|
123
|
-
|
124
|
-
|
138
|
+
inline uint32_t copy_len(void) const {
|
139
|
+
return copy_len_ & 0xFFFFFF;
|
140
|
+
}
|
141
|
+
|
142
|
+
inline uint32_t copy_len_code(void) const {
|
143
|
+
return (copy_len_ & 0xFFFFFF) ^ (copy_len_ >> 24);
|
144
|
+
}
|
145
|
+
|
146
|
+
uint32_t insert_len_;
|
147
|
+
/* Stores copy_len in low 24 bits and copy_len XOR copy_code in high 8 bit. */
|
148
|
+
uint32_t copy_len_;
|
149
|
+
uint32_t dist_extra_;
|
125
150
|
uint16_t cmd_prefix_;
|
126
151
|
uint16_t dist_prefix_;
|
127
|
-
uint64_t cmd_extra_;
|
128
|
-
uint32_t dist_extra_;
|
129
152
|
};
|
130
153
|
|
131
154
|
} // namespace brotli
|