Example #1
0
        public static void __hx_ctor_encode_metablock_BlockSplitter(global::encode.metablock.BlockSplitter __hx_this, int HistogramTypeInt, int alphabet_size, int min_block_size, double split_threshold, int num_symbols, global::encode.metablock.BlockSplit split, global::Array <object> histograms)
        {
            unchecked {
                __hx_this.last_entropy_      = new global::Array <double>();
                __hx_this.last_histogram_ix_ = new global::Array <int>();
                __hx_this.HistogramTypeInt   = HistogramTypeInt;
                __hx_this.alphabet_size_     = alphabet_size;
                __hx_this.min_block_size_    = min_block_size;
                __hx_this.split_threshold_   = split_threshold;
                __hx_this.num_blocks_        = 0;
                __hx_this.split_             = split;
                __hx_this.histograms_        = histograms;
                __hx_this.target_block_size_ = min_block_size;
                __hx_this.block_size_        = 0;
                __hx_this.curr_histogram_ix_ = 0;
                __hx_this.merge_last_count_  = 0;
                int max_num_types = ((int)(global::System.Math.Min(((double)(((num_symbols / min_block_size) + 1))), ((double)((global::encode.metablock.BlockSplitter.kMaxBlockTypes + 1))))));
                __hx_this.split_.lengths = new global::Array <int>();
                __hx_this.split_.types   = new global::Array <int>();
                {
                    int _g1 = 0;
                    while ((_g1 < max_num_types))
                    {
                        ++_g1;
                        __hx_this.histograms_.push(new global::encode.histogram.Histogram(((int)(HistogramTypeInt))));
                    }
                }

                __hx_this.last_histogram_ix_[1] = 0;
                __hx_this.last_histogram_ix_[0] = 0;
            }
        }
Example #2
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);
            }
        }
Example #3
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]);
                            }
                        }
                    }
                }
            }
        }