#interior-mutability #array #order #guarantees #cell #fixed-capacity #vector-like

arraysetcell

一个具有内部可变性和无顺序保证的固定容量、类似向量的数组

1 个不稳定发布

0.0.1 2023年5月27日

#15 in #ordering

自定义许可

30KB
504

ArraySetCell

一个具有内部可变性和无顺序保证的固定容量、类似向量的数组。

⚠️ 此crate使用大量不安全代码来绕过初始化和重新分配问题。行为尚未严格测试,一些边缘情况可能引起未定义行为。请自行承担风险。

use std::cell::Cell;
use arraysetcell::ArraySetCell;

fn it_works() {
    let mut array = ArraySetCell::<u32, 3>::from([Some(1), None, Some(3)]);
    assert_eq!(array.capacity(), 3);
    assert_eq!(array.len(), 2);

    array.push(10);
    assert_eq!(array.len(), 3);

    array.retain(|x| *x < 10);
    assert_eq!(array.len(), 2);

    let result = array.filter_mut(|x| if *x > 2 { Some(*x) } else { None });
    assert_eq!(result, Some(3));

    let mut iter = array.into_iter();
    assert_eq!(iter.size_hint(), (2, Some(2)));
    assert_eq!(iter.next(), Some(1));
    assert_eq!(iter.next(), Some(3));
    assert_eq!(iter.next(), None);
}

lib.rs:

ArraySetCell 是一个具有内部可变性和无顺序保证的固定容量、类似向量的数组。元素存储为 Cell<Option<T>>

use std::cell::Cell;
use arraysetcell::ArraySetCell;

let mut array = ArraySetCell::<u32, 3>::from([Some(1), None, Some(3)]);
assert_eq!(array.capacity(), 3);
assert_eq!(array.len(), 2);

array.push(10);
assert_eq!(array.len(), 3);

array.retain(|x| *x < 10);
assert_eq!(array.len(), 2);

let result = array.filter_mut(|x| if *x > 2 { Some(*x) } else { None });
assert_eq!(result, Some(3));

let mut iter = array.into_iter();
assert_eq!(iter.size_hint(), (2, Some(2)));
assert_eq!(iter.next(), Some(1));
assert_eq!(iter.next(), Some(3));
assert_eq!(iter.next(), None);

依赖关系

~12KB