15 #include <lzo/lzoconf.h>
16 #include <lzo/lzoutil.h>
17 #include <lzo/lzo1x.h>
45 uint8_t* &compressed, uint64_t &compressed_size, int32_t level)
47 uint64_t initial_buffer_size=0;
49 if (uncompressed_size==0)
60 initial_buffer_size=uncompressed_size;
61 compressed_size=uncompressed_size;
62 compressed=SG_MALLOC(uint8_t, compressed_size);
63 memcpy(compressed, uncompressed, uncompressed_size);
69 if (lzo_init() != LZO_E_OK)
70 SG_ERROR(
"Error initializing LZO Compression\n")
72 lzo_bytep lzo_wrkmem = (lzo_bytep) lzo_malloc(LZO1X_999_MEM_COMPRESS);
74 SG_ERROR(
"Error allocating LZO workmem\n")
76 initial_buffer_size=uncompressed_size +
77 uncompressed_size / 16+ 64 + 3;
79 compressed_size=initial_buffer_size;
80 compressed=SG_MALLOC(uint8_t, initial_buffer_size);
82 lzo_uint lzo_size=compressed_size;
87 ret=lzo1x_1_15_compress(uncompressed, uncompressed_size,
88 compressed, &lzo_size, lzo_wrkmem);
92 ret=lzo1x_999_compress(uncompressed, uncompressed_size,
93 compressed, &lzo_size, lzo_wrkmem);
96 compressed_size=lzo_size;
100 SG_ERROR(
"Error lzo-compressing data\n")
108 initial_buffer_size=1.001*uncompressed_size + 12;
109 compressed_size=initial_buffer_size;
110 compressed=SG_MALLOC(uint8_t, initial_buffer_size);
111 uLongf gz_size=compressed_size;
113 if (compress2(compressed, &gz_size, uncompressed,
114 uncompressed_size, level) != Z_OK)
116 SG_ERROR(
"Error gzip-compressing data\n")
118 compressed_size=gz_size;
129 initial_buffer_size=1.01*uncompressed_size + 600;
130 compressed_size=initial_buffer_size;
131 compressed=SG_MALLOC(uint8_t, initial_buffer_size);
132 if (BZ2_bzCompressInit(&strm, level, 0, 0)!=BZ_OK)
133 SG_ERROR(
"Error initializing bzip2 compressor\n")
135 strm.next_in=(
char*) uncompressed;
136 strm.avail_in=(
unsigned int) uncompressed_size;
137 strm.next_out=(
char*) compressed;
138 strm.avail_out=(
unsigned int) compressed_size;
139 if (BZ2_bzCompress(&strm, BZ_RUN) != BZ_RUN_OK)
140 SG_ERROR(
"Error bzip2-compressing data (BZ_RUN)\n")
145 ret=BZ2_bzCompress(&strm, BZ_FINISH);
146 if (ret==BZ_FINISH_OK)
148 if (ret==BZ_STREAM_END)
151 SG_ERROR(
"Error bzip2-compressing data (BZ_FINISH)\n")
153 BZ2_bzCompressEnd(&strm);
154 compressed_size=(((uint64_t) strm.total_out_hi32) << 32) + strm.total_out_lo32;
161 lzma_stream strm = LZMA_STREAM_INIT;
162 initial_buffer_size = lzma_stream_buffer_bound(uncompressed_size);
163 compressed_size=initial_buffer_size;
164 compressed=SG_MALLOC(uint8_t, initial_buffer_size);
165 strm.next_in=uncompressed;
166 strm.avail_in=(size_t) uncompressed_size;
167 strm.next_out=compressed;
168 strm.avail_out=(size_t) compressed_size;
170 if (lzma_easy_encoder(&strm, level, LZMA_CHECK_CRC32) != LZMA_OK)
171 SG_ERROR(
"Error initializing lzma compressor\n")
172 if (lzma_code(&strm, LZMA_RUN) != LZMA_OK)
173 SG_ERROR(
"Error lzma-compressing data (LZMA_RUN)\n")
178 ret=lzma_code(&strm, LZMA_FINISH);
181 if (ret==LZMA_STREAM_END)
184 SG_ERROR(
"Error lzma-compressing data (LZMA_FINISH)\n")
187 compressed_size=strm.total_out;
194 compressed=SG_MALLOC(uint8_t, snappy::MaxCompressedLength((
size_t) uncompressed_size));
195 size_t output_length;
196 snappy::RawCompress((
char*) uncompressed,
size_t(uncompressed_size), (
char*) compressed, &output_length);
197 compressed_size=(uint64_t) output_length;
202 SG_ERROR(
"Unknown compression type\n")
206 compressed = SG_REALLOC(uint8_t, compressed, initial_buffer_size, compressed_size);
210 uint8_t* uncompressed, uint64_t& uncompressed_size)
212 if (compressed_size==0)
222 ASSERT(uncompressed_size>=compressed_size)
223 uncompressed_size=compressed_size;
224 memcpy(uncompressed, compressed, uncompressed_size);
230 if (lzo_init() != LZO_E_OK)
231 SG_ERROR(
"Error initializing LZO Compression\n")
233 lzo_bytep lzo_wrkmem = (lzo_bytep) lzo_malloc(LZO1X_999_MEM_COMPRESS);
235 SG_ERROR(
"Error allocating LZO workmem\n")
237 lzo_uint lzo_size=uncompressed_size;
238 if (lzo1x_decompress(compressed, compressed_size, uncompressed,
239 &lzo_size, NULL) != LZO_E_OK)
241 SG_ERROR(
"Error uncompressing lzo-data\n")
243 uncompressed_size=lzo_size;
245 lzo_free(lzo_wrkmem);
252 uLongf gz_size=uncompressed_size;
253 if (uncompress(uncompressed, &gz_size, compressed,
254 compressed_size) != Z_OK)
256 SG_ERROR(
"Error uncompressing gzip-data\n")
258 uncompressed_size=gz_size;
269 if (BZ2_bzDecompressInit(&strm, 0, 0)!=BZ_OK)
270 SG_ERROR(
"Error initializing bzip2 decompressor\n")
271 strm.next_in=(
char*) compressed;
272 strm.avail_in=(
unsigned int) compressed_size;
273 strm.next_out=(
char*) uncompressed;
274 strm.avail_out=(
unsigned int) uncompressed_size;
275 if (BZ2_bzDecompress(&strm) != BZ_STREAM_END || strm.avail_in!=0)
276 SG_ERROR(
"Error uncompressing bzip2-data\n")
277 BZ2_bzDecompressEnd(&strm);
284 lzma_stream strm = LZMA_STREAM_INIT;
285 strm.next_in=compressed;
286 strm.avail_in=(size_t) compressed_size;
287 strm.next_out=uncompressed;
288 strm.avail_out=(size_t) uncompressed_size;
290 uint64_t memory_limit=lzma_easy_decoder_memusage(9);
292 if (lzma_stream_decoder(&strm, memory_limit, 0)!= LZMA_OK)
293 SG_ERROR(
"Error initializing lzma decompressor\n")
294 if (lzma_code(&strm, LZMA_RUN) != LZMA_STREAM_END)
295 SG_ERROR(
"Error decompressing lzma data\n")
303 size_t uncompressed_length;
304 if (!snappy::GetUncompressedLength( (
char*) compressed,
305 (
size_t) compressed_size, &uncompressed_length))
306 SG_ERROR(
"Error obtaining uncompressed length\n")
308 ASSERT(uncompressed_length<=uncompressed_size)
309 uncompressed_size=uncompressed_length;
310 if (!snappy::RawUncompress((
char*) compressed,
311 (
size_t) compressed_size,
312 (
char*) uncompressed))
313 SG_ERROR(
"Error uncompressing snappy data\n")
319 SG_ERROR(
"Unknown compression type\n")
E_COMPRESSION_TYPE compression_type
Class SGObject is the base class of all shogun objects.
void compress(uint8_t *uncompressed, uint64_t uncompressed_size, uint8_t *&compressed, uint64_t &compressed_size, int32_t level=1)
all of classes and functions are contained in the shogun namespace
void decompress(uint8_t *compressed, uint64_t compressed_size, uint8_t *uncompressed, uint64_t &uncompressed_size)
#define SG_UNSTABLE(func,...)