Crate array_map[][src]

Expand description

no_std compatible Map and Set backed by arrays. This crate will evolve as more const-generic features become available.

Features:

This is especially useful if you have a bare enum where you want to treat each key as a field. This also has the benefit that adding a new enum variant forces you to update your code.

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];

This can also be used to memoize some common computations (this is 2x as fast as doing the computation on aarch64)

use array_map::*;
let u8_to_f32_cache = ArrayMap::<u8, f32, {u8::SIZE}>::from_closure(|u|f32::from(*u) / 255.0);
// take some bytes and convert them to f32
let floats = bytes.iter().copied().map(|b|u8_to_f32_cache[b]).collect::<Vec<_>>();

Structs

A Map backed by an array. The keys must be known statically.

A set backed by an array. All possible keys must be known statically.

This struct implements Indexable and allows all values in 0..N

This struct implements Indexable and allows all values in 0..N

Wrapper around another iterator where items are changed to Option<Iterator::Item> and the last value emitted is None.

Traits

Allows mapping from a type to an index

Allows mapping from an index to a type

Functions

Convenience function used to determine the underlying size needed for an ArraySet

Derive Macros

Derive macro for the Indexable trait.