Compress
HSHM provides an interface to many compression libraries (if built with compress support).
The Factory
The compress factory exposes the following API:
class Compressor {
public:
Compressor() = default;
virtual ~Compressor() = default;
/**
* Compress the input buffer into the output buffer
* */
virtual bool Compress(void *output, size_t &output_size, void *input,
size_t input_size) = 0;
/**
* Decompress the input buffer into the output buffer.
* */
virtual bool Decompress(void *output, size_t &output_size, void *input,
size_t input_size) = 0;
};
The Algorithms
We support many compression algorithms:
- blosc
- brotli
- bzip2
- lz4
- lzma
- lzo
- snappy
- zlib
- zstd
An example
#include "hermes_shm/util/compress/compress_factory.h"
int main() {
hshm::Zlib zlib;
size_t cmpr_size = 1024, raw_size = 1024;
zlib.Compress(compressed.data(), cmpr_size,
raw.data(), raw.size());
zlib.Decompress(decompressed.data(), raw_size,
compressed.data(), cmpr_size);
REQUIRE(raw == std::string(decompressed.data(), raw_size));
}