FastLED 3.9.15
Loading...
Searching...
No Matches

◆ find_unoccupied_index_using_bitset()

template<typename Key, typename T, typename Hash = Hash<Key>, typename KeyEqual = EqualTo<Key>, int INLINED_COUNT = FASTLED_HASHMAP_INLINED_COUNT>
size_t fl::HashMap< Key, T, Hash, KeyEqual, INLINED_COUNT >::find_unoccupied_index_using_bitset ( const Key & key,
const fl::bitset< 1024 > & occupied_set ) const
inlineprivate

Definition at line 428 of file hash_map.h.

429 {
430 const size_t cap = _buckets.size();
431 const size_t mask = cap - 1;
432 const size_t h = _hash(key) & mask;
433
435 // linear probing
436 for (size_t i = 0; i < cap; ++i) {
437 const size_t idx = (h + i) & mask;
438 bool occupied = occupied_set.test(idx);
439 if (occupied) {
440 continue;
441 }
442 return idx;
443 }
444 } else {
445 // quadratic probing up to 8 tries
446 size_t i = 0;
447 for (; i < kQuadraticProbingTries; ++i) {
448 const size_t idx = (h + i + i * i) & mask;
449 bool occupied = occupied_set.test(idx);
450 if (occupied) {
451 continue;
452 }
453 return idx;
454 }
455 // fallback to linear for the rest
456 for (; i < cap; ++i) {
457 const size_t idx = (h + i) & mask;
458 bool occupied = occupied_set.test(idx);
459 if (occupied) {
460 continue;
461 }
462 return idx;
463 }
464 }
465 return npos;
466 }
static constexpr size_t npos
Definition hash_map.h:291
@ kQuadraticProbingTries
Definition hash_map.h:388
@ kLinearProbingOnlySize
Definition hash_map.h:387
fl::vector_inlined< Entry, INLINED_COUNT > _buckets
Definition hash_map.h:576

Referenced by fl::HashMap< Key, T, Hash, KeyEqual >::rehash_inline_no_resize().

+ Here is the caller graph for this function: