Skip to content

Commit c703bd3

Browse files
committed
avoid creating empty maps
1 parent c96b3ed commit c703bd3

File tree

1 file changed

+14
-6
lines changed
  • turbopack/crates/turbo-tasks-backend/src/backend

1 file changed

+14
-6
lines changed

turbopack/crates/turbo-tasks-backend/src/backend/storage.rs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -192,14 +192,22 @@ where
192192
}
193193
}
194194

195-
fn get_map_mut(&mut self, key: &T::Key) -> &mut AutoMap<T::Key, T::Value> {
195+
fn get_or_create_map_mut(&mut self, key: &T::Key) -> &mut AutoMap<T::Key, T::Value> {
196196
self.check_threshold();
197197
match self {
198198
InnerStorage::Plain { map, .. } => map,
199199
InnerStorage::Indexed { map, .. } => map.entry(key.index()).or_default(),
200200
}
201201
}
202202

203+
fn get_map_mut(&mut self, key: &T::Key) -> Option<&mut AutoMap<T::Key, T::Value>> {
204+
self.check_threshold();
205+
match self {
206+
InnerStorage::Plain { map, .. } => Some(map),
207+
InnerStorage::Indexed { map, .. } => map.get_mut(&key.index()),
208+
}
209+
}
210+
203211
fn get_map(&self, key: &T::Key) -> Option<&AutoMap<T::Key, T::Value>> {
204212
match self {
205213
InnerStorage::Plain { map, .. } => Some(map),
@@ -216,7 +224,7 @@ where
216224

217225
pub fn add(&mut self, item: T) -> bool {
218226
let (key, value) = item.into_key_and_value();
219-
match self.get_map_mut(&key).entry(key) {
227+
match self.get_or_create_map_mut(&key).entry(key) {
220228
Entry::Occupied(_) => false,
221229
Entry::Vacant(e) => {
222230
e.insert(value);
@@ -227,19 +235,19 @@ where
227235

228236
pub fn insert(&mut self, item: T) -> Option<T::Value> {
229237
let (key, value) = item.into_key_and_value();
230-
self.get_map_mut(&key).insert(key, value)
238+
self.get_or_create_map_mut(&key).insert(key, value)
231239
}
232240

233241
pub fn remove(&mut self, key: &T::Key) -> Option<T::Value> {
234-
self.get_map_mut(key).remove(key)
242+
self.get_map_mut(key).and_then(|m| m.remove(key))
235243
}
236244

237245
pub fn get(&self, key: &T::Key) -> Option<&T::Value> {
238246
self.get_map(key).and_then(|m| m.get(key))
239247
}
240248

241249
pub fn get_mut(&mut self, key: &T::Key) -> Option<&mut T::Value> {
242-
self.get_map_mut(key).get_mut(key)
250+
self.get_map_mut(key).and_then(|m| m.get_mut(key))
243251
}
244252

245253
pub fn has_key(&self, key: &T::Key) -> bool {
@@ -283,7 +291,7 @@ where
283291
key: &T::Key,
284292
update: impl FnOnce(Option<T::Value>) -> Option<T::Value>,
285293
) {
286-
let map = self.get_map_mut(key);
294+
let map = self.get_or_create_map_mut(key);
287295
if let Some(value) = map.get_mut(key) {
288296
let v = take(value);
289297
if let Some(v) = update(Some(v)) {

0 commit comments

Comments
 (0)