4个版本 (破坏性)
0.4.0 | 2022年3月24日 |
---|---|
0.3.0 | 2021年7月7日 |
0.2.0 | 2021年5月25日 |
0.1.0 | 2021年5月19日 |
#107 in #fixed-size
1,397 每月下载量
在 array_map 中使用
14KB
258 代码行
array_map
no_std
兼容的基于数组的Map和Set。
随着更多const泛型功能的可用,该crate将不断发展。
如果你有一个裸枚举,其中希望将每个键视为一个字段,这特别有用
use array_map::*;
#[repr(u8)]
#[derive(Indexable)]
enum DetectionType {
Person,
Vehicle,
Bicycle,
}
let thresholds = ArrayMap::<DetectionType, f32, {DetectionType::count()}>::from_closure(|dt| match dt {
DetectionType::Person => 0.8,
DetectionType::Vehicle => 0.9,
DetectionType::Bicycle => 0.7,
});
let person_threshold = thresholds[DetectionType::Person];
这也可以用来缓存一些常见的计算。(这是在aarch64上计算的两倍快)
use array_map::*;
let u8_to_f32_cache = ArrayMap::<u8, f32, {u8::SIZE}>::from_closure(|u|f32::from(*u) / 255.0);
let bytes = vec![0_u8; 1024];
// take some bytes and convert them to f32
let floats = bytes.iter().copied().map(|b|u8_to_f32_cache[b]).collect::<Vec<_>>();
依赖项
~1.5MB
~35K SLoC