3个版本
0.7.12 | 2024年6月26日 |
---|---|
0.7.11 | 2024年4月29日 |
0.7.10 | 2024年4月29日 |
545 在 数据结构
每月26次下载
74KB
2.5K SLoC
splay-safe-rs
描述
使用safe rust实现的Splay。
许可证
本软件根据Mozilla Public License Version 2.0授权。
lib.rs
:
使用safe rust实现的Splay。
示例
use splay_safe_rs::{BasicOpsWithKey, KeyValue, SplayWithKey};
use std::ops::Bound;
struct SplayValue {
vlen: usize,
kvsize: usize,
}
impl BasicOpsWithKey<String> for SplayValue {
fn push_up(
&mut self,
key: &String,
lc: Option<&KeyValue<String, Self>>,
rc: Option<&KeyValue<String, Self>>,
) {
self.kvsize = key.len() + self.vlen;
if let Some(d) = lc {
self.kvsize += d.value.kvsize;
}
if let Some(d) = rc {
self.kvsize += d.value.kvsize;
}
}
}
let mut keys = SplayWithKey::<String, SplayValue>::new();
keys.insert("aa".to_owned(), SplayValue { vlen: 1, kvsize: 3 });
keys.insert("bb".to_owned(), SplayValue { vlen: 2, kvsize: 4 });
keys.insert("cc".to_owned(), SplayValue { vlen: 3, kvsize: 5 });
keys.insert("dd".to_owned(), SplayValue { vlen: 4, kvsize: 6 });
assert_eq!(
keys.range::<str, _>((Bound::Included("bb"), Bound::Included("cc")))
.root_data()
.unwrap()
.value
.kvsize,
9
);
依赖项
~0.5–1.1MB
~25K SLoC