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); }
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; } }