public static void BuildMetaBlockGreedy(uint[] ringbuffer, int pos, int mask, global::Array <object> commands, int n_commands, global::encode.metablock.MetaBlockSplit mb) { unchecked { int num_literals = 0; { int _g1 = 0; while ((_g1 < n_commands)) { num_literals += ((global::encode.command.Command)(commands[_g1++])).insert_len_; } } global::encode.metablock.BlockSplitter lit_blocks = new global::encode.metablock.BlockSplitter(global::encode.Histogram_functions.HistogramLiteralInt, 256, 512, 400.0, num_literals, mb.literal_split, mb.literal_histograms); global::encode.metablock.BlockSplitter cmd_blocks = new global::encode.metablock.BlockSplitter(global::encode.Histogram_functions.HistogramCommandInt, 704, 1024, 500.0, n_commands, mb.command_split, mb.command_histograms); global::encode.metablock.BlockSplitter dist_blocks = new global::encode.metablock.BlockSplitter(global::encode.Histogram_functions.HistogramDistanceInt, 64, 512, 100.0, n_commands, mb.distance_split, mb.distance_histograms); { int _g11 = 0; while ((_g11 < n_commands)) { global::encode.command.Command cmd = ((global::encode.command.Command)(commands[_g11++])); cmd_blocks.AddSymbol(((int)(cmd.cmd_prefix_[0]))); { int _g3 = 0; int _g2 = cmd.insert_len_; while ((_g3 < _g2)) { ++_g3; lit_blocks.AddSymbol(((int)(((uint)(((uint[])(ringbuffer))[(pos & mask)]))))); ++pos; } } pos += cmd.copy_len_; if (((cmd.copy_len_ > 0) && ((bool)((cmd.cmd_prefix_[0] >= 128))))) { dist_blocks.AddSymbol(((int)(cmd.dist_prefix_[0]))); } } } lit_blocks.FinishBlock(true); cmd_blocks.FinishBlock(true); dist_blocks.FinishBlock(true); } }
public static void BuildMetaBlockGreedyWithContexts(uint[] ringbuffer, int pos, int mask, uint prev_byte, uint prev_byte2, int literal_context_mode, int num_contexts, global::Array <int> static_context_map, global::Array <object> commands, int n_commands, global::encode.metablock.MetaBlockSplit mb) { unchecked { int num_literals = 0; { int _g1 = 0; while ((_g1 < n_commands)) { num_literals += ((global::encode.command.Command)(commands[_g1++])).insert_len_; } } global::encode.metablock.ContextBlockSplitter lit_blocks = new global::encode.metablock.ContextBlockSplitter(global::encode.Histogram_functions.HistogramLiteralInt, 256, num_contexts, 512, 400.0, num_literals, mb.literal_split, mb.literal_histograms); global::encode.metablock.BlockSplitter cmd_blocks = new global::encode.metablock.BlockSplitter(global::encode.Histogram_functions.HistogramCommandInt, 704, 1024, 500.0, n_commands, mb.command_split, mb.command_histograms); global::encode.metablock.BlockSplitter dist_blocks = new global::encode.metablock.BlockSplitter(global::encode.Histogram_functions.HistogramDistanceInt, 64, 512, 100.0, n_commands, mb.distance_split, mb.distance_histograms); { int _g11 = 0; while ((_g11 < n_commands)) { global::encode.command.Command cmd = ((global::encode.command.Command)(commands[_g11++])); cmd_blocks.AddSymbol(((int)(cmd.cmd_prefix_[0]))); { int _g3 = 0; int _g2 = cmd.insert_len_; while ((_g3 < _g2)) { ++_g3; uint literal = ((uint)(((uint[])(ringbuffer))[(pos & mask)])); lit_blocks.AddSymbol(((int)(literal)), static_context_map[((int)(global::encode.Context.ContextFunction(prev_byte, prev_byte2, literal_context_mode)))]); prev_byte2 = prev_byte; prev_byte = literal; ++pos; } } pos += cmd.copy_len_; if ((cmd.copy_len_ > 0)) { prev_byte2 = ((uint)(((uint[])(ringbuffer))[((pos - 2) & mask)])); prev_byte = ((uint)(((uint[])(ringbuffer))[((pos - 1) & mask)])); if ((((int)(cmd.cmd_prefix_[0])) >= 128)) { dist_blocks.AddSymbol(((int)(cmd.dist_prefix_[0]))); } } } } lit_blocks.FinishBlock(true); cmd_blocks.FinishBlock(true); dist_blocks.FinishBlock(true); mb.literal_context_map = global::FunctionMalloc.mallocInt((mb.literal_split.num_types << 6)); { int _g12 = 0; int _g = mb.literal_split.num_types; while ((_g12 < _g)) { int i = _g12++; { int _g31 = 0; while ((_g31 < 64)) { int j = _g31++; ((int[])(mb.literal_context_map))[(((i << 6)) + j)] = ((i * num_contexts) + static_context_map[j]); } } } } } }