2个不稳定版本
0.3.0 | 2020年7月29日 |
---|---|
0.2.0 | 2020年7月15日 |
#408 in 内存管理
42 每月下载量
52KB
954 行
gen-vec
拥有其值的可重复使用的、世代索引的向量
灵感来源于2018年RustConf上Catherine West的闭幕演讲
封闭与暴露的索引分配实现
ClosedGenVec
使用非用户可访问的索引分配器来管理索引
ExposedGenVec
依赖于外部的 IndexAllocator
因此,必须创建并使用 IndexAllocator
来手动分配/释放索引。这对于在多个 ExposedGenerationalVec
实例之间使用相同的 Index
非常有用
注意: IndexAllocator
不能与 ClosedGenerationalVec
一起使用,因为它有自己的内部 IndexAllocator
世代索引说明
Index
结构体用于访问向量的内容。一个 Index
包含向量的索引和一个世代(最初为0)。
已释放/删除的 Index
进入一个可以重用的空闲 Index
列表
每次重用 Index
时,内部世代都会增加。这确保了已释放的 Index
处理程序无法访问它不再有效指向的数据
用法
将 gen-vec
添加到您的 Cargo.toml
[dependencies]
gen-vec = "0.2.0"
使用自分配的 ClosedGenVec
use gen_vec::Index;
use gen_vec::closed::ClosedGenVec;
let mut vec: ClosedGenVec<i32> = ClosedGenVec::new();
let index: Index = vec.insert(42);
assert!(vec.contains(index));
let value: Option<&i32> = vec.get(index);
assert_eq!(value, Some(&42));
vec.remove(index);
assert!(!vec.contains(index));
使用 ExposedGenVec
与 IndexAllocator
use gen_vec::Index;
use gen_vec::exposed::{IndexAllocator, ExposedGenVec};
let mut allocator: IndexAllocator = IndexAllocator::new();
let index: Index = allocator.allocate();
let mut vec: ExposedGenVec<i32> = ExposedGenVec::new();
vec.set(index, 5);
assert!(vec.contains(index));
let value: Option<&i32> = vec.get(index);
assert_eq!(value, Some(&5));
依赖
~175KB