25 #ifndef DOZERG_COMPRESSOR_ZLIB_H_20090223 26 #define DOZERG_COMPRESSOR_ZLIB_H_20090223 33 #include "tools/net.hh" 45 typedef ::uLongf __ZSize;
46 typedef ::Bytef __ZChar;
76 bool compress(
const std::vector<char> & input, std::vector<char> & output)
const{
77 return compressTemplate(input, output);
79 bool compress(
const std::vector<signed char> & input, std::vector<signed char> & output)
const{
80 return compressTemplate(input, output);
82 bool compress(
const std::vector<unsigned char> & input, std::vector<unsigned char> & output)
const{
83 return compressTemplate(input, output);
85 bool compress(
const std::string & input, std::string & output)
const{
86 return compressTemplate(input, output);
98 bool decompress(
const std::vector<char> & input, std::vector<char> & output)
const{
99 return decompressTemplate(input, output);
101 bool decompress(
const std::vector<signed char> & input, std::vector<signed char> & output)
const{
102 return decompressTemplate(input, output);
104 bool decompress(
const std::vector<unsigned char> & input, std::vector<unsigned char> & output)
const{
105 return decompressTemplate(input, output);
107 bool decompress(
const std::string & input, std::string & output)
const{
108 return decompressTemplate(input, output);
112 template<
class Buffer>
113 bool compressTemplate(
const Buffer & input, Buffer & output)
const{
115 const __ZSize in_len = __ZSize(input.size());
120 __ZSize out_len = ::compressBound(in_len);
121 output.resize(begin + out_len);
122 const int ret = ::compress2(
123 reinterpret_cast<__ZChar *>(&output[begin]),
125 reinterpret_cast<const __ZChar *>(&input[0]),
129 output.resize(begin + out_len);
134 template<
class Buffer>
135 bool decompressTemplate(
const Buffer & input, Buffer & output)
const{
137 CInByteStream ds(reinterpret_cast<const char *>(&input[0]), input.size());
140 const size_t begin = ds.
cur();
141 output.resize(out_len);
142 const int ret = ::uncompress(
143 reinterpret_cast<__ZChar *>(&output[0]),
145 reinterpret_cast<const __ZChar *>(&input[begin]),
146 __ZSize(input.size() - begin));
148 output.resize(out_len);
A convenient interface for zlib compression algorithm.
Definition: compress_zlib.hh:43
int getLevel() const
Get compression level.
Definition: compress_zlib.hh:66
Data unpacking interfaces.
Definition: data_stream.hh:1033
size_t cur() const
Get current pointer.
Definition: data_stream.hh:1191
Data packing library using stream style interfaces.
NS_IMPL::CManipulatorVarint< const T > varint(const T &val)
Pack integer using Base 128 Varints encoding.
Definition: data_stream.hh:793
void setLevel(int lv)
Set compression level.
Definition: compress_zlib.hh:61
NS_IMPL::CManipulatorEnd< void, void > end()
End operations for CInByteStream, COutByteStreamStrRef, COutByteStreamVecRef.
Definition: data_stream.hh:929
Data packing interfaces.
Definition: data_stream.hh:1527
CCompressorZlib(int level=Z_DEFAULT_COMPRESSION)
Constructor.
Definition: compress_zlib.hh:56