aboutsummaryrefslogtreecommitdiff
path: root/core/compress/zlib
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-04-30 10:58:29 +0100
committergingerBill <bill@gingerbill.org>2021-04-30 10:58:29 +0100
commit5f617c56e17ce33ca9be5cfd051deb640fb8200b (patch)
treeed34915662f98b517565f26880858a48b68df551 /core/compress/zlib
parent7ef30355cbf234aa48b6ee1ad013fb46af27d8dc (diff)
Minor stylistic code changes to compress and image packages
Diffstat (limited to 'core/compress/zlib')
-rw-r--r--core/compress/zlib/example.odin22
-rw-r--r--core/compress/zlib/zlib.odin133
2 files changed, 78 insertions, 77 deletions
diff --git a/core/compress/zlib/example.odin b/core/compress/zlib/example.odin
index a7fa76d62..0906d7eef 100644
--- a/core/compress/zlib/example.odin
+++ b/core/compress/zlib/example.odin
@@ -7,30 +7,30 @@ import "core:fmt"
main :: proc() {
- ODIN_DEMO: []u8 = {
+ ODIN_DEMO := []u8{
120, 156, 101, 144, 77, 110, 131, 48, 16, 133, 215, 204, 41, 158, 44,
- 69, 73, 32, 148, 182, 75, 35, 14, 208, 125, 47, 96, 185, 195, 143,
+ 69, 73, 32, 148, 182, 75, 35, 14, 208, 125, 47, 96, 185, 195, 143,
130, 13, 50, 38, 81, 84, 101, 213, 75, 116, 215, 43, 246, 8, 53,
- 82, 126, 8, 181, 188, 152, 153, 111, 222, 147, 159, 123, 165, 247, 170,
- 98, 24, 213, 88, 162, 198, 244, 157, 243, 16, 186, 115, 44, 75, 227,
- 5, 77, 115, 72, 137, 222, 117, 122, 179, 197, 39, 69, 161, 170, 156,
- 50, 144, 5, 68, 130, 4, 49, 126, 127, 190, 191, 144, 34, 19, 57,
- 69, 74, 235, 209, 140, 173, 242, 157, 155, 54, 158, 115, 162, 168, 12,
+ 82, 126, 8, 181, 188, 152, 153, 111, 222, 147, 159, 123, 165, 247, 170,
+ 98, 24, 213, 88, 162, 198, 244, 157, 243, 16, 186, 115, 44, 75, 227,
+ 5, 77, 115, 72, 137, 222, 117, 122, 179, 197, 39, 69, 161, 170, 156,
+ 50, 144, 5, 68, 130, 4, 49, 126, 127, 190, 191, 144, 34, 19, 57,
+ 69, 74, 235, 209, 140, 173, 242, 157, 155, 54, 158, 115, 162, 168, 12,
181, 239, 246, 108, 17, 188, 174, 242, 224, 20, 13, 199, 198, 235, 250,
194, 166, 129, 86, 3, 99, 157, 172, 37, 230, 62, 73, 129, 151, 252,
70, 211, 5, 77, 31, 104, 188, 160, 113, 129, 215, 59, 205, 22, 52,
123, 160, 83, 142, 255, 242, 89, 123, 93, 149, 200, 50, 188, 85, 54,
252, 18, 248, 192, 238, 228, 235, 198, 86, 224, 118, 224, 176, 113, 166,
112, 67, 106, 227, 159, 122, 215, 88, 95, 110, 196, 123, 205, 183, 224,
- 98, 53, 8, 104, 213, 234, 201, 147, 7, 248, 192, 14, 170, 29, 25,
+ 98, 53, 8, 104, 213, 234, 201, 147, 7, 248, 192, 14, 170, 29, 25,
171, 15, 18, 59, 138, 112, 63, 23, 205, 110, 254, 136, 109, 78, 231,
- 63, 234, 138, 133, 204,
+ 63, 234, 138, 133, 204,
};
buf: bytes.Buffer;
// We can pass ", true" to inflate a raw DEFLATE stream instead of a ZLIB wrapped one.
- err := zlib.inflate(&ODIN_DEMO, &buf);
+ err := zlib.inflate(ODIN_DEMO, &buf);
defer bytes.buffer_destroy(&buf);
if !zlib.is_kind(err, zlib.E_General.OK) {
@@ -39,4 +39,4 @@ main :: proc() {
s := bytes.buffer_to_string(&buf);
fmt.printf("Input: %v bytes, output (%v bytes):\n%v\n", len(ODIN_DEMO), len(s), s);
assert(len(s) == 438);
-} \ No newline at end of file
+}
diff --git a/core/compress/zlib/zlib.odin b/core/compress/zlib/zlib.odin
index 34a7984a7..5ce1f26ad 100644
--- a/core/compress/zlib/zlib.odin
+++ b/core/compress/zlib/zlib.odin
@@ -21,8 +21,8 @@ Compression_Method :: enum u8 {
Compression_Level :: enum u8 {
Fastest = 0,
Fast = 1,
- Default = 2,
- Maximum = 3,
+ Default = 2,
+ Maximum = 3,
}
Options :: struct {
@@ -68,19 +68,19 @@ Z_LENGTH_DEZIGZAG := []u8{
};
Z_FIXED_LENGTH := [288]u8{
- 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
- 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
- 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
- 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
- 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
- 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
- 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
- 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
- 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,
};
Z_FIXED_DIST := [32]u8{
- 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
};
/*
@@ -94,12 +94,12 @@ ZFAST_MASK :: ((1 << ZFAST_BITS) - 1);
JPEG packs from left, ZLIB from right. We can't share code.
*/
Huffman_Table :: struct {
- fast: [1 << ZFAST_BITS]u16,
- firstcode: [16]u16,
- maxcode: [17]int,
- firstsymbol: [16]u16,
- size: [288]u8,
- value: [288]u16,
+ fast: [1 << ZFAST_BITS]u16,
+ firstcode: [16]u16,
+ maxcode: [17]int,
+ firstsymbol: [16]u16,
+ size: [288]u8,
+ value: [288]u16,
};
// Implementation starts here
@@ -218,19 +218,19 @@ decode_huffman_slowpath :: proc(z: ^Context, t: ^Huffman_Table) -> (r: u16, err:
if (s >= 16) {
return 0, E_Deflate.Bad_Huffman_Code;
}
- // code size is s, so:
- b := (k >> (16-s)) - int(t.firstcode[s]) + int(t.firstsymbol[s]);
- if b >= size_of(t.size) {
- return 0, E_Deflate.Bad_Huffman_Code;
- }
- if t.size[b] != s {
- return 0, E_Deflate.Bad_Huffman_Code;
- }
-
- compress.consume_bits_lsb(z, s);
-
- r = t.value[b];
- return r, E_General.OK;
+ // code size is s, so:
+ b := (k >> (16-s)) - int(t.firstcode[s]) + int(t.firstsymbol[s]);
+ if b >= size_of(t.size) {
+ return 0, E_Deflate.Bad_Huffman_Code;
+ }
+ if t.size[b] != s {
+ return 0, E_Deflate.Bad_Huffman_Code;
+ }
+
+ compress.consume_bits_lsb(z, s);
+
+ r = t.value[b];
+ return r, E_General.OK;
}
decode_huffman :: proc(z: ^Context, t: ^Huffman_Table) -> (r: u16, err: Error) #no_bounds_check {
@@ -254,7 +254,6 @@ decode_huffman :: proc(z: ^Context, t: ^Huffman_Table) -> (r: u16, err: Error) #
}
parse_huffman_block :: proc(z: ^Context, z_repeat, z_offset: ^Huffman_Table) -> (err: Error) #no_bounds_check {
-
#no_bounds_check for {
value, e := decode_huffman(z, z_repeat);
if !is_kind(e, E_General.OK) {
@@ -267,8 +266,8 @@ parse_huffman_block :: proc(z: ^Context, z_repeat, z_offset: ^Huffman_Table) ->
}
} else {
if value == 256 {
- // End of block
- return E_General.OK;
+ // End of block
+ return E_General.OK;
}
value -= 257;
@@ -370,7 +369,7 @@ inflate_from_stream :: proc(using ctx: ^Context, raw := false, allocator := cont
}
fdict := (flg >> 5) & 1;
- /*
+ /*
We don't handle built-in dictionaries for now.
They're application specific and PNG doesn't use them.
*/
@@ -449,7 +448,8 @@ inflate_from_stream_raw :: proc(z: ^Context, allocator := context.allocator) ->
// log.debugf("Final: %v | Type: %v\n", final, type);
- if type == 0 {
+ switch type {
+ case 0:
// Uncompressed block
// Discard bits until next byte boundary
@@ -471,9 +471,9 @@ inflate_from_stream_raw :: proc(z: ^Context, allocator := context.allocator) ->
write_byte(z, u8(lit));
uncompressed_len -= 1;
}
- } else if type == 3 {
+ case 3:
return E_Deflate.BType_3;
- } else {
+ case:
// log.debugf("Err: %v | Final: %v | Type: %v\n", err, final, type);
if type == 1 {
// Use fixed code lengths.
@@ -487,12 +487,12 @@ inflate_from_stream_raw :: proc(z: ^Context, allocator := context.allocator) ->
}
} else {
lencodes: [286+32+137]u8;
- codelength_sizes: [19]u8;
+ codelength_sizes: [19]u8;
- //i: u32;
- n: u32;
+ //i: u32;
+ n: u32;
- compress.refill_lsb(z, 14);
+ compress.refill_lsb(z, 14);
hlit := compress.read_bits_no_refill_lsb(z, 5) + 257;
hdist := compress.read_bits_no_refill_lsb(z, 5) + 1;
hclen := compress.read_bits_no_refill_lsb(z, 4) + 4;
@@ -525,34 +525,35 @@ inflate_from_stream_raw :: proc(z: ^Context, allocator := context.allocator) ->
} else {
fill := u8(0);
compress.refill_lsb(z, 7);
- if c == 16 {
+ switch c {
+ case 16:
c = u16(compress.read_bits_no_refill_lsb(z, 2) + 3);
- if n == 0 {
- return E_Deflate.Huffman_Bad_Code_Lengths;
- }
- fill = lencodes[n - 1];
- } else if c == 17 {
- c = u16(compress.read_bits_no_refill_lsb(z, 3) + 3);
- } else if c == 18 {
- c = u16(compress.read_bits_no_refill_lsb(z, 7) + 11);
- } else {
- return E_Deflate.Huffman_Bad_Code_Lengths;
- }
+ if n == 0 {
+ return E_Deflate.Huffman_Bad_Code_Lengths;
+ }
+ fill = lencodes[n - 1];
+ case 17:
+ c = u16(compress.read_bits_no_refill_lsb(z, 3) + 3);
+ case 18:
+ c = u16(compress.read_bits_no_refill_lsb(z, 7) + 11);
+ case:
+ return E_Deflate.Huffman_Bad_Code_Lengths;
+ }
if ntot - n < u32(c) {
- return E_Deflate.Huffman_Bad_Code_Lengths;
- }
+ return E_Deflate.Huffman_Bad_Code_Lengths;
+ }
- nc := n + u32(c);
- #no_bounds_check for ; n < nc; n += 1 {
- lencodes[n] = fill;
- }
+ nc := n + u32(c);
+ #no_bounds_check for ; n < nc; n += 1 {
+ lencodes[n] = fill;
+ }
}
}
if n != ntot {
- return E_Deflate.Huffman_Bad_Code_Lengths;
- }
+ return E_Deflate.Huffman_Bad_Code_Lengths;
+ }
err = build_huffman(z_repeat, lencodes[:hlit]);
if !is_kind(err, E_General.OK) {
@@ -577,11 +578,11 @@ inflate_from_stream_raw :: proc(z: ^Context, allocator := context.allocator) ->
return E_General.OK;
}
-inflate_from_byte_array :: proc(input: ^[]u8, buf: ^bytes.Buffer, raw := false) -> (err: Error) {
+inflate_from_byte_array :: proc(input: []u8, buf: ^bytes.Buffer, raw := false) -> (err: Error) {
ctx := Context{};
r := bytes.Reader{};
- bytes.reader_init(&r, input^);
+ bytes.reader_init(&r, input);
rs := bytes.reader_to_stream(&r);
ctx.input = rs;
@@ -594,9 +595,9 @@ inflate_from_byte_array :: proc(input: ^[]u8, buf: ^bytes.Buffer, raw := false)
return err;
}
-inflate_from_byte_array_raw :: proc(input: ^[]u8, buf: ^bytes.Buffer, raw := false) -> (err: Error) {
+inflate_from_byte_array_raw :: proc(input: []u8, buf: ^bytes.Buffer, raw := false) -> (err: Error) {
return inflate_from_byte_array(input, buf, true);
}
inflate :: proc{inflate_from_stream, inflate_from_byte_array};
-inflate_raw :: proc{inflate_from_stream_raw, inflate_from_byte_array_raw}; \ No newline at end of file
+inflate_raw :: proc{inflate_from_stream_raw, inflate_from_byte_array_raw};