fast_logger/
u32map.rs

1//! HashMap that assigns items by ID for later retrieval
2
3use std::collections::HashMap;
4
5#[derive(Clone, Debug)]
6pub struct U32Map<T> {
7    map: HashMap<u32, T>,
8    val: u32,
9}
10
11impl<T> U32Map<T> {
12    pub fn new() -> Self {
13        U32Map {
14            map: HashMap::new(),
15            val: u32::max_value(),
16        }
17    }
18
19    pub fn insert(&mut self, value: T) -> Option<u32> {
20        let initial = self.val;
21        self.val = self.val.wrapping_add(1);
22        while self.map.contains_key(&self.val) && self.val != initial {
23            self.val = self.val.wrapping_add(1);
24        }
25        if self.val == initial {
26            None
27        } else {
28            self.map.insert(self.val, value);
29            Some(self.val)
30        }
31    }
32
33    pub fn get(&self, key: &u32) -> Option<&T> {
34        self.map.get(key)
35    }
36}