00001 00002 00003 00004 00005 00006 00007 00008 00009 #ifndef __HUFFMAN_ENCODING_TREE 00010 #define __HUFFMAN_ENCODING_TREE 00011 00012 #include "RakMemoryOverride.h" 00013 #include "DS_HuffmanEncodingTreeNode.h" 00014 #include "BitStream.h" 00015 #include "Export.h" 00016 #include "DS_LinkedList.h" 00017 00019 class RAK_DLL_EXPORT HuffmanEncodingTree 00020 { 00021 00022 public: 00023 HuffmanEncodingTree(); 00024 ~HuffmanEncodingTree(); 00025 00030 void EncodeArray( unsigned char *input, size_t sizeInBytes, RakNet::BitStream * output ); 00031 00032 // \brief Decodes an array encoded by EncodeArray(). 00033 unsigned DecodeArray( RakNet::BitStream * input, BitSize_t sizeInBits, size_t maxCharsToWrite, unsigned char *output ); 00034 void DecodeArray( unsigned char *input, BitSize_t sizeInBits, RakNet::BitStream * output ); 00035 00037 void GenerateFromFrequencyTable( unsigned int frequencyTable[ 256 ] ); 00038 00040 void FreeMemory( void ); 00041 00042 private: 00043 00045 00046 HuffmanEncodingTreeNode *root; 00047 00049 00050 00051 struct CharacterEncoding 00052 { 00053 unsigned char* encoding; 00054 unsigned short bitLength; 00055 }; 00056 00057 CharacterEncoding encodingTable[ 256 ]; 00058 00059 void InsertNodeIntoSortedList( HuffmanEncodingTreeNode * node, DataStructures::LinkedList<HuffmanEncodingTreeNode *> *huffmanEncodingTreeNodeList ) const; 00060 }; 00061 00062 #endif