1use 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}