#push #reference #insert

push-while-ref

在持有引用的同时进行推送

2 个版本

0.1.1 2021年2月5日
0.1.0 2021年2月5日

#1647 in 数据结构

MIT/Apache

10KB
134

一个库,允许在持有引用的同时还能进行推送。
如果为存储数据有另一个生命周期(此处称为 Owner),则这是可能的。

插入的数据需要在内存中不移动,因为如果容器(Vec、HashMap...)需要重新分配,则会使得引用失效。这个保证由 trait StaticType 提供。

示例推送

use push_while_ref::{VecOwner, VecChild};

let mut vec = VecOwner::new();
let mut vec = vec.child();
let v1 = vec.push(Box::new(10));
let v2 = vec.push(Box::new(20));
assert_eq!(*v1, 10);
assert_eq!(*v2, 20);

示例插入

use push_while_ref::{HashMapOwner, HashMapChild};

let mut map = HashMapOwner::new();
let mut map = map.child();
let v1 = map.insert("10", Box::new(10));
let v2 = map.insert("20", Box::new(20));
assert_eq!(*v1, 10);
assert_eq!(*v2, 20);

lib.rs:

一个库,允许在持有引用的同时还能进行推送。
如果为存储数据有另一个生命周期(此处称为 Owner),则这是可能的。

插入的数据需要在内存中不移动,因为如果容器(Vec、HashMap...)需要重新分配,则会使得引用失效。这个保证由 trait StaticType 提供。

示例推送

use push_while_ref::{VecOwner, VecChild};

let mut vec = VecOwner::new();
let mut vec = vec.child();
let v1 = vec.push(Box::new(10));
let v2 = vec.push(Box::new(20));
assert_eq!(*v1, 10);
assert_eq!(*v2, 20);

示例插入

use push_while_ref::{HashMapOwner, HashMapChild};

let mut map = HashMapOwner::new();
let mut map = map.child();
let v1 = map.insert("10", Box::new(10));
let v2 = map.insert("20", Box::new(20));
assert_eq!(*v1, 10);
assert_eq!(*v2, 20);

无运行时依赖