Esempio n. 1
0
 public static void SetDepth(global::encode.entropy_encode.HuffmanTree p, global::Array <object> pool, int pool_off, uint[] depth, int depth_off, int level)
 {
     if ((p.index_left_ >= 0))
     {
         ++level;
         global::encode.Entropy_encode.SetDepth(((global::encode.entropy_encode.HuffmanTree)(pool[(pool_off + p.index_left_)])), pool, pool_off, depth, depth_off, level);
         global::encode.Entropy_encode.SetDepth(((global::encode.entropy_encode.HuffmanTree)(pool[(pool_off + p.index_right_or_value_)])), pool, pool_off, depth, depth_off, level);
     }
     else
     {
         ((uint[])(depth))[(depth_off + p.index_right_or_value_)] = ((uint)(level));
     }
 }
Esempio n. 2
0
        public static int SortHuffmanTree(global::encode.entropy_encode.HuffmanTree v0, global::encode.entropy_encode.HuffmanTree v1)
        {
            unchecked {
                if ((v0.total_count_ == v1.total_count_))
                {
                    return(v1.index_right_or_value_ - v0.index_right_or_value_);
                }

                if ((v0.total_count_ < v1.total_count_))
                {
                    return(-1);
                }

                return(1);
            }
        }
Esempio n. 3
0
 public static void __hx_ctor_encode_entropy_encode_HuffmanTree(global::encode.entropy_encode.HuffmanTree __hx_this)
 {
 }
Esempio n. 4
0
        public static void CreateHuffmanTree(int[] data, int data_off, int length, int tree_limit, uint[] depth, int depth_off)
        {
            unchecked {
                int count_limit = 1;
                while (true)
                {
                    global::Array <object> tree = new global::Array <object>();
                    int tree_off = 0;
                    int i        = (length - 1);
                    while ((i >= 0))
                    {
                        if ((((int)(((int[])(data))[i])) > 0))
                        {
                            int count = ((int)(global::System.Math.Max(((double)(((int)(((int[])(data))[i])))), ((double)(count_limit)))));
                            global::encode.entropy_encode.HuffmanTree huffmantree = new global::encode.entropy_encode.HuffmanTree();
                            huffmantree.HuffmanTree3(count, -1, i);
                            tree[tree_off++] = huffmantree;
                        }

                        --i;
                    }

                    int n = tree.length;
                    if ((n == 1))
                    {
                        ((uint[])(depth))[(depth_off + ((global::encode.entropy_encode.HuffmanTree)(tree[0])).index_right_or_value_)] = ((uint)(1));
                        break;
                    }

                    tree.sort(((global::haxe.lang.Function)(new global::haxe.lang.Closure(typeof(global::encode.Entropy_encode), "SortHuffmanTree", 323217485))));
                    global::encode.entropy_encode.HuffmanTree huffmantree1 = new global::encode.entropy_encode.HuffmanTree();
                    huffmantree1.HuffmanTree3(2147483647, -1, -1);
                    tree[tree_off++] = huffmantree1;
                    global::encode.entropy_encode.HuffmanTree huffmantree2 = new global::encode.entropy_encode.HuffmanTree();
                    huffmantree2.HuffmanTree3(2147483647, -1, -1);
                    tree[tree_off++] = huffmantree2;
                    int i1 = 0;
                    int j  = (n + 1);
                    int k  = (n - 1);
                    while ((k > 0))
                    {
                        int left  = default(int);
                        int right = default(int);
                        if ((((global::encode.entropy_encode.HuffmanTree)(tree[i1])).total_count_ <= ((global::encode.entropy_encode.HuffmanTree)(tree[j])).total_count_))
                        {
                            left = i1;
                            ++i1;
                        }
                        else
                        {
                            left = j;
                            ++j;
                        }

                        if ((((global::encode.entropy_encode.HuffmanTree)(tree[i1])).total_count_ <= ((global::encode.entropy_encode.HuffmanTree)(tree[j])).total_count_))
                        {
                            right = i1;
                            ++i1;
                        }
                        else
                        {
                            right = j;
                            ++j;
                        }

                        int j_end = (tree.length - 1);
                        ((global::encode.entropy_encode.HuffmanTree)(tree[j_end])).total_count_          = (((global::encode.entropy_encode.HuffmanTree)(tree[left])).total_count_ + ((global::encode.entropy_encode.HuffmanTree)(tree[right])).total_count_);
                        ((global::encode.entropy_encode.HuffmanTree)(tree[j_end])).index_left_           = left;
                        ((global::encode.entropy_encode.HuffmanTree)(tree[j_end])).index_right_or_value_ = right;
                        global::encode.entropy_encode.HuffmanTree huffmantree3 = new global::encode.entropy_encode.HuffmanTree();
                        huffmantree3.HuffmanTree3(2147483647, -1, -1);
                        tree[tree_off++] = huffmantree3;
                        --k;
                    }

                    global::encode.Entropy_encode.SetDepth(((global::encode.entropy_encode.HuffmanTree)(tree[((2 * n) - 1)])), tree, 0, depth, depth_off, 0);
                    int max_element = 0;
                    {
                        int _g1 = depth_off;
                        int _g  = (depth_off + length);
                        while ((_g1 < _g))
                        {
                            int i2 = _g1++;
                            if (((bool)((((uint)(((uint[])(depth))[i2])) > max_element))))
                            {
                                max_element = ((int)(((uint)(((uint[])(depth))[i2]))));
                            }
                        }
                    }

                    if ((max_element <= tree_limit))
                    {
                        break;
                    }

                    count_limit *= 2;
                }
            }
        }