Files
scylla/utils/bloom_filter.hh
Kefu Chai a1dcddd300 utils: do not include unused headers
these unused includes were identified by clangd. see
https://clangd.llvm.org/guides/include-cleaner#unused-include-warning
for more details on the "Unused include" warning.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>

Closes scylladb/scylladb#16833
2024-01-18 12:50:06 +02:00

94 lines
2.1 KiB
C++

/*
* Copyright (C) 2015-present ScyllaDB
*
* Modified by ScyllaDB
*
* This file contains code from a variety of .java files from the
* Cassandra project, adapted to our needs.
*/
/*
* SPDX-License-Identifier: (AGPL-3.0-or-later and Apache-2.0)
*/
#pragma once
#include "i_filter.hh"
#include "utils/large_bitset.hh"
namespace utils {
namespace filter {
class bloom_filter: public i_filter {
public:
using bitmap = large_bitset;
private:
bitmap _bitset;
int _hash_count;
filter_format _format;
static thread_local struct stats {
uint64_t memory_size = 0;
} _shard_stats;
stats& _stats = _shard_stats;
public:
int num_hashes() { return _hash_count; }
bitmap& bits() { return _bitset; }
bloom_filter(int hashes, bitmap&& bs, filter_format format) noexcept;
~bloom_filter() noexcept;
virtual void add(const bytes_view& key) override;
virtual bool is_present(const bytes_view& key) override;
virtual bool is_present(hashed_key key) override;
virtual void clear() override {
_bitset.clear();
}
virtual void close() override { }
virtual size_t memory_size() override {
return sizeof(_hash_count) + _bitset.memory_size();
}
static const stats& get_shard_stats() noexcept {
return _shard_stats;
}
};
struct murmur3_bloom_filter: public bloom_filter {
murmur3_bloom_filter(int hashes, bitmap&& bs, filter_format format)
: bloom_filter(hashes, std::move(bs), format)
{}
};
struct always_present_filter: public i_filter {
virtual bool is_present(const bytes_view& key) override {
return true;
}
virtual bool is_present(hashed_key key) override {
return true;
}
virtual void add(const bytes_view& key) override { }
virtual void clear() override { }
virtual void close() override { }
virtual size_t memory_size() override {
return 0;
}
};
filter_ptr create_filter(int hash, large_bitset&& bitset, filter_format format);
filter_ptr create_filter(int hash, int64_t num_elements, int buckets_per, filter_format format);
}
}