1 个不稳定版本
使用旧的 Rust 2015
| 0.1.0 | 2018年1月16日 |
|---|
#2123 在 数据结构
14KB
244 行
Lil'Bits
用途
在某些情况下,即使是简单的 HashMap<T> 对于应用程序来说也太多。LilBitsSet 受到 smallset、sparseset 和 bitmap 等作品的影响,但非常简单,只有一个功能非常出色:当值永远不会 > 63 时,它实现了 HashSet<u8> 的语义。
我个人计划在我的服务器客户端库中使用它,用户可以选择向客户端的 LilBitSet 广播。由于一次最多只有 ~10 个用户在线,因此 LilBitSet 是处理与这些客户端及其对应 ID 相关的对象的完美选择。
实用性
与其他集合相比,这种数据结构有两个严重的限制
- 只能存储
u8(或任何可以asu8 的整数) - 不能存储值
>= 64。这与smallset不同,其中限制在于元素的 数量,而不是元素的 值。如果这些限制对于您的目的来说是决定性的,则最好使用smallset或类似的数据结构。否则,LilBitSet具有一些出色的特性
- 超级快的
insert等基本操作 - 超级快的
Clone和Copy - trivially benefits from obvious
Sized、Sync、Serialize、Deserialize等。 - 依赖于超级快的位操作(例如,
union到|)的集合逻辑
此外,还有一个便利的宏 lilbits! 用于构建 LilBitSet,以及一些可能有用的 From 实现,用于将其他常见的集合 HashSet、BTreeSet 转换为和从 LilBitSet。
自行使用
LilBitSet 的语义类似于 HashSet<u8>,只是缺少一些不实用的函数,例如 new_with_capacity。
最值得注意的是,如果尝试插入一个大于 63 的 u8 值,线程将 Panic!。如果这种行为不受欢迎,只需用 if 检查来保护它。我避免了自己实现它,因为这只会使 API 扩大。
示例
请参阅 tests.rs 以查看带注释的示例。
依赖项
~0.4–1MB
~24K SLoC