diff --git a/Cargo.toml b/Cargo.toml index 2a604da..d9af28a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,6 +18,7 @@ rayon = { version=">=1.0", optional = true } crossbeam-utils = { version=">=0.7.2, <0.9", optional = true } wyhash = ">=0.3, <=0.5" log = "0.4.*" +deepsize = { version="0.2.0", optional = true } [dev-dependencies] quickcheck = "1.0.2" diff --git a/src/bitvector.rs b/src/bitvector.rs index b6e7b34..f802d21 100644 --- a/src/bitvector.rs +++ b/src/bitvector.rs @@ -30,6 +30,8 @@ use std::sync::atomic::{AtomicU64, Ordering}; #[cfg(feature = "serde")] use serde::{self, Deserialize, Serialize}; +#[cfg(feature = "deepsize")] +use deepsize::DeepSizeOf; #[cfg(feature = "parallel")] type Word = AtomicU64; @@ -384,6 +386,13 @@ impl BitVector { } } +#[cfg(feature = "deepsize")] +impl DeepSizeOf for BitVector { + fn deep_size_of_children(&self, context: &mut deepsize::Context) -> usize { + self.bits.deep_size_of_children(context) + self.vector.deep_size_of_children(context) + } +} + /// Iterator for BitVector pub struct BitVectorIter<'a> { iter: ::std::slice::Iter<'a, Word>, diff --git a/src/hashmap.rs b/src/hashmap.rs index 49df9f0..f5c9d1e 100644 --- a/src/hashmap.rs +++ b/src/hashmap.rs @@ -3,6 +3,9 @@ #[cfg(feature = "serde")] use serde::{self, Deserialize, Serialize}; +#[cfg(feature = "deepsize")] +use deepsize::DeepSizeOf; + use crate::Mphf; use std::borrow::Borrow; use std::fmt::Debug; @@ -131,6 +134,19 @@ where } } +#[cfg(feature = "deepsize")] +impl DeepSizeOf for BoomHashMap +where + K: Hash + Debug + PartialEq + DeepSizeOf, + D: Debug + DeepSizeOf, +{ + fn deep_size_of_children(&self, context: &mut deepsize::Context) -> usize { + self.mphf.deep_size_of_children(context) + + self.keys.deep_size_of_children(context) + + self.values.deep_size_of_children(context) + } +} + impl core::iter::FromIterator<(K, D)> for BoomHashMap where K: Hash + Debug + PartialEq, diff --git a/src/lib.rs b/src/lib.rs index 32ca5fc..3d3e404 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -51,6 +51,8 @@ use std::sync::{Arc, Mutex}; #[cfg(feature = "serde")] use serde::{self, Deserialize, Serialize}; +#[cfg(feature = "deepsize")] +use deepsize::DeepSizeOf; #[inline] fn fold(v: u64) -> u32 { @@ -408,6 +410,13 @@ impl Mphf { } } +#[cfg(feature = "deepsize")] +impl DeepSizeOf for Mphf { + fn deep_size_of_children(&self, context: &mut deepsize::Context) -> usize { + self.bitvecs.deep_size_of_children(context) + self.phantom.deep_size_of_children(context) + } +} + struct Context { size: u64, seed: u64,