20template <
typename Config>
26 __host__ __device__
constexpr filter_ref() noexcept : blocks_{}, num_blocks_{} {}
42 [[nodiscard]] __host__ __device__ uint64_t
num_blocks() const noexcept {
52 [[nodiscard]] __host__ __device__
static uint64_t
58 [[nodiscard]] __device__ uint64_t
shard_index(uint64_t minimizer_hash)
const noexcept {
70 [[nodiscard]] __device__
static bool
75 const uint64_t smer_hash =
78 [&]<uint64_t HashIndex>(std::integral_constant<uint64_t, HashIndex>) {
80 const uint64_t bit_pos =
81 block_type::template sectorizedBitAddress<HashIndex>(smer_hash);
82 present &= ((shard_words[s] >> bit_pos) & 1) != 0;
112 uint64_t num_blocks_{};
Non-owning device reference to sectorized filter storage.
__host__ static __device__ uint64_t shard_index(uint64_t minimizer_hash, uint64_t num_blocks) noexcept
Maps a minimizer hash to a shard index via low bits.
filter_block< Config > block_type
static __device__ bool sectorized_contains_packed_kmer(uint64_t packed_kmer, const uint64_t *shard_words)
Tests sectorized membership for a packed k-mer against shard words.
__host__ __device__ uint64_t num_blocks() const noexcept
Number of power-of-two shards in this filter.
__device__ uint64_t shard_index(uint64_t minimizer_hash) const noexcept
Shard index for minimizer_hash within this filter.
__host__ __device__ constexpr filter_ref(block_type *blocks, uint64_t num_blocks) noexcept
Constructs a reference over blocks spanning num_blocks shards.
__host__ __device__ block_type * blocks() const noexcept
Raw pointer to the first 256-bit filter block (shard array base).
__device__ void apply_word_masks(block_type &block, uint64_t m0, uint64_t m1, uint64_t m2, uint64_t m3) const
Atomically ORs non-zero per-word Bloom masks into block.
__host__ __device__ constexpr filter_ref() noexcept
Default-constructed empty reference (no shard storage).
__device__ __forceinline__ void atomicOrWord(uint64_t *ptr, uint64_t value)
64-bit atomic OR used for sectorized Bloom inserts.
consteval bool separatorPositionAlwaysEncodesInvalid(char *input, uint64_t separatorPosition, uint64_t index)
Recursively tests whether placing the separator byte at any position in an input of valid bytes alway...
static constexpr uint64_t blockWordCount
64-bit words per 256-bit shard.
static constexpr uint64_t findereSpan
S-mers hashed per k-mer (findere).
One 256-bit filter block stored as an array of Config::blockWordCount words.
uint64_t words[wordCount]
Sector words, hash i maps to word i % blockWordCount.