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 算法

Download history 155/week @ 2024-06-25 16/week @ 2024-07-02 4/week @ 2024-07-09

每月269次下载

BSD-3-Clause

270KB
5K SLoC

C 4.5K SLoC // 0.2% comments Rust 852 SLoC // 0.1% comments C++ 95 SLoC // 0.2% comments

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