summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/bloom_filter.hpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/common/bloom_filter.hpp b/src/common/bloom_filter.hpp
index 4b711526676..8587caa2d8d 100644
--- a/src/common/bloom_filter.hpp
+++ b/src/common/bloom_filter.hpp
@@ -317,7 +317,7 @@ public:
return (double)set / (double)(table_size_ << 3);
}
- inline double approx_unique_element_count() const {
+ virtual inline double approx_unique_element_count() const {
// this is not a very good estimate; a better solution should have
// some asymptotic behavior as density() approaches 1.0.
return (double)target_element_count_ * 2.0 * density();
@@ -637,6 +637,14 @@ public:
return true;
}
+ virtual inline double approx_unique_element_count() const {
+ // this is not a very good estimate; a better solution should have
+ // some asymptotic behavior as density() approaches 1.0.
+ //
+ // the compress() correction is also bad; it tends to under-estimate.
+ return (double)target_element_count_ * 2.0 * density() * (double)size_list.back() / (double)size_list.front();
+ }
+
private:
inline virtual void compute_indices(const bloom_type& hash, std::size_t& bit_index, std::size_t& bit) const