Program Listing for File serializer.cpp
↰ Return to documentation for file (src/lib/util/serializer.cpp)
#include <heongpu/util/serializer.h>
namespace heongpu
{
namespace serializer
{
std::vector<uint8_t> to_buffer(const std::stringstream& ss)
{
const std::string& str = ss.str();
return {str.begin(), str.end()};
}
void from_buffer(std::stringstream& ss,
const std::vector<uint8_t>& buffer)
{
ss.str(std::string(buffer.begin(), buffer.end()));
}
std::vector<uint8_t> compress(const std::vector<uint8_t>& data)
{
uLongf bound = compressBound(data.size());
std::vector<uint8_t> out(bound);
if (::compress(out.data(), &bound, data.data(), data.size()) !=
Z_OK)
{
throw std::runtime_error("Zlib compression failed");
}
out.resize(bound);
return out;
}
std::vector<uint8_t> decompress(const std::vector<uint8_t>& data)
{
// Estimate output size (may need adjustment for very large data)
std::vector<uint8_t> out(data.size() * 4);
uLongf outSize = out.size();
if (::uncompress(out.data(), &outSize, data.data(), data.size()) !=
Z_OK)
{
throw std::runtime_error("Zlib decompression failed");
}
out.resize(outSize);
return out;
}
} // namespace serializer
} // namespace heongpu