31 #ifndef DATA_ZLIB_HPP_ 32 #define DATA_ZLIB_HPP_ 34 #include "../../Main/Exception.hpp" 51 std::string
compress(
const std::string& content);
52 std::string
decompress(
const std::string& compressedContent);
100 inline std::string
compress(
const std::string& content) {
101 if(content.empty()) {
105 z_stream control{z_stream()};
107 std::array<char, bufferSize> buffer{};
110 result.reserve(content.size());
112 if(deflateInit(&control, Z_BEST_COMPRESSION) != Z_OK) {
114 "Data::Compression::Zlib::compress():" 115 " Could not initialize zlib compression" 119 control.next_in =
reinterpret_cast<const Bytef *
>(
122 control.avail_in = content.size();
125 control.next_out =
reinterpret_cast<Bytef *
>(buffer.data());
126 control.avail_out = buffer.size();
128 returnValue = deflate(&control, Z_FINISH);
130 if(result.size() < control.total_out) {
131 result.append(buffer.data(), control.total_out - result.size());
134 while(returnValue == Z_OK);
136 deflateEnd(&control);
138 if(returnValue != Z_STREAM_END) {
140 "Data::Compression::Zlib::compress():" 142 + std::string(control.msg)
165 inline std::string
decompress(
const std::string& compressedContent) {
166 if(compressedContent.empty()) {
170 z_stream control{z_stream()};
172 std::array<char, bufferSize> buffer{};
175 if(inflateInit(&control) != Z_OK) {
177 "Data::Compression::Zlib::decompress():" 178 " Could not initialize zlib decompression" 182 control.next_in =
reinterpret_cast<const Bytef *
>(
183 compressedContent.data()
185 control.avail_in = compressedContent.size();
188 control.next_out =
reinterpret_cast<Bytef *
>(buffer.data());
189 control.avail_out = buffer.size();
191 returnValue = inflate(&control, 0);
193 if(result.size() < control.total_out) {
194 result.append(buffer.data(), control.total_out - result.size());
197 while(returnValue == Z_OK);
199 inflateEnd(&control);
201 if(returnValue != Z_STREAM_END) {
203 "Data::Compression::Zlib::decompress():" 205 + std::string(control.msg)
#define MAIN_EXCEPTION_CLASS()
Macro used to easily define classes for general exceptions.
Definition: Exception.hpp:50
Namespace for compressing and decompressing zlib.
Definition: Zlib.hpp:42
constexpr auto bufferSize
The maximum buffer size for zlib compression and decompression.
Definition: Zlib.hpp:59
std::string decompress(const std::string &compressedContent)
Decompresses zlib-compressed content.
Definition: Zlib.hpp:165
Class for zlib exceptions.
Definition: Zlib.hpp:77
std::string compress(const std::string &content)
Compresses content using zlib.
Definition: Zlib.hpp:100