@@ -776,7 +776,7 @@ where
776
776
pub fn iter_hash ( & self , hash : u64 ) -> IterHash < ' _ , T > {
777
777
IterHash {
778
778
inner : unsafe { self . raw . iter_hash ( hash) } ,
779
- _marker : PhantomData ,
779
+ marker : PhantomData ,
780
780
}
781
781
}
782
782
@@ -829,7 +829,7 @@ where
829
829
pub fn iter_hash_mut ( & mut self , hash : u64 ) -> IterHashMut < ' _ , T > {
830
830
IterHashMut {
831
831
inner : unsafe { self . raw . iter_hash ( hash) } ,
832
- _marker : PhantomData ,
832
+ marker : PhantomData ,
833
833
}
834
834
}
835
835
@@ -1946,6 +1946,7 @@ impl<'a, T> Default for Iter<'a, T> {
1946
1946
}
1947
1947
}
1948
1948
}
1949
+
1949
1950
impl < ' a , T > Iterator for Iter < ' a , T > {
1950
1951
type Item = & ' a T ;
1951
1952
@@ -2051,6 +2052,20 @@ impl<T> ExactSizeIterator for IterMut<'_, T> {
2051
2052
2052
2053
impl < T > FusedIterator for IterMut < ' _ , T > { }
2053
2054
2055
+ impl < T > fmt:: Debug for IterMut < ' _ , T >
2056
+ where
2057
+ T : fmt:: Debug ,
2058
+ {
2059
+ fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
2060
+ f. debug_list ( )
2061
+ . entries ( Iter {
2062
+ inner : self . inner . clone ( ) ,
2063
+ marker : PhantomData ,
2064
+ } )
2065
+ . finish ( )
2066
+ }
2067
+ }
2068
+
2054
2069
/// An iterator over the entries of a `HashTable` that could match a given hash.
2055
2070
/// The iterator element type is `&'a T`.
2056
2071
///
@@ -2061,7 +2076,17 @@ impl<T> FusedIterator for IterMut<'_, T> {}
2061
2076
/// [`HashTable`]: struct.HashTable.html
2062
2077
pub struct IterHash < ' a , T > {
2063
2078
inner : RawIterHash < T > ,
2064
- _marker : PhantomData < & ' a T > ,
2079
+ marker : PhantomData < & ' a T > ,
2080
+ }
2081
+
2082
+ impl < ' a , T > Default for IterHash < ' a , T > {
2083
+ #[ cfg_attr( feature = "inline-more" , inline) ]
2084
+ fn default ( ) -> Self {
2085
+ IterHash {
2086
+ inner : Default :: default ( ) ,
2087
+ marker : PhantomData ,
2088
+ }
2089
+ }
2065
2090
}
2066
2091
2067
2092
impl < ' a , T > Iterator for IterHash < ' a , T > {
@@ -2074,6 +2099,37 @@ impl<'a, T> Iterator for IterHash<'a, T> {
2074
2099
None => None ,
2075
2100
}
2076
2101
}
2102
+
2103
+ fn fold < B , F > ( self , init : B , mut f : F ) -> B
2104
+ where
2105
+ Self : Sized ,
2106
+ F : FnMut ( B , Self :: Item ) -> B ,
2107
+ {
2108
+ self . inner
2109
+ . fold ( init, |acc, bucket| unsafe { f ( acc, bucket. as_ref ( ) ) } )
2110
+ }
2111
+ }
2112
+
2113
+ impl < T > FusedIterator for IterHash < ' _ , T > { }
2114
+
2115
+ // FIXME(#26925) Remove in favor of `#[derive(Clone)]`
2116
+ impl < ' a , T > Clone for IterHash < ' a , T > {
2117
+ #[ cfg_attr( feature = "inline-more" , inline) ]
2118
+ fn clone ( & self ) -> IterHash < ' a , T > {
2119
+ IterHash {
2120
+ inner : self . inner . clone ( ) ,
2121
+ marker : PhantomData ,
2122
+ }
2123
+ }
2124
+ }
2125
+
2126
+ impl < T > fmt:: Debug for IterHash < ' _ , T >
2127
+ where
2128
+ T : fmt:: Debug ,
2129
+ {
2130
+ fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
2131
+ f. debug_list ( ) . entries ( self . clone ( ) ) . finish ( )
2132
+ }
2077
2133
}
2078
2134
2079
2135
/// A mutable iterator over the entries of a `HashTable` that could match a given hash.
@@ -2086,7 +2142,17 @@ impl<'a, T> Iterator for IterHash<'a, T> {
2086
2142
/// [`HashTable`]: struct.HashTable.html
2087
2143
pub struct IterHashMut < ' a , T > {
2088
2144
inner : RawIterHash < T > ,
2089
- _marker : PhantomData < & ' a mut T > ,
2145
+ marker : PhantomData < & ' a mut T > ,
2146
+ }
2147
+
2148
+ impl < ' a , T > Default for IterHashMut < ' a , T > {
2149
+ #[ cfg_attr( feature = "inline-more" , inline) ]
2150
+ fn default ( ) -> Self {
2151
+ IterHashMut {
2152
+ inner : Default :: default ( ) ,
2153
+ marker : PhantomData ,
2154
+ }
2155
+ }
2090
2156
}
2091
2157
2092
2158
impl < ' a , T > Iterator for IterHashMut < ' a , T > {
@@ -2099,6 +2165,31 @@ impl<'a, T> Iterator for IterHashMut<'a, T> {
2099
2165
None => None ,
2100
2166
}
2101
2167
}
2168
+
2169
+ fn fold < B , F > ( self , init : B , mut f : F ) -> B
2170
+ where
2171
+ Self : Sized ,
2172
+ F : FnMut ( B , Self :: Item ) -> B ,
2173
+ {
2174
+ self . inner
2175
+ . fold ( init, |acc, bucket| unsafe { f ( acc, bucket. as_mut ( ) ) } )
2176
+ }
2177
+ }
2178
+
2179
+ impl < T > FusedIterator for IterHashMut < ' _ , T > { }
2180
+
2181
+ impl < T > fmt:: Debug for IterHashMut < ' _ , T >
2182
+ where
2183
+ T : fmt:: Debug ,
2184
+ {
2185
+ fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
2186
+ f. debug_list ( )
2187
+ . entries ( IterHash {
2188
+ inner : self . inner . clone ( ) ,
2189
+ marker : PhantomData ,
2190
+ } )
2191
+ . finish ( )
2192
+ }
2102
2193
}
2103
2194
2104
2195
/// An owning iterator over the entries of a `HashTable` in arbitrary order.
@@ -2126,6 +2217,7 @@ impl<T, A: Allocator> Default for IntoIter<T, A> {
2126
2217
}
2127
2218
}
2128
2219
}
2220
+
2129
2221
impl < T , A > Iterator for IntoIter < T , A >
2130
2222
where
2131
2223
A : Allocator ,
@@ -2160,6 +2252,21 @@ where
2160
2252
2161
2253
impl < T , A > FusedIterator for IntoIter < T , A > where A : Allocator { }
2162
2254
2255
+ impl < T , A > fmt:: Debug for IntoIter < T , A >
2256
+ where
2257
+ T : fmt:: Debug ,
2258
+ A : Allocator ,
2259
+ {
2260
+ fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
2261
+ f. debug_list ( )
2262
+ . entries ( Iter {
2263
+ inner : self . inner . iter ( ) ,
2264
+ marker : PhantomData ,
2265
+ } )
2266
+ . finish ( )
2267
+ }
2268
+ }
2269
+
2163
2270
/// A draining iterator over the items of a `HashTable`.
2164
2271
///
2165
2272
/// This `struct` is created by the [`drain`] method on [`HashTable`].
@@ -2171,36 +2278,42 @@ pub struct Drain<'a, T, A: Allocator = Global> {
2171
2278
inner : RawDrain < ' a , T , A > ,
2172
2279
}
2173
2280
2174
- impl < T , A : Allocator > Drain < ' _ , T , A > {
2175
- /// Returns a iterator of references over the remaining items.
2176
- fn iter ( & self ) -> Iter < ' _ , T > {
2177
- Iter {
2178
- inner : self . inner . iter ( ) ,
2179
- marker : PhantomData ,
2180
- }
2181
- }
2182
- }
2183
-
2184
2281
impl < T , A : Allocator > Iterator for Drain < ' _ , T , A > {
2185
2282
type Item = T ;
2186
2283
2187
2284
fn next ( & mut self ) -> Option < T > {
2188
2285
self . inner . next ( )
2189
2286
}
2287
+
2190
2288
fn size_hint ( & self ) -> ( usize , Option < usize > ) {
2191
2289
self . inner . size_hint ( )
2192
2290
}
2291
+
2292
+ fn fold < B , F > ( self , init : B , f : F ) -> B
2293
+ where
2294
+ Self : Sized ,
2295
+ F : FnMut ( B , Self :: Item ) -> B ,
2296
+ {
2297
+ self . inner . fold ( init, f)
2298
+ }
2193
2299
}
2300
+
2194
2301
impl < T , A : Allocator > ExactSizeIterator for Drain < ' _ , T , A > {
2195
2302
fn len ( & self ) -> usize {
2196
2303
self . inner . len ( )
2197
2304
}
2198
2305
}
2306
+
2199
2307
impl < T , A : Allocator > FusedIterator for Drain < ' _ , T , A > { }
2200
2308
2201
2309
impl < T : fmt:: Debug , A : Allocator > fmt:: Debug for Drain < ' _ , T , A > {
2202
2310
fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
2203
- f. debug_list ( ) . entries ( self . iter ( ) ) . finish ( )
2311
+ f. debug_list ( )
2312
+ . entries ( Iter {
2313
+ inner : self . inner . iter ( ) ,
2314
+ marker : PhantomData ,
2315
+ } )
2316
+ . finish ( )
2204
2317
}
2205
2318
}
2206
2319
0 commit comments