#len #size #length #index-map #dynamic #optimization #size-optimization

small_len

用于以最小内部类型存储长度的简单库

24个版本 (6个稳定版)

1.1.2 2024年7月17日
0.7.0 2024年7月14日

#328算法

Download history 601/week @ 2024-06-30 694/week @ 2024-07-07 850/week @ 2024-07-14 4/week @ 2024-07-21 175/week @ 2024-07-28

1,178 每月下载量
用于 2 crates

MIT 许可证

22KB
615

small_len

一个简单的枚举和特质,以确保small_len()返回的值总是最小表示形式。这旨在由fn_vm支持“无限”命令、参数和寄存器。

注意:此库主要用于动态大小对象、String、[T]、&[T]、Vec、HashMap和IndexMap(带有indexmap功能);如果您需要编译时静态边界的优化,请查看smallnum crate。

对于通用数字crate,请查看varnum

用法

use small_len::SmallLen;

fn main() {
    let a = vec![1, 2, 3];
    let c = a.small_len(); // Length::Byte(3)
    let bytes = c.to_be_bytes();
    let c = SmallLen::from_be_bytes(&bytes); // SmallLen::from_bytes() -> Length::Byte(3)
}

功能

  • default:无额外功能,包括Vec和HashMap<K, V>实现。
  • bumpalo:为bumpalo::Bump添加Len实现。
  • bytes:为bytes::Bytesbytes::BytesMut添加Len实现。
  • indexmap:为indexmap::IndexMap添加Len实现。

自定义类型

如果您需要将SmallLen添加到其他类型中,您可以实现Len特质。

impl <T> Len for Vec<T> {
    #[inline]
    fn length(&self) -> Length {
        self.len().into() // Length::new(self.len())
    }
}

其他特质

Length枚举还实现了以下特质,以便更容易使用(Length | SmallLength | usize)

  • Vec的索引,如果索引超出范围,将panic
  • 取余
  • 按位与
  • 按位或
  • 按位异或

依赖

~0–580KB