Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __STRING_COMPRESSOR_H
00010 #define __STRING_COMPRESSOR_H
00011
00012 #include "Export.h"
00013 #include "DS_Map.h"
00014 #include "RakMemoryOverride.h"
00015
00016
00017
00018
00020 namespace RakNet
00021 {
00022 class BitStream;
00023 class RakString;
00024 };
00025
00026 class HuffmanEncodingTree;
00027
00032 class RAK_DLL_EXPORT StringCompressor
00033 {
00034 public:
00035
00036
00037 ~StringCompressor();
00038
00042 static StringCompressor* Instance(void);
00043
00049 void GenerateTreeFromStrings( unsigned char *input, unsigned inputLength, int languageID );
00050
00056 void EncodeString( const char *input, int maxCharsToWrite, RakNet::BitStream *output, int languageID=0 );
00057
00063 bool DecodeString( char *output, int maxCharsToWrite, RakNet::BitStream *input, int languageID=0 );
00064
00065 #ifdef _CSTRING_COMPRESSOR
00066 void EncodeString( const CString &input, int maxCharsToWrite, RakNet::BitStream *output, int languageID=0 );
00067 bool DecodeString( CString &output, int maxCharsToWrite, RakNet::BitStream *input, int languageID=0 );
00068 #endif
00069
00070 #ifdef _STD_STRING_COMPRESSOR
00071 void EncodeString( const std::string &input, int maxCharsToWrite, RakNet::BitStream *output, int languageID=0 );
00072 bool DecodeString( std::string *output, int maxCharsToWrite, RakNet::BitStream *input, int languageID=0 );
00073 #endif
00074
00075 void EncodeString( const RakNet::RakString *input, int maxCharsToWrite, RakNet::BitStream *output, int languageID=0 );
00076 bool DecodeString( RakNet::RakString *output, int maxCharsToWrite, RakNet::BitStream *input, int languageID=0 );
00077
00079 static void AddReference(void);
00080
00082 static void RemoveReference(void);
00083
00085 StringCompressor();
00086
00087 private:
00088
00090 static StringCompressor *instance;
00091
00093 DataStructures::Map<int, HuffmanEncodingTree *> huffmanEncodingTrees;
00094
00095 static int referenceCount;
00096 };
00097
00100 #define stringCompressor StringCompressor::Instance()
00101
00102 #endif