4个版本
0.1.3 | 2023年4月26日 |
---|---|
0.1.2 | 2023年3月31日 |
0.1.1 | 2023年3月27日 |
0.1.0 | 2023年3月24日 |
#475 在 内存管理
48 每月下载量
在 2 个Crates中使用(通过 arena_system)
43KB
730 代码行
vec_cell
具有内部可变性和允许对其元素取不重叠可变引用的Rust Vec。
use vec_cell::VecCell;
// Create `VecCell`.
let vec_cell: VecCell<i32> = VecCell::new();
// Push elements to `VecCell`.
vec_cell.push(0);
vec_cell.push(1);
vec_cell.push(2);
// Take immutable borrows to `VecCell` elements.
{
assert_eq!(*vec_cell.borrow(0), 0);
assert_eq!(*vec_cell.borrow(1), 1);
assert_eq!(*vec_cell.borrow(2), 2);
}
// Take disjoint mutable borrows to `VecCell` elements.
{
let borrow_mut1 = &mut *vec_cell.borrow_mut(1);
let borrow_mut2 = &mut *vec_cell.borrow_mut(2);
*borrow_mut1 = 10;
*borrow_mut2 = 15;
}
// Pop elements from `VecCell`.
assert_eq!(vec_cell.pop(), 15);
assert_eq!(vec_cell.pop(), 10);
assert_eq!(vec_cell.pop(), 0);
lib.rs
:
VecCell
是一个具有内部可变性和动态检查借用规则的 Vec
。 VecCell
允许对其元素取不重叠的可变借用。
示例
use vec_cell::VecCell;
let mut vec_cell: VecCell<i32> = VecCell::new();
vec_cell.push(0);
vec_cell.push(1);
vec_cell.push(2);
{
assert_eq!(*vec_cell.borrow(0), 0);
assert_eq!(*vec_cell.borrow(1), 1);
assert_eq!(*vec_cell.borrow(2), 2);
}
{
let borrow_mut1 = &mut *vec_cell.borrow_mut(1);
let borrow_mut2 = &mut *vec_cell.borrow_mut(2);
*borrow_mut1 = 10;
*borrow_mut2 = 15;
}
assert_eq!(vec_cell.pop(), Some(15));
assert_eq!(vec_cell.pop(), Some(10));
assert_eq!(vec_cell.pop(), Some(0));
依赖关系
~325–790KB
~19K SLoC