83template <data_layout data_layout_mode_ = data_layout::uncompressed>
88 template <data_layout data_layout_mode>
106 13043817825332782213ULL,
107 10650232656628343401ULL,
108 16499269484942379435ULL,
109 4893150838803335377ULL};
122 h *= 11400714819323198485ULL;
124#ifdef __SIZEOF_INT128__
125 h =
static_cast<uint64_t
>((
static_cast<__uint128_t
>(h) *
static_cast<__uint128_t
>(
size_in_bits)) >> 64);
165 throw std::logic_error{
"The number of hash functions must be > 0 and <= 5."};
189 data = sdsl::sd_vector<>{bf.data};
213 assert(idx <
data.size());
233 sdsl::util::_set_zero_bits(
data);
256 assert(idx <
data.size());
282 template <std::ranges::range value_range_t>
283 size_t count(value_range_t && values)
const noexcept
285 static_assert(std::ranges::input_range<value_range_t>,
"The values must model input_range.");
286 static_assert(std::unsigned_integral<std::ranges::range_value_t<value_range_t>>,
287 "An individual value must be an unsigned integral.");
291 for (
auto && value : values)
328 return std::tie(lhs.size_in_bits, lhs.hash_shift, lhs.hash_funs, lhs.data)
329 ==
std::tie(rhs.size_in_bits, rhs.hash_shift, rhs.hash_funs, rhs.data);
339 return !(lhs == rhs);
372 template <cereal_archive archive_t>
The Bloom Filter. A data structure that efficiently answers set-membership queries.
Definition: bloom_filter.hpp:85
size_t size_in_bits
The size of the underlying bit vector in bits.
Definition: bloom_filter.hpp:97
friend bool operator!=(bloom_filter const &lhs, bloom_filter const &rhs) noexcept
Test for inequality.
Definition: bloom_filter.hpp:337
constexpr data_type & raw_data() noexcept
Provides direct, unsafe access to the underlying data structure.
Definition: bloom_filter.hpp:353
size_t hash_shift
The number of bits to shift the hash value before doing multiplicative hashing.
Definition: bloom_filter.hpp:99
bloom_filter(bloom_filter &&)=default
Defaulted.
static constexpr data_layout data_layout_mode
Indicates whether the Bloom Filter is compressed.
Definition: bloom_filter.hpp:134
static constexpr std::array< size_t, 5 > hash_seeds
Precalculated seeds for multiplicative hashing. We use large irrational numbers for a uniform hashing...
Definition: bloom_filter.hpp:105
constexpr data_type const & raw_data() const noexcept
Provides direct, unsafe access to the underlying data structure.
Definition: bloom_filter.hpp:359
bloom_filter & operator=(bloom_filter const &)=default
Defaulted.
bool contains(size_t const value) const noexcept
Check whether a value is present in the Bloom Filter.
Definition: bloom_filter.hpp:251
bloom_filter(bloom_filter< data_layout::uncompressed > const &bf)
Construct a compressed Bloom Filter.
Definition: bloom_filter.hpp:184
constexpr size_t hash_and_fit(size_t h, size_t const seed) const
Perturbs a value and fits it into the vector.
Definition: bloom_filter.hpp:118
data_type data
The bitvector.
Definition: bloom_filter.hpp:103
friend bool operator==(bloom_filter const &lhs, bloom_filter const &rhs) noexcept
Test for equality.
Definition: bloom_filter.hpp:326
size_t hash_funs
The number of hash functions.
Definition: bloom_filter.hpp:101
void reset() noexcept
Remove all values from the Bloom Filter by setting all bits to 0.
Definition: bloom_filter.hpp:230
bloom_filter(bloom_filter const &)=default
Defaulted.
size_t hash_function_count() const noexcept
Returns the number of hash functions used in the Bloom Filter.
Definition: bloom_filter.hpp:304
size_t count(value_range_t &&values) const noexcept
Counts the occurrences for all values in a range.
Definition: bloom_filter.hpp:283
bloom_filter()=default
Defaulted.
size_t bit_size() const noexcept
Returns the size of the underlying bitvector.
Definition: bloom_filter.hpp:312
bloom_filter & operator=(bloom_filter &&)=default
Defaulted.
void emplace(size_t const value) noexcept
Inserts a value into the Bloom Filter.
Definition: bloom_filter.hpp:207
~bloom_filter()=default
Defaulted.
bloom_filter(seqan3::bin_size size, seqan3::hash_function_count funs=seqan3::hash_function_count{2u})
Construct an uncompressed Bloom Filter.
Definition: bloom_filter.hpp:158
data_layout
Determines if the Interleaved Bloom Filter is compressed.
Definition: interleaved_bloom_filter.hpp:28
@ uncompressed
The Interleaved Bloom Filter is uncompressed.
Definition: interleaved_bloom_filter.hpp:29
@ compressed
The Interleaved Bloom Filter is compressed.
Definition: interleaved_bloom_filter.hpp:30
Provides seqan3::interleaved_bloom_filter.
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
A strong type that represents the number of bits for each bin in the seqan3::interleaved_bloom_filter...
Definition: interleaved_bloom_filter.hpp:43
A strong type that represents the number of hash functions for the seqan3::interleaved_bloom_filter.
Definition: interleaved_bloom_filter.hpp:50
strong_type for seed.
Definition: minimiser_hash.hpp:25