|
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