Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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]);
                            }
                        }
                    }
                }
            }
        }