// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin // SPDX-License-Identifier: CC-BY-NC-ND-4.0 #pragma once #include "common/heap_array.h" #include #include class Error; namespace CompressHelpers { enum class CompressType { Uncompressed, Zstandard, XZ, Count }; using ByteBuffer = DynamicHeapArray; using OptionalByteBuffer = std::optional; OptionalByteBuffer DecompressBuffer(CompressType type, std::span data, std::optional decompressed_size = std::nullopt, Error* error = nullptr); OptionalByteBuffer DecompressBuffer(CompressType type, OptionalByteBuffer data, std::optional decompressed_size = std::nullopt, Error* error = nullptr); OptionalByteBuffer DecompressFile(std::string_view path, std::span data, std::optional decompressed_size = std::nullopt, Error* error = nullptr); OptionalByteBuffer DecompressFile(std::string_view path, OptionalByteBuffer data, std::optional decompressed_size = std::nullopt, Error* error = nullptr); OptionalByteBuffer DecompressFile(const char* path, std::optional decompressed_size = std::nullopt, Error* error = nullptr); OptionalByteBuffer DecompressFile(CompressType type, const char* path, std::optional decompressed_size = std::nullopt, Error* error = nullptr); OptionalByteBuffer CompressToBuffer(CompressType type, const void* data, size_t data_size, int clevel = -1, Error* error = nullptr); OptionalByteBuffer CompressToBuffer(CompressType type, std::span data, int clevel = -1, Error* error = nullptr); OptionalByteBuffer CompressToBuffer(CompressType type, OptionalByteBuffer data, int clevel = -1, Error* error = nullptr); bool CompressToFile(const char* path, std::span data, int clevel = -1, bool atomic_write = true, Error* error = nullptr); bool CompressToFile(CompressType type, const char* path, std::span data, int clevel = -1, bool atomic_write = true, Error* error = nullptr); const char* SZErrorToString(int res); } // namespace CompressHelpers