From a10329f8ffeb85c1481720fa207c3242399d235e Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Fri, 20 Oct 2017 15:00:17 -0700 Subject: [PATCH] Include map length in diagnostics --- components/hashglobe/src/diagnostic.rs | 5 +++-- components/hashglobe/src/hash_map.rs | 4 ++++ components/hashglobe/src/table.rs | 4 ++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/components/hashglobe/src/diagnostic.rs b/components/hashglobe/src/diagnostic.rs index e5cfebf5168..cee5e11d4b1 100644 --- a/components/hashglobe/src/diagnostic.rs +++ b/components/hashglobe/src/diagnostic.rs @@ -166,7 +166,7 @@ impl DiagnosticHashMap canary: usize, canary_addr: *const usize, position: usize, - count: usize, + count: usize ) { use ::std::ffi::CString; let key = b"HashMapJournal\0"; @@ -179,9 +179,10 @@ impl DiagnosticHashMap } panic!( - concat!("HashMap Corruption (sz={}, cap={}, pairsz={}, hash={:#x}, cnry={:#x}, ", + concat!("HashMap Corruption (sz={}, buffer_hash_sz={}, cap={}, pairsz={}, hash={:#x}, cnry={:#x}, ", "count={}, last_pos={}, base_addr={:?}, cnry_addr={:?}, jrnl_len={})"), self.map.len(), + self.map.diagnostic_count_hashes(), self.map.raw_capacity(), ::std::mem::size_of::<(K, (usize, V))>(), hash, diff --git a/components/hashglobe/src/hash_map.rs b/components/hashglobe/src/hash_map.rs index e588b5b208c..4c1d73fc0de 100644 --- a/components/hashglobe/src/hash_map.rs +++ b/components/hashglobe/src/hash_map.rs @@ -1257,6 +1257,10 @@ impl HashMap debug_assert!(elems_left == 0 || bucket.index() != start_index); } } + + pub fn diagnostic_count_hashes(&self) -> usize { + self.table.diagnostic_count_hashes() + } } impl PartialEq for HashMap diff --git a/components/hashglobe/src/table.rs b/components/hashglobe/src/table.rs index 65542de4be2..7f3f251f010 100644 --- a/components/hashglobe/src/table.rs +++ b/components/hashglobe/src/table.rs @@ -896,6 +896,10 @@ impl RawTable { } } + pub fn diagnostic_count_hashes(&self) -> usize { + (0..self.capacity()).filter(|&i| unsafe { *self.raw_bucket_at(i).hash() != EMPTY_BUCKET }).count() + } + pub fn iter(&self) -> Iter { Iter { iter: self.raw_buckets(),