|
1 | 1 | use crate::raw::{ |
2 | 2 | Allocator, Bucket, Global, RawDrain, RawExtractIf, RawIntoIter, RawIter, RawTable, |
3 | 3 | }; |
| 4 | +use crate::util::likely; |
4 | 5 | use crate::{DefaultHashBuilder, Equivalent, TryReserveError}; |
5 | 6 | use core::borrow::Borrow; |
6 | 7 | use core::fmt::{self, Debug}; |
@@ -1306,9 +1307,14 @@ where |
1306 | 1307 | Q: Hash + Equivalent<K> + ?Sized, |
1307 | 1308 | { |
1308 | 1309 | // Avoid `Option::map` because it bloats LLVM IR. |
1309 | | - match self.get_inner(k) { |
1310 | | - Some((_, v)) => Some(v), |
1311 | | - None => None, |
| 1310 | + if likely(!self.table.is_empty()) { |
| 1311 | + let hash = make_hash::<Q, S>(&self.hash_builder, k); |
| 1312 | + match self.table.get(hash, equivalent_key(k)) { |
| 1313 | + Some((_, v)) => Some(v), |
| 1314 | + None => None, |
| 1315 | + } |
| 1316 | + } else { |
| 1317 | + None |
1312 | 1318 | } |
1313 | 1319 | } |
1314 | 1320 |
|
@@ -1337,22 +1343,14 @@ where |
1337 | 1343 | Q: Hash + Equivalent<K> + ?Sized, |
1338 | 1344 | { |
1339 | 1345 | // Avoid `Option::map` because it bloats LLVM IR. |
1340 | | - match self.get_inner(k) { |
1341 | | - Some((key, value)) => Some((key, value)), |
1342 | | - None => None, |
1343 | | - } |
1344 | | - } |
1345 | | - |
1346 | | - #[inline] |
1347 | | - fn get_inner<Q>(&self, k: &Q) -> Option<&(K, V)> |
1348 | | - where |
1349 | | - Q: Hash + Equivalent<K> + ?Sized, |
1350 | | - { |
1351 | | - if self.table.is_empty() { |
1352 | | - None |
1353 | | - } else { |
| 1346 | + if likely(!self.table.is_empty()) { |
1354 | 1347 | let hash = make_hash::<Q, S>(&self.hash_builder, k); |
1355 | | - self.table.get(hash, equivalent_key(k)) |
| 1348 | + match self.table.get(hash, equivalent_key(k)) { |
| 1349 | + Some((key, value)) => Some((key, value)), |
| 1350 | + None => None, |
| 1351 | + } |
| 1352 | + } else { |
| 1353 | + None |
1356 | 1354 | } |
1357 | 1355 | } |
1358 | 1356 |
|
@@ -1385,9 +1383,14 @@ where |
1385 | 1383 | Q: Hash + Equivalent<K> + ?Sized, |
1386 | 1384 | { |
1387 | 1385 | // Avoid `Option::map` because it bloats LLVM IR. |
1388 | | - match self.get_inner_mut(k) { |
1389 | | - Some(&mut (ref key, ref mut value)) => Some((key, value)), |
1390 | | - None => None, |
| 1386 | + if likely(!self.table.is_empty()) { |
| 1387 | + let hash = make_hash::<Q, S>(&self.hash_builder, k); |
| 1388 | + match self.table.get_mut(hash, equivalent_key(k)) { |
| 1389 | + Some(&mut (ref key, ref mut value)) => Some((key, value)), |
| 1390 | + None => None, |
| 1391 | + } |
| 1392 | + } else { |
| 1393 | + None |
1391 | 1394 | } |
1392 | 1395 | } |
1393 | 1396 |
|
@@ -1415,7 +1418,12 @@ where |
1415 | 1418 | where |
1416 | 1419 | Q: Hash + Equivalent<K> + ?Sized, |
1417 | 1420 | { |
1418 | | - self.get_inner(k).is_some() |
| 1421 | + if likely(!self.table.is_empty()) { |
| 1422 | + let hash = make_hash::<Q, S>(&self.hash_builder, k); |
| 1423 | + self.table.get(hash, equivalent_key(k)).is_some() |
| 1424 | + } else { |
| 1425 | + false |
| 1426 | + } |
1419 | 1427 | } |
1420 | 1428 |
|
1421 | 1429 | /// Returns a mutable reference to the value corresponding to the key. |
@@ -1447,22 +1455,14 @@ where |
1447 | 1455 | Q: Hash + Equivalent<K> + ?Sized, |
1448 | 1456 | { |
1449 | 1457 | // Avoid `Option::map` because it bloats LLVM IR. |
1450 | | - match self.get_inner_mut(k) { |
1451 | | - Some(&mut (_, ref mut v)) => Some(v), |
1452 | | - None => None, |
1453 | | - } |
1454 | | - } |
1455 | | - |
1456 | | - #[inline] |
1457 | | - fn get_inner_mut<Q>(&mut self, k: &Q) -> Option<&mut (K, V)> |
1458 | | - where |
1459 | | - Q: Hash + Equivalent<K> + ?Sized, |
1460 | | - { |
1461 | | - if self.table.is_empty() { |
1462 | | - None |
1463 | | - } else { |
| 1458 | + if likely(!self.table.is_empty()) { |
1464 | 1459 | let hash = make_hash::<Q, S>(&self.hash_builder, k); |
1465 | | - self.table.get_mut(hash, equivalent_key(k)) |
| 1460 | + match self.table.get_mut(hash, equivalent_key(k)) { |
| 1461 | + Some(&mut (_, ref mut v)) => Some(v), |
| 1462 | + None => None, |
| 1463 | + } |
| 1464 | + } else { |
| 1465 | + None |
1466 | 1466 | } |
1467 | 1467 | } |
1468 | 1468 |
|
|
0 commit comments