// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include #include #include "common/common_types.h" namespace Common::Compression { /** * Compresses a source memory region with Zstandard and returns the compressed data in a vector. * * @param source The uncompressed source memory region. * @param source_size The size of the uncompressed source memory region. * @param compression_level The used compression level. Should be between 1 and 22. * * @return the compressed data. */ [[nodiscard]] std::vector CompressDataZSTD(const u8* source, std::size_t source_size, s32 compression_level); /** * Compresses a source memory region with Zstandard with the default compression level and returns * the compressed data in a vector. * * @param source The uncompressed source memory region. * @param source_size The size of the uncompressed source memory region. * * @return the compressed data. */ [[nodiscard]] std::vector CompressDataZSTDDefault(const u8* source, std::size_t source_size); /** * Decompresses a source memory region with Zstandard and returns the uncompressed data in a vector. * * @param compressed the compressed source memory region. * * @return the decompressed data. */ [[nodiscard]] std::vector DecompressDataZSTD(std::span compressed); /** * Decompresses a single Zstandard frame that declares its content size. * * @param compressed the compressed source memory region. * @param max_size the largest content size to accept. * * @return the decompressed data, or nullopt if the frame is invalid, does not declare its size, * or declares more than max_size bytes. */ [[nodiscard]] std::optional> TryDecompressDataZSTD(std::span compressed, std::size_t max_size); /** * Decompresses a single Zstandard frame into a caller-provided buffer of known size. * * @param compressed the compressed source memory region. * @param output the destination buffer. Its size is the maximum number of bytes to write. * * @return the number of bytes written, or 0 if the frame is invalid or doesn't fit. An empty * frame also returns 0. */ [[nodiscard]] std::size_t DecompressDataZSTD(std::span compressed, std::span output); } // namespace Common::Compression