00001 #ifndef SCTARCHIVING_ZLIBSTRINGCOMPRESSOR_H
00002 #define SCTARCHIVING_ZLIBSTRINGCOMPRESSOR_H
00003 #include <zlib.h>
00004 #include <string>
00005 using std::string;
00006
00007 namespace SctArchiving{
00022 class ZlibStringCompressor{
00023 public:
00027 ZlibStringCompressor(unsigned long bufferSize=0);
00034 const string compress(const string& toCompress, int level);
00040 const string inflate(const string& compressed);
00044 unsigned long getBufferSize();
00048 void setDebugLevel(int level);
00052 int getDebugLevel();
00056 Bytef* setBufferSize(unsigned long size);
00057 private:
00061 static void checkZlibResult(const int result, const char* file, const int line);
00065 long unsigned m_bufferSize;
00066
00067
00068
00069 Bytef* m_buffer;
00073 static unsigned long findSizeInBytes(const string& s);
00078 static unsigned long findRequiredBufferSize(const unsigned long uncompressedSize);
00079 int m_debugLevel;
00080 };
00081
00082
00083 inline unsigned long ZlibStringCompressor::findSizeInBytes(const string&s ){
00084 return sizeof(char)*s.size();
00085 }
00086
00087
00088 inline unsigned long ZlibStringCompressor::findRequiredBufferSize(long unsigned unbufferedSize){
00089 return unbufferedSize + unbufferedSize/1000 + 12;
00090 }
00091
00092 inline void ZlibStringCompressor::setDebugLevel(int level){
00093 m_debugLevel=level;
00094 }
00095
00096 inline int ZlibStringCompressor::getDebugLevel(){
00097 return m_debugLevel;
00098 }
00099
00100 }
00101
00102 #endif // SCTARCHIVING_ZLIBSTRINGCOMPRESSOR_H