void rehash_()

in csrc/suffix_decoding/int32_map.h [364:387]


    void rehash_(uint32_t new_cap) {
        assert((new_cap & (new_cap - 1)) == 0 && new_cap >= MIN_CAPACITY);
        Slot* fresh = new Slot[new_cap];  // keys default to KEY_EMPTY

        if (slots_) {
            for (uint32_t i = 0; i < cap_; ++i) {
                auto& s = slots_[i];
                if (!is_filled_(s.key)) {
                    continue;
                }
                int32_t k = s.key;
                T* v  = value_ptr_(s);
                place_new_(fresh, new_cap, k, std::move(*v));
                v->~T();
                s.key = KEY_EMPTY;
            }
            delete[] slots_;
        }

        slots_ = fresh;
        cap_ = new_cap;
        tombstones_ = 0;  // cleaned
        // size_ unchanged
    }