6个版本 (稳定)
2.0.1 | 2024年6月26日 |
---|---|
2.0.0 | 2020年9月15日 |
1.0.1 | 2020年7月15日 |
0.0.2 | 2020年5月23日 |
0.0.1 | 2020年5月23日 |
#171 in 算法
每月269次下载
270KB
5K SLoC
xxhrs
绑定到xxhash C库。涵盖了旧xxhash函数以及新的xxh3哈希函数。
使用案例?
这主要为了评估xxh3在rust中的应用而编写的。如果你只需要xxhash实现,你可以使用twox,如果你需要一个用于哈希表的快速哈希函数,你可能想要ahash。
目前xxh3仍然处于实验阶段,其输出可能会变化,但是一旦实现稳定,其哈希输出将保持在不同进程和计算机之间的一致性。
在那之后,这个crate的潜在用途包括
- 你需要一个特定的xxh3实现
- 你需要高性能,并且单次哈希是可接受的(你可能想要xxh3_64)
- 你需要高性能,并且你正在对特别长的输入进行哈希(数千KB,再次xxh3_64是你要的)
- 你需要一个128位哈希函数
请注意,如果你使用xxhrs进行性能优化,你可能需要创建基准测试。
用法
Cargo.toml
[dependencies]
# Random entropy is enabled by default; it enables RandomState*
# and EntropyPool::randomize()
xxhrs = { version = "1.0.2", features = ["random_entropy"] }
use std::{collections::HashMap, hash::Hasher};
use xxhrs::{
RandomStateXXH64, RandomStateXXH3_64, XXH32, XXH64,
XXH3_64, XXH3_128, EntropyPool
};
// Old XXHash 64 bit version
let mut h = HashMap::<i32, &str, RandomStateXXH64>::default();
h.insert(42, "the answer");
assert_eq!(h.get(&42), Some(&"the answer"));
// XXH3 64 bit version
let mut h = HashMap::<i32, &str, RandomStateXXH64>::default();
h.insert(42, "the answer");
assert_eq!(h.get(&42), Some(&"the answer"));
// XXHash 32 bit without seed, one shot hashing
assert_eq!(XXH32::hash(b"MyData"), 1695511942);
// XXHash 64 bit with seed, one shot hashing
assert_eq!(XXH64::hash_with_seed(1234, b"MyData"), 4228889600861627182);
// XXH3 64 bit version, streaming hashing, with seed
let mut h = XXH3_64::with_seed(1234);
h.write(b"MyFirstData");
h.write(b"MySecondData");
assert_eq!(h.finish(), 8235025456677196530);
// XXH3 128 bit version, straming hashing, with custom key
let entropy = EntropyPool::with_key(b"My Custom Key!"); // Can be reused for extra performance!
let mut h = XXH3_128::with_entropy(&entropy);
h.write(b"MyFirstData");
h.write(b"MySecondData");
assert_eq!(h.finish(), 49549903637678458428443811344187957401);
测试
$ cargo test --all-features
$ cargo test --no-default-features
版本历史
- 2.0.0 – 使用
xxhrs_equodaeyiejoopibaeva_
作为我们libxxhrs所有导出的前缀,以避免与另一个版本的libxxhrs链接时发生名称冲突。
许可证
版权所有 © (C) 2020,Karolin Varner。保留所有权利。
在满足以下条件的情况下,允许重新分发和使用源代码和二进制形式,无论是否修改
源代码重新分发必须保留上述版权声明、本条件列表和以下免责声明。二进制形式重新分发必须复制上述版权声明、本条件列表和以下免责声明到随分发提供的文档或其他材料中。未经事先书面许可,不得使用Karolin Varner的名称或其贡献者的名称来认可或推广源自本软件的产品。
本软件由版权所有者和贡献者提供,"现状"基础,并且不提供任何明示或暗示的保证,包括但不限于对适销性和特定用途的适用性的暗示保证。在任何情况下,Softwear, BV 对任何直接、间接、偶然、特殊、示范性或连锁损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)均不承担任何责任,无论损害是由何种原因引起的,以及基于何种责任理论,无论是在合同、严格责任还是侵权(包括疏忽或其他)中产生,即使在被告知可能发生此类损害的情况下。
依赖项
~0–2.2MB
~43K SLoC