# crc32fast-cj **Repository Path**: iJetLi/crc32fast-cj ## Basic Information - **Project Name**: crc32fast-cj - **Description**: Fast CRC32 (IEEE) checksum computation - Cangjie reimplementation of Rust crc32fast - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-13 - **Last Updated**: 2026-07-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # crc32fast Rust [crc32fast](https://github.com/srijs/rust-crc32fast) 库的仓颉语言重新实现。 提供快速的 CRC32 (IEEE) 校验和计算,支持增量哈希与合并操作。 ## 功能 - **`hash()`** — 一次性 CRC32 校验和计算 - **`CrcHasher`** — 增量 CRC32 计算,支持 `update` / `finalize` / `reset` - **`CrcHasher(initVal)`** — 带自定义初始值的 CRC32 - **`CrcHasher(initVal, amount)`** — 带自定义初始值和字节计数的 CRC32(用于 combine) - **`combine()`** — 合并两个 CRC32 校验值:`crc(a||b) = combine(crc(a), crc(b), len(b))` - **快速基线算法** — 每次迭代处理 16 字节,4 倍展开(一次处理 64 字节) - **完整对齐 Rust API** — 覆盖 `crc32fast` v1.5.0 所有公开 API ## 用法 ```cangjie import crc32fast // 一次性计算 let checksum = hash(buf) // 增量计算 let hasher = CrcHasher() hasher.update(chunk1) hasher.update(chunk2) let result = hasher.finalize() // 重置并复用 hasher.reset() hasher.update(newData) let result2 = hasher.finalize() // 合并两个校验值 let hashA = CrcHasher() hashA.update(partA) let hashB = CrcHasher() hashB.update(partB) hashA.combine(hashB) // hashA.finalize() == hash(partA ++ partB) // 自定义初始值 let hasher = CrcHasher(0xFFFFFFFFu32) // 自定义初始值 + 字节计数 let hasher = CrcHasher(0u32, 100u64) ``` ## 构建与测试 ```bash cjpm build cjpm test ``` ## 项目结构 ``` src/ lib.cj # 公开 API:hash()、CrcHasher table.cj # CRC32 查找表(16×256 项) baseline.cj # 基线算法:updateSlow、updateFast16 combine.cj # 合并算法:合并两个 CRC 值 crc32fast_test.cj # 单元测试(27 个测试用例) ``` ## API 映射(Rust → 仓颉) | Rust | 仓颉 | 说明 | |---|---|---| | `crc32fast::hash(buf)` | `hash(buf)` | | | `Hasher::new()` | `CrcHasher()` | 重命名以避免与 std.core.Hasher 冲突 | | `Hasher::new_with_initial(init)` | `CrcHasher(initVal)` | | | `Hasher::new_with_initial_len(init, len)` | `CrcHasher(initVal, amount)` | | | `hasher.update(buf)` | `hasher.update(buf)` | | | `hasher.finalize()` | `hasher.finalize()` | | | `hasher.reset()` | `hasher.reset()` | | | `hasher.combine(&other)` | `hasher.combine(other)` | 接收 CrcHasher(非引用) | | `impl Default for Hasher` | `CrcHasher()` | 等同于 new() | | `impl fmt::Debug for Hasher` | `hasher.toString()` | | | `impl hash::Hasher for Hasher` | ✅ `CrcHasher <: std.core.Hasher` | 完整实现 write/finish/reset | | `internal_new_baseline` | `CrcHasher(amount, state)` | | | `internal_new_specialized` | 不适用 | 仓颉无 SIMD 支持 | ## 测试覆盖 所有 Rust 测试用例完整对齐: | Rust 测试 | 仓颉测试 | |---|---| | `baseline::test::slow`(7 个断言) | `testUpdateSlow` | | `baseline::test::fast_16_is_the_same_as_slow` | `testUpdateFast16MatchesSlow` + `testUpdateFast16VariousSizes` | | `combine::test::golden`(7 个断言) | `testCombineGolden` | | `lib::test::combine` | `testHasherCombine` | | `lib::test::combine_from_len` | `testHasherCombineFromLen` | 另有额外测试:`testHashBasic`、`testHashKnownValues`、`testHasherDebug`、`testHasherInternalNewBaseline`、`testHasherCombineMultipleSegments`、`testHasherUpdateMultipleSmallChunks`、`testHasherWithInitialAndCombine` 等。 ## 许可证 MIT