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必须手动返回到池中。
支持#为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。