13#if !defined(ULTRA_CACHE_H)
20#include <shared_mutex>
48template<Fitness F, std::
size_t LOCK_GROUP_SIZE = 128>
75 static constexpr
bitwidth max_cache_bitwidth {30};
78 [[nodiscard]] std::size_t index(
const hash_t &)
const noexcept;
79 [[nodiscard]] std::size_t lock_index(std::size_t)
const noexcept;
80 [[nodiscard]]
static std::size_t table_size(
bitwidth);
93 std::vector<slot> table_ {};
94 mutable std::vector<std::shared_mutex> locks_ {};
96 std::uint64_t k_mask {0};
97 decltype(slot::seal) seal_ {1};
100 static_assert(LOCK_GROUP_SIZE > 0,
"LOCK_GROUP_SIZE must be greater than 0");
std::optional< F > find(const hash_t &) const
Definition cache.h:158
bool is_valid() const
Definition cache.h:276
void clear() noexcept
Definition cache.h:120
void insert(const hash_t &, const F &)
Definition cache.h:181
bool load(std::istream &)
Definition cache.h:204
void resize(bitwidth)
Definition cache.h:76
bool save(std::ostream &) const
Definition cache.h:238
bitwidth bits() const
Definition cache.h:264
unsigned bitwidth
Type alias for the number of bits.
Definition cache.h:30