#hash #structures #internal #bitcoin #leveldb #data-structures #function

bitcoinleveldb-hash

用于内部数据结构的简单哈希函数

3 个版本

0.1.16-alpha.02023年4月1日
0.1.12-alpha.02023年1月19日
0.1.10-alpha.02023年1月18日

#52#leveldb

Download history 151/week @ 2024-04-22 130/week @ 2024-04-29 178/week @ 2024-05-06 142/week @ 2024-05-13 145/week @ 2024-05-20 100/week @ 2024-05-27 112/week @ 2024-06-03 112/week @ 2024-06-10 140/week @ 2024-06-17 160/week @ 2024-06-24 104/week @ 2024-07-08 192/week @ 2024-07-15 104/week @ 2024-07-22 109/week @ 2024-07-29 144/week @ 2024-08-05

549 每月下载次数
66 个 crate 中使用(通过 bitcoin-leveldb

MIT 许可证

265KB
643

bitcoinleveldb-hash

这个 Rust crate 是从 Bitcoin Core 代码库中的 hash.hhash.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,具有固定的 mr 值。哈希函数一次取四个字节,直到最后剩余的字节少于四个,然后切换到使用 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