|
2 | 2 |
|
3 | 3 | use super::*; |
4 | 4 | use alloc::collections::LinkedList; |
| 5 | +use core::hash::BuildHasher; |
5 | 6 | use hashbrown::HashSet; |
6 | 7 |
|
7 | 8 | /// A utility trait for types that can be constructed from a series of items. |
@@ -92,38 +93,40 @@ impl Container<char> for String { |
92 | 93 | } |
93 | 94 | } |
94 | 95 |
|
95 | | -impl<K: Eq + Hash, V> Container<(K, V)> for HashMap<K, V> { |
| 96 | +impl<K: Eq + Hash, V, S: Default + BuildHasher> Container<(K, V)> for HashMap<K, V, S> { |
96 | 97 | fn with_capacity(n: usize) -> Self { |
97 | | - Self::with_capacity(n) |
| 98 | + Self::with_capacity_and_hasher(n, Default::default()) |
98 | 99 | } |
99 | 100 | fn push(&mut self, (key, value): (K, V)) { |
100 | 101 | (*self).insert(key, value); |
101 | 102 | } |
102 | 103 | } |
103 | 104 |
|
104 | 105 | #[cfg(feature = "std")] |
105 | | -impl<K: Eq + Hash, V> Container<(K, V)> for std::collections::HashMap<K, V> { |
| 106 | +impl<K: Eq + Hash, V, S: Default + BuildHasher> Container<(K, V)> |
| 107 | + for std::collections::HashMap<K, V, S> |
| 108 | +{ |
106 | 109 | fn with_capacity(n: usize) -> Self { |
107 | | - Self::with_capacity(n) |
| 110 | + Self::with_capacity_and_hasher(n, Default::default()) |
108 | 111 | } |
109 | 112 | fn push(&mut self, (key, value): (K, V)) { |
110 | 113 | (*self).insert(key, value); |
111 | 114 | } |
112 | 115 | } |
113 | 116 |
|
114 | | -impl<T: Eq + Hash> Container<T> for HashSet<T> { |
| 117 | +impl<T: Eq + Hash, S: Default + BuildHasher> Container<T> for HashSet<T, S> { |
115 | 118 | fn with_capacity(n: usize) -> Self { |
116 | | - Self::with_capacity(n) |
| 119 | + Self::with_capacity_and_hasher(n, Default::default()) |
117 | 120 | } |
118 | 121 | fn push(&mut self, item: T) { |
119 | 122 | (*self).insert(item); |
120 | 123 | } |
121 | 124 | } |
122 | 125 |
|
123 | 126 | #[cfg(feature = "std")] |
124 | | -impl<T: Eq + Hash> Container<T> for std::collections::HashSet<T> { |
| 127 | +impl<T: Eq + Hash, S: Default + BuildHasher> Container<T> for std::collections::HashSet<T, S> { |
125 | 128 | fn with_capacity(n: usize) -> Self { |
126 | | - Self::with_capacity(n) |
| 129 | + Self::with_capacity_and_hasher(n, Default::default()) |
127 | 130 | } |
128 | 131 | fn push(&mut self, item: T) { |
129 | 132 | (*self).insert(item); |
@@ -570,7 +573,7 @@ impl<'p, T: Clone> Seq<'p, T> for LinkedList<T> { |
570 | 573 | } |
571 | 574 | } |
572 | 575 |
|
573 | | -impl<'p, T: Clone + Eq + Hash> Seq<'p, T> for HashSet<T> { |
| 576 | +impl<'p, T: Clone + Eq + Hash, S: BuildHasher> Seq<'p, T> for HashSet<T, S> { |
574 | 577 | type Item<'a> |
575 | 578 | = &'a T |
576 | 579 | where |
@@ -598,13 +601,14 @@ impl<'p, T: Clone + Eq + Hash> Seq<'p, T> for HashSet<T> { |
598 | 601 | fn to_maybe_ref<'b>(item: Self::Item<'b>) -> MaybeRef<'p, T> |
599 | 602 | where |
600 | 603 | 'p: 'b, |
| 604 | + S: 'b, |
601 | 605 | { |
602 | 606 | MaybeRef::Val(item.clone()) |
603 | 607 | } |
604 | 608 | } |
605 | 609 |
|
606 | 610 | #[cfg(feature = "std")] |
607 | | -impl<'p, T: Clone + Eq + Hash> Seq<'p, T> for std::collections::HashSet<T> { |
| 611 | +impl<'p, T: Clone + Eq + Hash, S: BuildHasher> Seq<'p, T> for std::collections::HashSet<T, S> { |
608 | 612 | type Item<'a> |
609 | 613 | = &'a T |
610 | 614 | where |
@@ -632,6 +636,7 @@ impl<'p, T: Clone + Eq + Hash> Seq<'p, T> for std::collections::HashSet<T> { |
632 | 636 | fn to_maybe_ref<'b>(item: Self::Item<'b>) -> MaybeRef<'p, T> |
633 | 637 | where |
634 | 638 | 'p: 'b, |
| 639 | + S: 'b, |
635 | 640 | { |
636 | 641 | MaybeRef::Val(item.clone()) |
637 | 642 | } |
|
0 commit comments