#owner #lease #vec #data #rent #moved #guard

rent_vec

每个项目都有一个独特所有者的Rust向量

1个不稳定版本

0.1.0 2022年9月15日

2484算法

MIT 许可证

12KB
278

Rent Vec

这个crate背后的想法是拥有一个向量,其中每个项目都有一个所有者,就像它是租来的。

每次将某个项目推入RentVec时,它都会返回一个租约,这是访问底层数据的一种方式。

use rent_vec::RentVec;
let mut vec = RentVec::new();

let mut lease = vec.push(1u32);

let mut item = lease.guard();
*item = 2;

访问数据另一种方式是通过写保护器和迭代器,这保证了没有租约正在修改其条目。

let mut guard = vec.guard();
guard.iter();
guard.iter_mut();

如果移除条目,它将从后部移动一个项目到其位置,并将其他标记为已移动。

let mut lease = vec.push(10u32);
lease.remove();

一旦访问了已移动的条目,租约就会意识到新的位置,并且可以释放已移动的条目。

为什么

如果你需要一个尽可能连续的StableVec。租约也保证了有效性。

这是在早上编写的,以了解这个概念可能看起来像什么。

缺点

访问性能较差,因为它必须解决已移动条目。在第一次解决之后,它是O(1)。

推入性能也较慢,因为它必须在已移动条目中搜索已释放的条目。如果没有已移动条目,它是O(1)。

没有运行时依赖