evobench_tools/utillib/
auto_vivify.rs1pub trait AutoVivify<T> {
2 fn auto_get_mut<F>(&mut self, i: usize, gen_val: F) -> &mut T
3 where
4 F: FnMut() -> T;
5}
6
7impl<T> AutoVivify<T> for Vec<T> {
8 #[inline]
9 fn auto_get_mut<'s, F>(&'s mut self, i: usize, gen_val: F) -> &'s mut T
10 where
11 F: FnMut() -> T,
12 {
13 if let Some(rf) = self.get_mut(i) {
14 let ptr: *mut T = rf;
16 let rf: &mut T = unsafe {
17 &mut *ptr
19 };
20 rf
21 } else {
22 self.resize_with(i + 1, gen_val);
23 &mut self[i]
24 }
25 }
26}