#pragma once
#include <vector>
#include "helpers.hpp"

// For parsing the LZ77 format used for compressing the .code file in the ExeFS
namespace CartLZ77 {
    // Retrieves the uncompressed size of the compressed LZ77 data stored in buffer with a specific compressed size
    u32 decompressedSize(const u8* buffer, u32 compressedSize);

    template <typename T>
    static u32 decompressedSize(const std::vector<T>& buffer) {
        return decompressedSize((u8*)buffer.data(), u32(buffer.size() * sizeof(T)));
    }

    // Decompresses an LZ77-compressed buffer stored in input to output
    bool decompress(std::vector<u8>& output, const std::vector<u8>& input);
} // End namespace CartLZ77