5 #ifndef BITCOIN_CUCKOOCACHE_H 6 #define BITCOIN_CUCKOOCACHE_H 44 std::unique_ptr<std::atomic<uint8_t>[]>
mem;
64 size = (size + 7) / 8;
65 mem.reset(
new std::atomic<uint8_t>[size]);
94 mem[s >> 3].fetch_or(1 << (s & 7), std::memory_order_relaxed);
105 mem[s >> 3].fetch_and(~(1 << (s & 7)), std::memory_order_relaxed);
115 return (1 << (s & 7)) &
mem[s >> 3].load(std::memory_order_relaxed);
159 template <
typename Element,
typename Hash>
343 depth_limit = static_cast<uint8_t>(std::log2(static_cast<float>(std::max((
uint32_t)2, new_size))));
344 size = std::max<uint32_t>(2, new_size);
369 return setup(bytes/
sizeof(Element));
396 bool last_epoch =
true;
401 if (
table[loc] == e) {
411 table[loc] = std::move(e);
430 last_loc = locs[(1 + (std::find(locs.begin(), locs.end(), last_loc) - locs.begin())) & 7];
431 std::swap(
table[last_loc], e);
433 bool epoch = last_epoch;
467 inline bool contains(
const Element& e,
const bool erase)
const 471 if (
table[loc] == e) {
481 #endif // BITCOIN_CUCKOOCACHE_H void allow_erase(uint32_t n) const
Definition: cuckoocache.h:266
bit_packed_atomic_flags()=delete
void bit_set(uint32_t s)
Definition: cuckoocache.h:92
void please_keep(uint32_t n) const
Definition: cuckoocache.h:275
uint32_t setup_bytes(size_t bytes)
Definition: cuckoocache.h:367
unsigned char uint8_t
Definition: stdint.h:19
Definition: cuckoocache.h:42
void insert(Element e)
Definition: cuckoocache.h:392
uint32_t size
Definition: cuckoocache.h:167
std::array< uint32_t, 8 > compute_hashes(const Element &e) const
Definition: cuckoocache.h:243
cache()
Definition: cuckoocache.h:327
std::vector< bool > epoch_flags
Definition: cuckoocache.h:177
bit_packed_atomic_flags(uint32_t size)
Definition: cuckoocache.h:61
void epoch_check()
Definition: cuckoocache.h:289
unsigned int uint32_t
Definition: stdint.h:21
uint32_t epoch_heuristic_counter
Definition: cuckoocache.h:184
bit_packed_atomic_flags collection_flags
Definition: cuckoocache.h:171
unsigned long long uint64_t
Definition: stdint.h:22
Definition: cuckoocache.h:160
std::unique_ptr< std::atomic< uint8_t >[]> mem
Definition: cuckoocache.h:44
bool bit_is_set(uint32_t s) const
Definition: cuckoocache.h:113
void bit_unset(uint32_t s)
Definition: cuckoocache.h:103
uint256 Hash(const T1 pbegin, const T1 pend)
Definition: hash.h:71
Definition: cuckoocache.h:27
const Hash hash_function
Definition: cuckoocache.h:204
uint32_t setup(uint32_t new_size)
Definition: cuckoocache.h:340
uint8_t depth_limit
Definition: cuckoocache.h:198
uint32_t epoch_size
Definition: cuckoocache.h:194
bool contains(const Element &e, const bool erase) const
Definition: cuckoocache.h:467
constexpr uint32_t invalid() const
Definition: cuckoocache.h:257
void setup(uint32_t b)
Definition: cuckoocache.h:79
std::vector< Element > table
Definition: cuckoocache.h:164