libBf 0.1
|
00001 #ifndef BLOOM_FILTER_STABLE_H 00002 #define BLOOM_FILTER_STABLE_H 00003 00004 #include <random> 00005 #include "bloom_filter_basic.h" 00006 #include "detail/evict.h" 00007 00008 namespace bf { 00009 00011 template <typename Core = core<>, typename Generator = std::mt19937> 00012 class stable : public basic<Core> 00013 { 00014 typedef Generator generator_type; 00015 typedef basic<Core> base; 00016 00017 public: 00018 typedef typename base::core_type core_type; 00019 00024 stable(core_type&& core, const generator_type& generator, unsigned d) 00025 : base(std::forward<core_type>(core)) 00026 , generator_(generator) 00027 , d_(d) 00028 { 00029 assert(d > 0); 00030 } 00031 00035 template <typename T> 00036 void add(const T& x) 00037 { 00038 detail::evict::random(base::core_, generator_, d_); 00039 detail::basic::add(x, base::core_.store.max(), base::core_); 00040 } 00041 00042 // Spectral bloom filters do not support deletion of items. 00043 template <typename T> 00044 void remove(const T& x) = delete; 00045 00046 private: 00047 generator_type generator_; 00048 unsigned d_; 00049 }; 00050 00051 } // namespace bf 00052 00053 #endif