Exemplo n.º 1
0
 unsafe private static void FreePPNode(HuffmanTree huff, HuffmanNode **ppnode)
 {
     // var hptr = Marshal.PtrToStructure(huff.freeList.ptr, typeof(HuffNodePtr)); //看看是否指向的
     // Marshal.StructureToPtr(, ppnode.ptr, false);
     *ppnode = (HuffmanNode *)huff.freeList;
     huff.freeList = ppnode;
     // CLog.Info("FreePPNode:ptr:{0}, node:{1}", huff.blocPtrs, huff.blocNode);
 }
Exemplo n.º 2
0
    unsafe public HuffmanTree(bool isCompresser)
    {
        loc = new HuffmanNode *[CConstVar.HUFF_MAX + 1];
        // for(int i = 0; i < CConstVar.HUFF_MAX+1; i ++){
        //  loc[i] = new HuffmanNode();
        // }
        blocNode = 0;
        blocPtrs = 0;

        nodeList = new HuffmanNode[768];

        for (int i = 0; i < 768; i++)
        {
            nodeList[i] = new HuffmanNode();
        }

        nodePtrs = new HuffmanNode *[768];
        // for(int i = 0; i < 768; i++){
        //  nodePtrs[i] = new HuffNodePtr();
        // }
        // huffmanMsg.compresser.loc = new HuffmanNode[768];
        fixed(HuffmanNode *tmp = &nodeList[blocNode++])
        {
            if (isCompresser)
            {
                tree  = lhead = loc[CConstVar.HUFF_MAX] = tmp;
                ltail = null;
            }
            else
            {
                tree = lhead = ltail = loc[CConstVar.HUFF_MAX] = tmp;
            }
        }

        freeList = null;


        // freeList = new HuffNodePtr();

        tree->symbol = CConstVar.HUFF_MAX;
        tree->weight = 0;
        lhead->next  = lhead->prev = null;
        tree->parent = tree->left = tree->right = null;

        if (isCompresser)
        {
            loc[CConstVar.HUFF_MAX] = tree;
        }
    }