输入配置与覆盖颜色
02345a29bbdaa1ba · 对应提交的原文 ↗构建保持固定:默认 x86_64 Linux、LP64、静态库和默认分配器,并采用已接受的平台假设。
每个对象的 2^63 字节上界由所有范围共享。下列范围针对 API 输入参数,
不引入新的形式化契约,也不改变已有目标。
对每个目标族,默认输入包含于常见输入,常见输入包含于全部支持的输入。 两个流式引擎的包含关系是严格的。具体入口可能忽略或固定某些维度,投影后的范围便可能相同。 不应为该入口凭空增加工作。
| 颜色 | 要求完整通过检查的覆盖范围 |
|---|---|
| 灰色 | 尚未完整证明默认输入。可能已有内部引理。 |
| 蓝色 | 已证明默认输入;尚未完整证明常见输入。 |
| 黄色 | 已证明常见输入;尚未完整证明全部支持的输入。 |
| 绿色 | 覆盖精确目标陈述允许的全部输入。 |
这些是累积的范围,不是工作量百分比。几个例子的证明不构成配置覆盖。 每个范围都量化其契约规定的数据、缓冲区、堆内容、失败和调用历史。 红色边框记录障碍。登记情况和指定提交上的 CI 验收与覆盖范围分开陈述。
Deflate 输入
压缩器的参数控制不同的事情:level 选择压缩级别,strategy 选择匹配与编码策略,memLevel 控制内部索引和符号存储的内存规模。windowBits 同时选择包装形式和窗口尺度;去掉包装选择后,指数 b 对应 2^b 个窗口字节。例如 15 对应 32768 字节。表中的数值是允许的参数,不是数据样例的个数。
三个范围都使用 method = Z_DEFLATED = 8。
| 参数 | 默认 | 常见 | 全部支持 |
|---|---|---|---|
level |
-1,规范化为 6 |
-1 和 0 到 9 |
-1 和 0 到 9 |
memLevel |
8 | 8 | 1 到 9 |
windowBits |
15 | -15、15、31 | -15 到 -9;8 到 15;25 到 31 |
strategy |
0 | 0 | 0 到 4 |
| 包装格式 | zlib | raw、zlib、gzip | raw、zlib、gzip |
每一列包括该列所有组合。常见输入保持 32 KiB 窗口、默认内存级别和默认策略。 有符号窗口参数 -15 选择 raw,15 选择 zlib,31 选择 gzip。 在完整范围中,zlib 的 8 被规范化为 9;固定版本源码拒绝 raw -8 和 gzip 24。
五种策略是默认(0)、过滤(1)、仅 Huffman(2)、游程编码(3)和固定码(4)。 内存级别改变哈希维度以及符号/待输出存储。因此,较小的内存级别会影响输出重叠证明。
引擎与辅助函数的范围
| 声明族 | 相关范围与执行区别 |
|---|---|
| 默认初始化 | deflateInit_ 固定方法、窗口、内存级别和策略,但保留任意压缩级别。其精确定理独立于通用 Init2 定理。 |
| 通用初始化 | deflateInit2_ 暴露完整参数元组。它的默认/常见实例必须先有各自完整的执行契约,才能分别着色。 |
| 策略分派 | 级别 0 选择直接存储;1 到 3 选择快速匹配;4 到 9 选择延迟决策的慢速匹配。非零级别下,仅 Huffman 和游程编码策略覆盖普通选择。 |
| 匹配搜索 | 在同一引擎内,有可能参数化处理表选出的 候选链遍历预算、延迟决策长度阈值和提前停止搜索长度阈值。证明必须为每个纳入的表行建立实际边界。 |
| 补充与滑动 | 窗口和哈希维度决定数组边界、环形位置和滑动。固定窗口引理不会自动成为覆盖全部窗口的定理。 |
| 树与块输出 | 符号容量、待输出存储和未读符号位置与内存级别关联。树或单符号引理不能建立完整的重叠上界。 |
这些行按实现环节划分义务,具体证据见对应条目。 组件指南解释不变量;进度记录当前证据与剩余工作。
Inflate 输入
Inflate 没有压缩级别、内存级别或策略参数。 其输入语法已经包含全部直接存储块、固定编码块和动态编码块。
| 范围 | windowBits |
|---|---|
| 默认 | 15 |
| 常见 | -15、15、31、47 |
| 全部支持 | -15 到 -8;0;8 到 15;16;24 到 31;32;40 到 47 |
常见输入选择 32 KiB 的 raw、zlib、gzip 或自动检测流。 零窗口位形式从头部选择大小,并保留固定版本对 gzip 的处理。 较小窗口影响距离检查和完整性;接受每一个有效格式流需要目标规定的窗口条件。
快速与慢速执行
快/慢路径分派与上述输入配置是不同的划分。 实际快速调用要求至少六个可用输入字节、至少 258 个可用输出字节,以及少于八个已保留位。 调用者改变缓冲区时,默认配置的流也可能走任一路径。 因此默认覆盖必须包括两条路径及其切换。
| 声明族 | 必须建立的联系 |
|---|---|
| 初始化与重置 | 为所选窗口/包装建立表示条件和受模式保护的条款。 |
| 建表 | 默认输入配置和更广范围都要覆盖直接存储块、固定编码块和动态编码块。 |
| 快速解码 | 从分派状态推导真正的快速调用前提,保留其位/输入/输出和内存效果。 |
| 慢速解码 | 在实际返回状态上组合字面量、长度、距离和匹配步骤。 |
| 分派与退出 | 组合两条路径、等待/错误退出、窗口更新和计数器回写。 |
参见组件指南。通过检查的路径引理仍以其入口不变量为条件, 不能赋予完整流的覆盖颜色。
各入口的输入
对于校验和、查询、缓冲区工具、回调、gzip 文件和其他内部目标,应阅读精确陈述的参数与前置条件。 只有参数或被表示状态确实依赖流参数维度时,该维度才适用。 封闭的精确目标证明使该陈述的定义域获得绿色,包括其明确写出的内部前提。 它不会使调用者的目标获得绿色,也不会消除这些前提。
当前图发现的是精确完整目标的证明。默认/常见颜色保留给经过审阅、具有精确受检证明的限定范围契约。 仅有范围表不会提供这些契约,也不会提高覆盖等级。 证据索引区分登记、局部证明和未证明目标。
所有适用的错误、分配失败和清理要求仍然保留。 完整公开入口目标也保留其规定的无效参数拒绝行为。 修改文字中的范围不能缩小公开定理,也不能完成目标。