diff options
| author | bors <bors@rust-lang.org> | 2014-09-27 18:57:46 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-09-27 18:57:46 +0000 |
| commit | 9a68da7401d9bef645a8b6a4e0ce4cae12604df4 (patch) | |
| tree | 36b5a7f7527be732f2eabe813f4114ec162c8f5a /src/libstd | |
| parent | ef112fe185a49ad9c49722702a695d8bd6b9df47 (diff) | |
| parent | 0a10b9dc9c9d35379a8d35d060fd351ab9c567a8 (diff) | |
| download | rust-9a68da7401d9bef645a8b6a4e0ce4cae12604df4.tar.gz rust-9a68da7401d9bef645a8b6a4e0ce4cae12604df4.zip | |
auto merge of #17517 : pczarn/rust/hashmap-lifetimes, r=alexcrichton
Fixes #17500
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/collections/hashmap/table.rs | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/libstd/collections/hashmap/table.rs b/src/libstd/collections/hashmap/table.rs index 45ca633b41f..bad5ce3e475 100644 --- a/src/libstd/collections/hashmap/table.rs +++ b/src/libstd/collections/hashmap/table.rs @@ -663,7 +663,8 @@ impl<K, V> RawTable<K, V> { raw: self.first_bucket_raw(), hashes_end: unsafe { self.hashes.offset(self.capacity as int) - } + }, + marker: marker::ContravariantLifetime, } } @@ -682,8 +683,14 @@ impl<K, V> RawTable<K, V> { } pub fn into_iter(self) -> MoveEntries<K, V> { + let RawBuckets { raw, hashes_end, .. } = self.raw_buckets(); + // Replace the marker regardless of lifetime bounds on parameters. MoveEntries { - iter: self.raw_buckets(), + iter: RawBuckets { + raw: raw, + hashes_end: hashes_end, + marker: marker::ContravariantLifetime, + }, table: self, } } @@ -695,7 +702,8 @@ impl<K, V> RawTable<K, V> { RevMoveBuckets { raw: raw_bucket.offset(self.capacity as int), hashes_end: raw_bucket.hash, - elems_left: self.size + elems_left: self.size, + marker: marker::ContravariantLifetime, } } } @@ -704,7 +712,8 @@ impl<K, V> RawTable<K, V> { /// this interface is safe, it's not used outside this module. struct RawBuckets<'a, K, V> { raw: RawBucket<K, V>, - hashes_end: *mut u64 + hashes_end: *mut u64, + marker: marker::ContravariantLifetime<'a>, } impl<'a, K, V> Iterator<RawBucket<K, V>> for RawBuckets<'a, K, V> { @@ -730,7 +739,8 @@ impl<'a, K, V> Iterator<RawBucket<K, V>> for RawBuckets<'a, K, V> { struct RevMoveBuckets<'a, K, V> { raw: RawBucket<K, V>, hashes_end: *mut u64, - elems_left: uint + elems_left: uint, + marker: marker::ContravariantLifetime<'a>, } impl<'a, K, V> Iterator<(K, V)> for RevMoveBuckets<'a, K, V> { |
