#id #pool #raii

无需std reusable-id-pool

RAII ID池

3个版本

0.1.2 2024年5月1日
0.1.1 2023年12月22日
0.1.0 2023年12月21日

#2 in #raii

Apache-2.0 OR MIT

22KB
362

reusable-id-pool

RAII ID池。

此crate提供了两个结构体,ReusableIdPoolReusableIdPoolManual

示例

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

依赖项