#ifndef __DEFLATE_HPP__ #define __DEFLATE_HPP__ #include #include #include namespace jdi { /** * @brief 解压一个 zlib(RFC 1950)流(内含 DEFLATE / RFC 1951 数据)。 * * 本项目**不链接 zlib**(`-lz` 会让 Release 产物多出约 46KB),只用这一份紧凑实现: * * HDF5 分块数据集的 deflate 过滤器(MATLAB `.mat`); * * MDF4 的 `##DZ` 压缩数据块。 * * ⚠️ 只接受「无预设字典」的 deflate 流;末尾的 Adler32 校验值不做验证(只跳过)。 * * @param [IN] source 压缩数据起始指针(含 2 字节 zlib 头)。 * @param [IN] sourceSize 压缩数据长度(含头与 4 字节尾)。 * @param [OUT] out 解压结果(函数内部先 `clear`,再追加写入)。 * @param [IN] expectedSize 期望的解压长度;>0 时预分配容量,避免反复扩容。 * @return 成功返回 true。 */ bool InflateZlib(const std::uint8_t* source, std::size_t sourceSize, std::vector& out, std::size_t expectedSize = 0); /** * @brief 判断一段数据是否是 zlib 流(2 字节头:CM=8、FCHECK 正确、无预设字典)。 * @param [IN] source 数据起始指针。 * @param [IN] sourceSize 数据长度。 * @return 很像 zlib 流返回 true。 */ bool LooksLikeZlib(const std::uint8_t* source, std::size_t sourceSize); } // namespace jdi #endif