3个版本
0.1.2 | 2024年5月1日 |
---|---|
0.1.1 | 2023年12月22日 |
0.1.0 | 2023年12月21日 |
#2 in #raii
22KB
362 行
reusable-id-pool
RAII ID池。
此crate提供了两个结构体,ReusableIdPool
和 ReusableIdPoolManual
。
示例
use reusable_id_pool::ReusableIdPool;
let reusable_id_pool = ReusableIdPool::new();
let id = reusable_id_pool.allocate();
// Do something with the `id`, like move it into a struct. It will be returned
// to the pool when it is dropped.
ReusableIdPool
一个仅支持std
的结构体,用于分配不可见的给用户使用的ArcId
。
要将ID分配给多个对象,请使用 ArcId::clone(&id)
(底层使用 Arc::clone
) 获取ID的更多实例。它们被视为相等(PartialEq
)。
通过丢弃(当所有其ArcId
被丢弃时)释放ID。 ArcId
的丢弃是常数时间操作(递减引用计数,或将最后一个添加到空闲列表)。
ReusableIdPoolManual
一个分配u64
ID的结构体。当ID需要序列化,例如通过二进制ABI,如nushift-core
所需时,应使用此结构体而不是ReusableIdPool
。ID必须手动返回到池中。
支持#![no_std]
(如果需要,请设置 default-features = false
)为ReusableIdPoolManual
,但需要alloc
。
时间复杂度
ReusableIdPool
(std
-only)
分配:O(1)
释放:O(1)
ReusableIdPoolManual
(std
)
分配:O(1)
释放:O(1)
ReusableIdPoolManual
(#![no_std]
)
分配:O(log n)
释放:O(log n)
id-pool
crate的功能比ReusableIdPoolManual
更丰富,总是#![no_std]
,并且具有O(1)分配和O(log n)释放,因此在这种情况下可能应该使用ReusableIdPoolManual
。