#typemap #map #no-std #static #traits #tyght

nightly no-std tyght-map

静态类型映射实现

8次发布

0.2.0 2024年3月9日
0.1.1 2023年5月24日
0.1.0 2023年3月23日

#2222数据结构

MIT 许可证

17KB
335

tyght-map

CI Crates.io Documentation License: MIT

静态类型映射实现。


lib.rs:

tyght-map crate 提供了静态类型映射实现。

类型映射是一种值按其类型索引的映射。

映射 TyghtMap 具有以下特性

  • 映射的大小将与其项的大小相匹配。
  • 没有堆分配,此crate是 !#[no_std]
  • 提供可靠和不可靠的方法。
  • 无安全隐患。

示例

#![feature(generic_const_exprs)]

// Insert some different types into the map and check the size
let map = TyghtMap::new().insert(3u32).insert(4i32).insert(3f32);
assert_eq!(std::mem::size_of_val(&map), 12);

// Retrieve the `u32` from the map
let item: &u32 = map.get();
assert_eq!(*item, 3);

// Insert a `String` into the map, then mutate it
let mut map = map.insert("Hey".to_string());
*map.get_mut::<String>() += ", world!";

// Try to get a `u8` from the map
let item = map.try_get::<u8>();
assert_eq!(item, None);

// Remove the `String` from the map
let (item, _map) = map.remove::<String>();
println!("{item}");

特质

TyghtMap<S>S 的约束作为对其包含的值的约束。

有三个重要的标记特质

以下函数 不能 使用不包含 Stringu32 的映射调用。

fn print_string<S>(map: &TyghtMap<S>)
where
    S: Contains<String>,
    S: Contains<u32>,
{
    let string: &String = map.get();
    let int: &u32 = map.get();
    println!("{string} {int}");
}

夜间版

与其他尝试不同,此实现不依赖于专业化。然而,它依赖于各种夜间功能

这些有望在专业化之前以某种形式得到稳定。

无运行时依赖