Crate vec_cell

source ·
Expand description

VecCell is a Vec with interior mutability and dynamically checked borrow rules. VecCell allows to take disjoint mutable borrows to its elements.

Example

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));

Structs

  • A wrapper type for a immutably borrowed element from a VecCell<T>.
  • A wrapper type for a mutably borrowed element from a VecCell<T>.
  • A Vec with interior mutability and dynamically checked borrow rules when interacting with its elements.

Enums

  • An error which may occure after calling VecCell::try_borrow or VecCell::try_borrow_mut.

Traits

  • A trait which is used to implement flattenning of nested types, e.g. converting Option<ElementRef<'_, Option<T>>> to Option<ElementRef<'_, T>>.