libBf 0.1

bloom_filter_stable.h

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
 All Classes Functions Variables