25 #ifndef DOZERG_COMPRESSOR_QUICKLZ_H_20090222 26 #define DOZERG_COMPRESSOR_QUICKLZ_H_20090222 31 #ifndef QLZ_COMPRESSION_LEVEL 34 # define QLZ_COMPRESSION_LEVEL 3 37 #ifndef QLZ_STREAMING_BUFFER 38 # define QLZ_STREAMING_BUFFER 0 45 #include "quicklz/quicklz.c" 46 #include "impl/environment.hh" 83 typedef ::qlz_state_compress __CompBuf;
84 typedef ::qlz_state_decompress __DecompBuf;
99 bool compress(
const std::vector<char> & input, std::vector<char> & output)
const{
100 return compressTemplate(input, output);
102 bool compress(
const std::vector<unsigned char> & input, std::vector<unsigned char> & output)
const{
103 return compressTemplate(input, output);
105 bool compress(
const std::vector<signed char> & input, std::vector<signed char> & output)
const{
106 return compressTemplate(input, output);
108 bool compress(
const std::string & input, std::string & output)
const{
109 return compressTemplate(input, output);
121 bool decompress(
const std::vector<char> & input, std::vector<char> & output)
const{
122 return decompressTemplate(input, output);
124 bool decompress(
const std::vector<unsigned char> & input, std::vector<unsigned char> & output)
const{
125 return decompressTemplate(input, output);
127 bool decompress(
const std::vector<signed char> & input, std::vector<signed char> & output)
const{
128 return decompressTemplate(input, output);
130 bool decompress(
const std::string & input, std::string & output)
const{
131 return decompressTemplate(input, output);
135 template<
class Buffer>
136 bool compressTemplate(
const Buffer & input, Buffer & output)
const{
137 output.resize(input.size() + 400);
138 if(compBuf_.size() <
sizeof(__CompBuf))
139 compBuf_.resize(
sizeof(__CompBuf));
140 const size_t out_len = ::qlz_compress(
142 reinterpret_cast<char *>(&output[0]),
144 reinterpret_cast<__CompBuf *
>(&compBuf_[0]));
145 output.resize(out_len);
148 template<
class Buffer>
149 bool decompressTemplate(
const Buffer & input, Buffer & output)
const{
152 const char *
const buf =
reinterpret_cast<const char *
>(&input[0]);
153 size_t out_len = ::qlz_size_decompressed(buf);
154 output.resize(out_len);
155 if(decompBuf_.size() <
sizeof(__DecompBuf))
156 decompBuf_.resize(
sizeof(__DecompBuf));
157 out_len = ::qlz_decompress(buf, &output[0], reinterpret_cast<__DecompBuf *>(&decompBuf_[0]));
158 output.resize(out_len);
164 mutable std::vector<char> compBuf_;
165 mutable std::vector<char> decompBuf_;
A convenient interface for QuickLZ compression algorithm.
Definition: compress_quicklz.hh:81
CCompressorQuickLZ()
Default constructor.
Definition: compress_quicklz.hh:89