KOKKOS_INLINE_FUNCTION void operator()( size_type i ) const { const size_type invalid_index = map_type::invalid_index; size_type curr = m_map.m_hash_lists(i); size_type next = invalid_index; // remove erased head of the linked-list while (curr != invalid_index && !m_map.valid_at(curr)) { next = m_map.m_next_index[curr]; m_map.m_next_index[curr] = invalid_index; m_map.m_keys[curr] = key_type(); if (m_map.is_set) m_map.m_values[curr] = value_type(); curr = next; m_map.m_hash_lists(i) = next; } // if the list is non-empty and the head is valid if (curr != invalid_index && m_map.valid_at(curr) ) { size_type prev = curr; curr = m_map.m_next_index[prev]; while (curr != invalid_index) { next = m_map.m_next_index[curr]; if (m_map.valid_at(curr)) { prev = curr; } else { // remove curr from list m_map.m_next_index[prev] = next; m_map.m_next_index[curr] = invalid_index; m_map.m_keys[curr] = key_type(); if (map_type::is_set) m_map.m_values[curr] = value_type(); } curr = next; } } }