#safe #implemented #splay #ops

no-std splay-safe-rs

使用safe rust实现Splay

3个版本

0.7.12 2024年6月26日
0.7.11 2024年4月29日
0.7.10 2024年4月29日

545数据结构

每月26次下载

MPL-2.0 许可证

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