/
Shymer123
/
LumenServer
Обзор
Документация
Войти
/
Shymer123
/
LumenServer
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Server/SourceFiles/Core/Utils/Compression.cpp
55 строк
2 KB
Shymer123
Initial commit: LumenServer
20 июн 2026, 12:43
20 июн 2026, 12:43
173f14c
Код
Авторство
О чём код?
#include "Compression.h" #include <zlib.h> #include <cstdint> #include <stdexcept> namespace Core::Utils { std::vector<std::byte> compress(const std::vector<std::byte>& data, int level) { if(data.empty()) return {}; uint64_t sourceLen = static_cast<uint64_t>(data.size()); uint64_t destLen = compressBound(sourceLen); std::vector<std::byte> compressed(destLen); int result = ::compress2(reinterpret_cast<Bytef*>(compressed.data()), &destLen, reinterpret_cast<const Bytef*>(data.data()), sourceLen, level); if(result != Z_OK) { throw std::runtime_error("[Compression] compress2 failed with code " + std::to_string(result)); } compressed.resize(destLen); return compressed; } std::vector<std::byte> decompress(const std::vector<std::byte>& data) { if(data.empty()) return {}; uint64_t destLen = data.size() * 4; std::vector<std::byte> decompressed(destLen); int result = Z_OK; while((result = ::uncompress(reinterpret_cast<Bytef*>(decompressed.data()), &destLen, reinterpret_cast<const Bytef*>(data.data()), data.size())) == Z_BUF_ERROR) { destLen *= 2; decompressed.resize(destLen); } if(result != Z_OK) { throw std::runtime_error("[Compression] uncompress failed with code " + std::to_string(result)); } decompressed.resize(destLen); return decompressed; } } // namespace Core::Utils