3 个版本
0.1.16-alpha.0 | 2023年4月1日 |
---|---|
0.1.12-alpha.0 | 2023年1月19日 |
0.1.10-alpha.0 | 2023年1月18日 |
#52 在 #leveldb
549 每月下载次数
在 66 个 crate 中使用(通过 bitcoin-leveldb)
265KB
643 行
bitcoinleveldb-hash
这个 Rust crate 是从 Bitcoin Core 代码库中的 hash.h
和 hash.cc
文件直接翻译过来的。该代码提供了一个简单哈希函数,用于 LevelDB 的内部数据结构,LevelDB 是 Bitcoin Core 的数据库后端。
注意
这个 crate 是从 C++ 直接翻译到 Rust 的 Bitcoin Core 的一部分。因此,一些函数体可能仍在翻译过程中。请注意,一旦翻译完成,这个系统将可测试。
令牌
-
HASH
:一个用于测试函数的占位符结构体。 -
hash_signed_unsigned_issue()
:一个测试函数,用于测试hash()
函数与各种输入。 -
hash: *const u8, n: usize, seed: u32, -> u32
:一个用于 LevelDB 内部数据结构的简单哈希函数。该函数接受一个字节数组的指针(data
)、要哈希的字节数(n
)和一个初始种子值(seed
)作为输入,并返回一个 32 位哈希值。哈希函数类似于 MurmurHash,具有固定的m
和r
值。哈希函数一次取四个字节,直到最后剩余的字节少于四个,然后切换到使用 switch-case 语句处理剩余的字节。
使用方法
此 crate 主要用于在其他需要 LevelDB 内部数据结构哈希函数的 crate 中作为依赖项使用。要在 Rust 项目中使用此 crate,请将以下行添加到您的 Cargo.toml
文件中
[dependencies]
bitcoinleveldb-hash = "0.1.0"
然后,在您的 Rust 代码中导入 crate:
extern crate bitcoinleveldb_hash;
一旦导入crate,您可以使用如下所示的 hash()
函数
use bitcoinleveldb_hash::hash;
fn main() {
let data: [u8; 3] = [0xe2, 0x99, 0xa5];
let seed: u32 = 0xbc9f1d34;
let n: usize = data.len();
let h = hash(data.as_ptr(), n, seed);
println!("Hash value: {}", h);
}
依赖项
~88MB
~830K SLoC