mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-04 14:48:47 +00:00
Merge pull request #1449 from Kelimion/zlib_change
zlib: update Huffman builder.
This commit is contained in:
@@ -111,9 +111,9 @@ ZFAST_MASK :: ((1 << ZFAST_BITS) - 1)
|
|||||||
*/
|
*/
|
||||||
Huffman_Table :: struct {
|
Huffman_Table :: struct {
|
||||||
fast: [1 << ZFAST_BITS]u16,
|
fast: [1 << ZFAST_BITS]u16,
|
||||||
firstcode: [16]u16,
|
firstcode: [17]u16,
|
||||||
maxcode: [17]int,
|
maxcode: [17]int,
|
||||||
firstsymbol: [16]u16,
|
firstsymbol: [17]u16,
|
||||||
size: [288]u8,
|
size: [288]u8,
|
||||||
value: [288]u16,
|
value: [288]u16,
|
||||||
}
|
}
|
||||||
@@ -244,7 +244,7 @@ allocate_huffman_table :: proc(allocator := context.allocator) -> (z: ^Huffman_T
|
|||||||
@(optimization_mode="speed")
|
@(optimization_mode="speed")
|
||||||
build_huffman :: proc(z: ^Huffman_Table, code_lengths: []u8) -> (err: Error) {
|
build_huffman :: proc(z: ^Huffman_Table, code_lengths: []u8) -> (err: Error) {
|
||||||
sizes: [HUFFMAN_MAX_BITS+1]int
|
sizes: [HUFFMAN_MAX_BITS+1]int
|
||||||
next_code: [HUFFMAN_MAX_BITS]int
|
next_code: [HUFFMAN_MAX_BITS+1]int
|
||||||
|
|
||||||
k := int(0)
|
k := int(0)
|
||||||
|
|
||||||
@@ -256,14 +256,14 @@ build_huffman :: proc(z: ^Huffman_Table, code_lengths: []u8) -> (err: Error) {
|
|||||||
}
|
}
|
||||||
sizes[0] = 0
|
sizes[0] = 0
|
||||||
|
|
||||||
for i in 1..<(HUFFMAN_MAX_BITS+1) {
|
for i in 1 ..< HUFFMAN_MAX_BITS {
|
||||||
if sizes[i] > (1 << uint(i)) {
|
if sizes[i] > (1 << uint(i)) {
|
||||||
return E_Deflate.Huffman_Bad_Sizes
|
return E_Deflate.Huffman_Bad_Sizes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
code := int(0)
|
code := int(0)
|
||||||
|
|
||||||
for i in 1..<HUFFMAN_MAX_BITS {
|
for i in 1 ..= HUFFMAN_MAX_BITS {
|
||||||
next_code[i] = code
|
next_code[i] = code
|
||||||
z.firstcode[i] = u16(code)
|
z.firstcode[i] = u16(code)
|
||||||
z.firstsymbol[i] = u16(k)
|
z.firstsymbol[i] = u16(k)
|
||||||
|
|||||||
Reference in New Issue
Block a user