@@ -12,17 +12,22 @@ pub const Error = error{
12
12
MalformedHuffmanTree ,
13
13
MalformedFseTable ,
14
14
MalformedAccuracyLog ,
15
- EndOfStream ,
16
15
};
17
16
18
- fn decodeFseHuffmanTree (source : anytype , compressed_size : usize , buffer : []u8 , weights : * [256 ]u4 ) ! usize {
17
+ fn decodeFseHuffmanTree (
18
+ source : anytype ,
19
+ compressed_size : usize ,
20
+ buffer : []u8 ,
21
+ weights : * [256 ]u4 ,
22
+ ) ! usize {
19
23
var stream = std .io .limitedReader (source , compressed_size );
20
24
var bit_reader = readers .bitReader (stream .reader ());
21
25
22
26
var entries : [1 << 6 ]Table.Fse = undefined ;
23
27
const table_size = decodeFseTable (& bit_reader , 256 , 6 , & entries ) catch | err | switch (err ) {
24
28
error .MalformedAccuracyLog , error .MalformedFseTable = > | e | return e ,
25
29
error .EndOfStream = > return error .MalformedFseTable ,
30
+ else = > | e | return e ,
26
31
};
27
32
const accuracy_log = std .math .log2_int_ceil (usize , table_size );
28
33
@@ -46,15 +51,21 @@ fn decodeFseHuffmanTreeSlice(src: []const u8, compressed_size: usize, weights: *
46
51
};
47
52
const accuracy_log = std .math .log2_int_ceil (usize , table_size );
48
53
49
- const start_index = std .math .cast (usize , counting_reader .bytes_read ) orelse return error .MalformedHuffmanTree ;
54
+ const start_index = std .math .cast (usize , counting_reader .bytes_read ) orelse
55
+ return error .MalformedHuffmanTree ;
50
56
var huff_data = src [start_index .. compressed_size ];
51
57
var huff_bits : readers.ReverseBitReader = undefined ;
52
58
huff_bits .init (huff_data ) catch return error .MalformedHuffmanTree ;
53
59
54
60
return assignWeights (& huff_bits , accuracy_log , & entries , weights );
55
61
}
56
62
57
- fn assignWeights (huff_bits : * readers.ReverseBitReader , accuracy_log : usize , entries : * [1 << 6 ]Table.Fse , weights : * [256 ]u4 ) ! usize {
63
+ fn assignWeights (
64
+ huff_bits : * readers.ReverseBitReader ,
65
+ accuracy_log : usize ,
66
+ entries : * [1 << 6 ]Table.Fse ,
67
+ weights : * [256 ]u4 ,
68
+ ) ! usize {
58
69
var i : usize = 0 ;
59
70
var even_state : u32 = huff_bits .readBitsNoEof (u32 , accuracy_log ) catch return error .MalformedHuffmanTree ;
60
71
var odd_state : u32 = huff_bits .readBitsNoEof (u32 , accuracy_log ) catch return error .MalformedHuffmanTree ;
@@ -173,7 +184,10 @@ fn buildHuffmanTree(weights: *[256]u4, symbol_count: usize) error{MalformedHuffm
173
184
return tree ;
174
185
}
175
186
176
- pub fn decodeHuffmanTree (source : anytype , buffer : []u8 ) ! LiteralsSection.HuffmanTree {
187
+ pub fn decodeHuffmanTree (
188
+ source : anytype ,
189
+ buffer : []u8 ,
190
+ ) (@TypeOf (source ).Error || Error )! LiteralsSection.HuffmanTree {
177
191
const header = try source .readByte ();
178
192
var weights : [256 ]u4 = undefined ;
179
193
const symbol_count = if (header < 128 )
@@ -185,7 +199,10 @@ pub fn decodeHuffmanTree(source: anytype, buffer: []u8) !LiteralsSection.Huffman
185
199
return buildHuffmanTree (& weights , symbol_count );
186
200
}
187
201
188
- pub fn decodeHuffmanTreeSlice (src : []const u8 , consumed_count : * usize ) Error ! LiteralsSection.HuffmanTree {
202
+ pub fn decodeHuffmanTreeSlice (
203
+ src : []const u8 ,
204
+ consumed_count : * usize ,
205
+ ) Error ! LiteralsSection.HuffmanTree {
189
206
if (src .len == 0 ) return error .MalformedHuffmanTree ;
190
207
const header = src [0 ];
191
208
var bytes_read : usize = 1 ;
0 commit comments