[libc++][NFC] Refactor __do_rehash a bit (#151543)
This refactors `__hash_table::__do_rehash` to use early returns and renames some of the variables.
This commit is contained in:
parent
3e2fadf3be
commit
e20413c045
@ -1709,21 +1709,27 @@ void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__rehash(size_type __n) _LIBCPP_D
|
|||||||
|
|
||||||
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
||||||
template <bool _UniqueKeys>
|
template <bool _UniqueKeys>
|
||||||
void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__do_rehash(size_type __nbc) {
|
void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__do_rehash(size_type __bucket_count) {
|
||||||
__pointer_allocator& __npa = __bucket_list_.get_deleter().__alloc();
|
__pointer_allocator& __ptr_alloc = __bucket_list_.get_deleter().__alloc();
|
||||||
__bucket_list_.reset(__nbc > 0 ? __pointer_alloc_traits::allocate(__npa, __nbc) : nullptr);
|
__bucket_list_.reset(__bucket_count > 0 ? __pointer_alloc_traits::allocate(__ptr_alloc, __bucket_count) : nullptr);
|
||||||
__bucket_list_.get_deleter().size() = __nbc;
|
__bucket_list_.get_deleter().size() = __bucket_count;
|
||||||
if (__nbc > 0) {
|
|
||||||
for (size_type __i = 0; __i < __nbc; ++__i)
|
if (__bucket_count == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (size_type __i = 0; __i < __bucket_count; ++__i)
|
||||||
__bucket_list_[__i] = nullptr;
|
__bucket_list_[__i] = nullptr;
|
||||||
__next_pointer __pp = __first_node_.__ptr();
|
__next_pointer __pp = __first_node_.__ptr();
|
||||||
__next_pointer __cp = __pp->__next_;
|
__next_pointer __cp = __pp->__next_;
|
||||||
if (__cp != nullptr) {
|
|
||||||
size_type __chash = std::__constrain_hash(__cp->__hash(), __nbc);
|
if (!__cp)
|
||||||
|
return;
|
||||||
|
|
||||||
|
size_type __chash = std::__constrain_hash(__cp->__hash(), __bucket_count);
|
||||||
__bucket_list_[__chash] = __pp;
|
__bucket_list_[__chash] = __pp;
|
||||||
size_type __phash = __chash;
|
size_type __phash = __chash;
|
||||||
for (__pp = __cp, void(), __cp = __cp->__next_; __cp != nullptr; __cp = __pp->__next_) {
|
for (__pp = __cp, void(), __cp = __cp->__next_; __cp != nullptr; __cp = __pp->__next_) {
|
||||||
__chash = std::__constrain_hash(__cp->__hash(), __nbc);
|
__chash = std::__constrain_hash(__cp->__hash(), __bucket_count);
|
||||||
if (__chash == __phash)
|
if (__chash == __phash)
|
||||||
__pp = __cp;
|
__pp = __cp;
|
||||||
else {
|
else {
|
||||||
@ -1733,7 +1739,7 @@ void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__do_rehash(size_type __nbc) {
|
|||||||
__phash = __chash;
|
__phash = __chash;
|
||||||
} else {
|
} else {
|
||||||
__next_pointer __np = __cp;
|
__next_pointer __np = __cp;
|
||||||
if _LIBCPP_CONSTEXPR_SINCE_CXX17 (!_UniqueKeys) {
|
if _LIBCPP_CONSTEXPR (!_UniqueKeys) {
|
||||||
for (; __np->__next_ != nullptr &&
|
for (; __np->__next_ != nullptr &&
|
||||||
key_eq()(__cp->__upcast()->__get_value(), __np->__next_->__upcast()->__get_value());
|
key_eq()(__cp->__upcast()->__get_value(), __np->__next_->__upcast()->__get_value());
|
||||||
__np = __np->__next_)
|
__np = __np->__next_)
|
||||||
@ -1746,8 +1752,6 @@ void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__do_rehash(size_type __nbc) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
||||||
template <class _Key>
|
template <class _Key>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user