1 个不稳定版本
使用旧Rust 2015
0.1.0 | 2018年5月5日 |
---|
#20 in #bincode
10KB
201 行
IBLT
在Rust中实现的可逆布隆查找表。
IBLT
使用bincode进行键和值的序列化/反序列化,因此键和值类型必须实现Serialize
和Deserialize
。如果两个序列化值长度不同,则在较短的值末尾添加零填充以进行异或操作。
可以通过使用IBLT
的with_hasher
函数指定哈希函数。对hash_sum
的哈希值计算为hash(val)
,索引计算为hash(hash(val)), hash(hash(hash(val))), ...
。如果没有指定hasher,则使用DefaultHasher
从std::collections::hash_map
。
示例
/// encoding
let mut iblt = IBLT::new(10, 3);
target.insert("378b8bc3".to_string(), "4725a63a".to_string());
target.insert("3f84ef5a".to_string(), "fbfc32d3".to_string());
target.insert("8afb596f".to_string(), "40abfd05".to_string());
target.insert("ec276396".to_string(), "a866db2e".to_string());
target.insert("e785c851".to_string(), "0603063c".to_string());
/// decoding
match iblt.decode() {
Ok((left, right)) => { ... },
Err(e) => { ... },
}
待办
- 减法和集合协调
- 使用std的不安全序列化/反序列化
依赖项
~340–590KB
~14K SLoC