authorgravatar for 4678790+dweiller@users.noreply.github.comDominic <4678790+dweiller@users.noreply.github.com> 2023-02-20 16:58:48+11:00
committergravatar for 4678790+dweiller@users.noreply.github.comDominic <4678790+dweiller@users.noreply.github.com> 2023-02-20 16:58:48+11:00
loga74f800dd79fec48a50152394c9fb3c2d6f080d0
tree4fce01612f7b41b29d22e817ffe9dac9bb70a7f4
parent2766b704c1805f7b3dce25331c209441cdb774fc

std.compress.zstandard: update for multi-for-loop change


4 files changed, 22 insertions(+), 37 deletions(-)

lib/std/compress/zstandard.zig+3-4
...@@ -214,9 +214,8 @@ pub fn ZstandardStream(...@@ -214,9 +214,8 @@ pub fn ZstandardStream(
214 }214 }
215215
216 const size = @min(self.buffer.len(), buffer.len);216 const size = @min(self.buffer.len(), buffer.len);
217 var count: usize = 0;217 for (0..size) |i| {
218 while (count < size) : (count += 1) {218 buffer[i] = self.buffer.read().?;
219 buffer[count] = self.buffer.read().?;
220 }219 }
221 if (self.state == .LastBlock and self.buffer.len() == 0) {220 if (self.state == .LastBlock and self.buffer.len() == 0) {
222 self.state = .NewFrame;221 self.state = .NewFrame;
...@@ -227,7 +226,7 @@ pub fn ZstandardStream(...@@ -227,7 +226,7 @@ pub fn ZstandardStream(
227 self.allocator.free(self.sequence_buffer);226 self.allocator.free(self.sequence_buffer);
228 self.buffer.deinit(self.allocator);227 self.buffer.deinit(self.allocator);
229 }228 }
230 return count;229 return size;
231 }230 }
232 };231 };
233}232}
lib/std/compress/zstandard/decode/block.zig+10-20
...@@ -453,8 +453,7 @@ pub const DecodeState = struct {...@@ -453,8 +453,7 @@ pub const DecodeState = struct {
453 self.written_count += len;453 self.written_count += len;
454 },454 },
455 .rle => {455 .rle => {
456 var i: usize = 0;456 for (0..len) |i| {
457 while (i < len) : (i += 1) {
458 dest[i] = self.literal_streams.one[0];457 dest[i] = self.literal_streams.one[0];
459 }458 }
460 self.literal_written_count += len;459 self.literal_written_count += len;
...@@ -471,8 +470,7 @@ pub const DecodeState = struct {...@@ -471,8 +470,7 @@ pub const DecodeState = struct {
471 var bits_read: u4 = 0;470 var bits_read: u4 = 0;
472 var huffman_tree_index: usize = huffman_tree.symbol_count_minus_one;471 var huffman_tree_index: usize = huffman_tree.symbol_count_minus_one;
473 var bit_count_to_read: u4 = starting_bit_count;472 var bit_count_to_read: u4 = starting_bit_count;
474 var i: usize = 0;473 for (0..len) |i| {
475 while (i < len) : (i += 1) {
476 var prefix: u16 = 0;474 var prefix: u16 = 0;
477 while (true) {475 while (true) {
478 const new_bits = self.readLiteralsBits(bit_count_to_read) catch |err| {476 const new_bits = self.readLiteralsBits(bit_count_to_read) catch |err| {
...@@ -528,8 +526,7 @@ pub const DecodeState = struct {...@@ -528,8 +526,7 @@ pub const DecodeState = struct {
528 self.written_count += len;526 self.written_count += len;
529 },527 },
530 .rle => {528 .rle => {
531 var i: usize = 0;529 for (0..len) |_| {
532 while (i < len) : (i += 1) {
533 dest.writeAssumeCapacity(self.literal_streams.one[0]);530 dest.writeAssumeCapacity(self.literal_streams.one[0]);
534 }531 }
535 self.literal_written_count += len;532 self.literal_written_count += len;
...@@ -546,8 +543,7 @@ pub const DecodeState = struct {...@@ -546,8 +543,7 @@ pub const DecodeState = struct {
546 var bits_read: u4 = 0;543 var bits_read: u4 = 0;
547 var huffman_tree_index: usize = huffman_tree.symbol_count_minus_one;544 var huffman_tree_index: usize = huffman_tree.symbol_count_minus_one;
548 var bit_count_to_read: u4 = starting_bit_count;545 var bit_count_to_read: u4 = starting_bit_count;
549 var i: usize = 0;546 for (0..len) |_| {
550 while (i < len) : (i += 1) {
551 var prefix: u16 = 0;547 var prefix: u16 = 0;
552 while (true) {548 while (true) {
553 const new_bits = try self.readLiteralsBits(bit_count_to_read);549 const new_bits = try self.readLiteralsBits(bit_count_to_read);
...@@ -630,8 +626,7 @@ pub fn decodeBlock(...@@ -630,8 +626,7 @@ pub fn decodeBlock(
630 .rle => {626 .rle => {
631 if (src.len < 1) return error.MalformedRleBlock;627 if (src.len < 1) return error.MalformedRleBlock;
632 if (dest[written_count..].len < block_size) return error.DestTooSmall;628 if (dest[written_count..].len < block_size) return error.DestTooSmall;
633 var write_pos: usize = written_count;629 for (written_count..block_size + written_count) |write_pos| {
634 while (write_pos < block_size + written_count) : (write_pos += 1) {
635 dest[write_pos] = src[0];630 dest[write_pos] = src[0];
636 }631 }
637 consumed_count.* += 1;632 consumed_count.* += 1;
...@@ -664,8 +659,7 @@ pub fn decodeBlock(...@@ -664,8 +659,7 @@ pub fn decodeBlock(
664 return error.MalformedCompressedBlock;659 return error.MalformedCompressedBlock;
665660
666 var sequence_size_limit = block_size_max;661 var sequence_size_limit = block_size_max;
667 var i: usize = 0;662 for (0..sequences_header.sequence_count) |i| {
668 while (i < sequences_header.sequence_count) : (i += 1) {
669 const write_pos = written_count + bytes_written;663 const write_pos = written_count + bytes_written;
670 const decompressed_size = decode_state.decodeSequenceSlice(664 const decompressed_size = decode_state.decodeSequenceSlice(
671 dest,665 dest,
...@@ -734,8 +728,7 @@ pub fn decodeBlockRingBuffer(...@@ -734,8 +728,7 @@ pub fn decodeBlockRingBuffer(
734 },728 },
735 .rle => {729 .rle => {
736 if (src.len < 1) return error.MalformedRleBlock;730 if (src.len < 1) return error.MalformedRleBlock;
737 var write_pos: usize = 0;731 for (0..block_size) |_| {
738 while (write_pos < block_size) : (write_pos += 1) {
739 dest.writeAssumeCapacity(src[0]);732 dest.writeAssumeCapacity(src[0]);
740 }733 }
741 consumed_count.* += 1;734 consumed_count.* += 1;
...@@ -768,8 +761,7 @@ pub fn decodeBlockRingBuffer(...@@ -768,8 +761,7 @@ pub fn decodeBlockRingBuffer(
768 return error.MalformedCompressedBlock;761 return error.MalformedCompressedBlock;
769762
770 var sequence_size_limit = block_size_max;763 var sequence_size_limit = block_size_max;
771 var i: usize = 0;764 for (0..sequences_header.sequence_count) |i| {
772 while (i < sequences_header.sequence_count) : (i += 1) {
773 const decompressed_size = decode_state.decodeSequenceRingBuffer(765 const decompressed_size = decode_state.decodeSequenceRingBuffer(
774 dest,766 dest,
775 &bit_stream,767 &bit_stream,
...@@ -840,8 +832,7 @@ pub fn decodeBlockReader(...@@ -840,8 +832,7 @@ pub fn decodeBlockReader(
840 },832 },
841 .rle => {833 .rle => {
842 const byte = try source.readByte();834 const byte = try source.readByte();
843 var i: usize = 0;835 for (0..block_size) |_| {
844 while (i < block_size) : (i += 1) {
845 dest.writeAssumeCapacity(byte);836 dest.writeAssumeCapacity(byte);
846 }837 }
847 decode_state.written_count += block_size;838 decode_state.written_count += block_size;
...@@ -866,8 +857,7 @@ pub fn decodeBlockReader(...@@ -866,8 +857,7 @@ pub fn decodeBlockReader(
866 return error.MalformedCompressedBlock;857 return error.MalformedCompressedBlock;
867858
868 var sequence_size_limit = block_size_max;859 var sequence_size_limit = block_size_max;
869 var i: usize = 0;860 for (0..sequences_header.sequence_count) |i| {
870 while (i < sequences_header.sequence_count) : (i += 1) {
871 const decompressed_size = decode_state.decodeSequenceRingBuffer(861 const decompressed_size = decode_state.decodeSequenceRingBuffer(
872 dest,862 dest,
873 &bit_stream,863 &bit_stream,
lib/std/compress/zstandard/decode/fse.zig+7-10
...@@ -47,8 +47,7 @@ pub fn decodeFseTable(...@@ -47,8 +47,7 @@ pub fn decodeFseTable(
47 while (true) {47 while (true) {
48 const repeat_flag = try bit_reader.readBitsNoEof(u2, 2);48 const repeat_flag = try bit_reader.readBitsNoEof(u2, 2);
49 if (repeat_flag + value_count > 256) return error.MalformedFseTable;49 if (repeat_flag + value_count > 256) return error.MalformedFseTable;
50 var i: usize = 0;50 for (0..repeat_flag) |_| {
51 while (i < repeat_flag) : (i += 1) {
52 values[value_count] = 1;51 values[value_count] = 1;
53 value_count += 1;52 value_count += 1;
54 }53 }
...@@ -75,7 +74,7 @@ fn buildFseTable(values: []const u16, entries: []Table.Fse) !void {...@@ -75,7 +74,7 @@ fn buildFseTable(values: []const u16, entries: []Table.Fse) !void {
75 assert(total_probability <= 1 << 9);74 assert(total_probability <= 1 << 9);
7675
77 var less_than_one_count: usize = 0;76 var less_than_one_count: usize = 0;
78 for (values) |value, i| {77 for (values, 0..) |value, i| {
79 if (value == 0) {78 if (value == 0) {
80 entries[entries.len - 1 - less_than_one_count] = Table.Fse{79 entries[entries.len - 1 - less_than_one_count] = Table.Fse{
81 .symbol = @intCast(u8, i),80 .symbol = @intCast(u8, i),
...@@ -88,7 +87,7 @@ fn buildFseTable(values: []const u16, entries: []Table.Fse) !void {...@@ -88,7 +87,7 @@ fn buildFseTable(values: []const u16, entries: []Table.Fse) !void {
8887
89 var position: usize = 0;88 var position: usize = 0;
90 var temp_states: [1 << 9]u16 = undefined;89 var temp_states: [1 << 9]u16 = undefined;
91 for (values) |value, symbol| {90 for (values, 0..) |value, symbol| {
92 if (value == 0 or value == 1) continue;91 if (value == 0 or value == 1) continue;
93 const probability = value - 1;92 const probability = value - 1;
9493
...@@ -99,8 +98,7 @@ fn buildFseTable(values: []const u16, entries: []Table.Fse) !void {...@@ -99,8 +98,7 @@ fn buildFseTable(values: []const u16, entries: []Table.Fse) !void {
99 const single_state_count = probability - double_state_count;98 const single_state_count = probability - double_state_count;
100 const share_size_log = std.math.log2_int(u16, share_size);99 const share_size_log = std.math.log2_int(u16, share_size);
101100
102 var i: u16 = 0;101 for (0..probability) |i| {
103 while (i < probability) : (i += 1) {
104 temp_states[i] = @intCast(u16, position);102 temp_states[i] = @intCast(u16, position);
105 position += (entries.len >> 1) + (entries.len >> 3) + 3;103 position += (entries.len >> 1) + (entries.len >> 3) + 3;
106 position &= entries.len - 1;104 position &= entries.len - 1;
...@@ -110,16 +108,15 @@ fn buildFseTable(values: []const u16, entries: []Table.Fse) !void {...@@ -110,16 +108,15 @@ fn buildFseTable(values: []const u16, entries: []Table.Fse) !void {
110 }108 }
111 }109 }
112 std.sort.sort(u16, temp_states[0..probability], {}, std.sort.asc(u16));110 std.sort.sort(u16, temp_states[0..probability], {}, std.sort.asc(u16));
113 i = 0;111 for (0..probability) |i| {
114 while (i < probability) : (i += 1) {
115 entries[temp_states[i]] = if (i < double_state_count) Table.Fse{112 entries[temp_states[i]] = if (i < double_state_count) Table.Fse{
116 .symbol = @intCast(u8, symbol),113 .symbol = @intCast(u8, symbol),
117 .bits = share_size_log + 1,114 .bits = share_size_log + 1,
118 .baseline = single_state_count * share_size + i * 2 * share_size,115 .baseline = single_state_count * share_size + @intCast(u16, i) * 2 * share_size,
119 } else Table.Fse{116 } else Table.Fse{
120 .symbol = @intCast(u8, symbol),117 .symbol = @intCast(u8, symbol),
121 .bits = share_size_log,118 .bits = share_size_log,
122 .baseline = (i - double_state_count) * share_size,119 .baseline = (@intCast(u16, i) - double_state_count) * share_size,
123 };120 };
124 }121 }
125 }122 }
lib/std/compress/zstandard/decode/huffman.zig+2-3
...@@ -95,8 +95,7 @@ fn assignWeights(huff_bits: *readers.ReverseBitReader, accuracy_log: usize, entr...@@ -95,8 +95,7 @@ fn assignWeights(huff_bits: *readers.ReverseBitReader, accuracy_log: usize, entr
9595
96fn decodeDirectHuffmanTree(source: anytype, encoded_symbol_count: usize, weights: *[256]u4) !usize {96fn decodeDirectHuffmanTree(source: anytype, encoded_symbol_count: usize, weights: *[256]u4) !usize {
97 const weights_byte_count = (encoded_symbol_count + 1) / 2;97 const weights_byte_count = (encoded_symbol_count + 1) / 2;
98 var i: usize = 0;98 for (0..weights_byte_count) |i| {
99 while (i < weights_byte_count) : (i += 1) {
100 const byte = try source.readByte();99 const byte = try source.readByte();
101 weights[2 * i] = @intCast(u4, byte >> 4);100 weights[2 * i] = @intCast(u4, byte >> 4);
102 weights[2 * i + 1] = @intCast(u4, byte & 0xF);101 weights[2 * i + 1] = @intCast(u4, byte & 0xF);
...@@ -105,7 +104,7 @@ fn decodeDirectHuffmanTree(source: anytype, encoded_symbol_count: usize, weights...@@ -105,7 +104,7 @@ fn decodeDirectHuffmanTree(source: anytype, encoded_symbol_count: usize, weights
105}104}
106105
107fn assignSymbols(weight_sorted_prefixed_symbols: []LiteralsSection.HuffmanTree.PrefixedSymbol, weights: [256]u4) usize {106fn assignSymbols(weight_sorted_prefixed_symbols: []LiteralsSection.HuffmanTree.PrefixedSymbol, weights: [256]u4) usize {
108 for (weight_sorted_prefixed_symbols) |_, i| {107 for (0..weight_sorted_prefixed_symbols.len) |i| {
109 weight_sorted_prefixed_symbols[i] = .{108 weight_sorted_prefixed_symbols[i] = .{
110 .symbol = @intCast(u8, i),109 .symbol = @intCast(u8, i),
111 .weight = undefined,110 .weight = undefined,