| 982 | } |
| 983 | |
| 984 | void rehash_internal(fl::size new_cap) { |
| 985 | new_cap = next_power_of_two(new_cap); |
| 986 | fl::vector_inlined<Entry, INLINED_COUNT> old(_buckets.get_resource()); |
| 987 | fl::bitset<1024> old_occupied = _occupied; |
| 988 | |
| 989 | _buckets.swap(old); |
| 990 | _buckets.clear(); |
| 991 | _buckets.assign(new_cap, Entry{}); |
| 992 | |
| 993 | _occupied.reset(); |
| 994 | _occupied.resize(new_cap); |
| 995 | _deleted.reset(); |
| 996 | _deleted.resize(new_cap); |
| 997 | |
| 998 | _size = _tombstones = 0; |
| 999 | |
| 1000 | for (fl::size i = 0; i < old.size(); i++) { |
| 1001 | if (old_occupied.test(i)) |
| 1002 | insert(fl::move(old[i].key), fl::move(old[i].value)); |
| 1003 | } |
| 1004 | } |
| 1005 | |
| 1006 | // Rehash the inline buckets without resizing |
| 1007 | FL_DISABLE_WARNING_PUSH |
no test coverage detected