Skip to content

Commit 19de564

Browse files
authored
Add SecondaryMap::remove (#12469)
* Add `SecondaryMap::remove` * cargo fmt
1 parent 7b929e7 commit 19de564

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

cranelift/entity/src/map.rs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,18 @@ where
128128
}
129129
}
130130

131+
/// Remove the element at `k`, if it exists, replacing it with the default
132+
/// value.
133+
pub fn remove(&mut self, k: K) -> Option<V> {
134+
let i = k.index();
135+
if i < self.elems.len() {
136+
let default = self.default.clone();
137+
Some(core::mem::replace(&mut self.elems[i], default))
138+
} else {
139+
None
140+
}
141+
}
142+
131143
/// Is this map completely empty?
132144
#[inline(always)]
133145
pub fn is_empty(&self) -> bool {
@@ -411,13 +423,21 @@ mod tests {
411423
assert_eq!(m.get(r3), Some(&42));
412424
assert_eq!(m[r3], 42);
413425

426+
let old = m.remove(r3);
427+
assert_eq!(old, Some(42));
428+
assert_eq!(m[r3], 0);
429+
let old = m.remove(r3);
430+
assert_eq!(old, Some(0));
431+
m.resize(3);
432+
let old = m.remove(r3);
433+
assert_eq!(old, None);
434+
414435
let v: Vec<E> = m.keys().collect();
415-
assert_eq!(v, [r0, r1, r2, r3]);
436+
assert_eq!(v, [r0, r1, r2]);
416437

417438
let shared = &m;
418439
assert_eq!(shared[r0], 0);
419440
assert_eq!(shared[r1], 5);
420441
assert_eq!(shared[r2], 3);
421-
assert_eq!(shared[r3], 42);
422442
}
423443
}

crates/environ/src/collections/secondary_map.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ where
7373
self.inner.try_insert(k, v)
7474
}
7575

76+
/// Same as [`cranelift_entity::SecondaryMap::remove`].
77+
pub fn remove(&mut self, k: K) -> Option<V> {
78+
self.inner.remove(k)
79+
}
80+
7681
/// Same as [`cranelift_entity::SecondaryMap::is_empty`].
7782
pub fn is_empty(&self) -> bool {
7883
self.inner.is_empty()

0 commit comments

Comments
 (0)