diff --git a/cranelift/codegen/meta/src/default_map.rs b/cranelift/codegen/meta/src/default_map.rs new file mode 100644 index 0000000000..da6d471439 --- /dev/null +++ b/cranelift/codegen/meta/src/default_map.rs @@ -0,0 +1,19 @@ +use std::collections::HashMap; +use std::hash::Hash; + +pub trait MapWithDefault { + fn get_or_default(&mut self, k: K) -> &mut V; +} + +impl MapWithDefault for HashMap { + fn get_or_default(&mut self, k: K) -> &mut V { + self.entry(k).or_insert_with(|| V::default()) + } +} + +#[test] +fn test_default() { + let mut hash_map = HashMap::new(); + hash_map.insert(42, "hello"); + assert_eq!(*hash_map.get_or_default(43), ""); +} diff --git a/cranelift/codegen/meta/src/lib.rs b/cranelift/codegen/meta/src/lib.rs index af8e51bb9d..901f640a51 100644 --- a/cranelift/codegen/meta/src/lib.rs +++ b/cranelift/codegen/meta/src/lib.rs @@ -12,6 +12,7 @@ mod gen_settings; mod gen_types; mod constant_hash; +mod default_map; mod shared; mod unique_table;