BitVectorPtr VLC_HuffmanEncoder::transitData(ByteVecotrPtr src) { BitVectorPtr ret = BitVectorPtr(new BitVector()); for (ByteVecotr::iterator it = src->begin(); it != src->end(); it++) { unordered_map<stKey, shared_ptr<typeTreeNode>>::iterator got = leafMap.find(*it); if (got == leafMap.end()) { return NULL; } else { shared_ptr<typeTreeNode> leaf = got->second; huffmanTree.setCurrentPos(leaf); BitVector bits; while (!huffmanTree.IsRoot()) { bits.push_back(huffmanTree.GetCurrentData().Symbol); huffmanTree.Parent(); } for (BitVector::size_type i = 0; i < bits.size(); i++) { ret->push_back(bits[bits.size() - 1 - i]); } } } return ret; }