From d08669c4fa51a864a46438c2e4bc9047931e1033 Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Thu, 29 Sep 2022 21:07:06 +0200 Subject: Compute by owner instead of HirId. --- compiler/rustc_data_structures/src/vec_map.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'compiler/rustc_data_structures/src') diff --git a/compiler/rustc_data_structures/src/vec_map.rs b/compiler/rustc_data_structures/src/vec_map.rs index 86be0bd8775..f1493e5bdad 100644 --- a/compiler/rustc_data_structures/src/vec_map.rs +++ b/compiler/rustc_data_structures/src/vec_map.rs @@ -53,6 +53,20 @@ where self.0.iter_mut().find(|(key, _)| k == key.borrow()).map(|elem| &mut elem.1) } + /// Gets a mutable reference to the value in the entry, or insert a new one. + pub fn get_mut_or_insert_default(&mut self, k: K) -> &mut V + where + K: Eq, + V: Default, + { + let pos = self.0.iter().position(|(key, _)| &k == key).unwrap_or_else(|| { + let pos = self.0.len(); + self.0.push((k, V::default())); + pos + }); + &mut self.0[pos].1 + } + /// Returns the any value corresponding to the supplied predicate filter. /// /// The supplied predicate will be applied to each (key, value) pair and it will return a -- cgit 1.4.1-3-g733a5