3个不稳定版本

0.4.0 2022年9月9日
0.3.1 2022年9月9日
0.2.1 2022年9月8日
0.1.0 2022年9月2日

431内存管理 中排名

每月下载量 24

MIT/Apache

19KB
374

contain-rs

用于定义/扩展生命周期的crate。

示例

简单容器

Vec 支持的 Container 的基本快速实现。

use contain::{Container, SimpleContainer};

fn append_thing<'a>(container: &'a impl Container<String>, s: &str) -> &'a str {
    container.put(format!("{}thing", s))
}

let container = SimpleContainer::new();
let a = append_thing(&container, "some");
let b = append_thing(&container, "a ");
let c = append_thing(&container, "that ");
assert_eq!(a, "something");
assert_eq!(b, "a thing");
assert_eq!(c, "that thing");
assert_eq!(container.len(), 3)

去重容器

HashSet 支持的去重 Container。如果存储了两个相等的项,则第二个将被丢弃,并返回第一个的引用。虽然比 SimpleContainer 资源密集,但在许多项相等且等效的情况下,它可以更节省内存,因为重复的项将被丢弃。

use contain::{Container, DeduplicatingContainer};

fn append_thing<'a>(container: &'a impl Container<String>, s: &str) -> &'a str {
    container.put(format!("{}thing", s))
}

let container = DeduplicatingContainer::new();
let a = append_thing(&container, "some");
let b = append_thing(&container, "a ");
let c = append_thing(&container, "some");
assert_eq!(a, "something");
assert_eq!(b, "a thing");
assert_eq!(c, "something");
assert_eq!(container.len(), 2);

依赖关系

~0.4–5MB
~11K SLoC