// Copyright 2019 yuzu Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include #include "data_compression.h" namespace Compression { std::vector CompressDataLZ4(const u8* source, std::size_t source_size) { if (source_size > LZ4_MAX_INPUT_SIZE) { // Source size exceeds LZ4 maximum input size return {}; } const auto source_size_int = static_cast(source_size); const int max_compressed_size = LZ4_compressBound(source_size_int); std::vector compressed(max_compressed_size); const int compressed_size = LZ4_compress_default(reinterpret_cast(source), reinterpret_cast(compressed.data()), source_size_int, max_compressed_size); if (compressed_size <= 0) { // Compression failed return {}; } compressed.resize(compressed_size); return compressed; } std::vector DecompressDataLZ4(const std::vector& compressed, std::size_t uncompressed_size) { std::vector uncompressed(uncompressed_size); const int size_check = LZ4_decompress_safe(reinterpret_cast(compressed.data()), reinterpret_cast(uncompressed.data()), static_cast(compressed.size()), static_cast(uncompressed.size())); if (static_cast(uncompressed_size) != size_check) { // Decompression failed return {}; } return uncompressed; } } // namespace Compression