@@ -1709,41 +1709,45 @@ void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__rehash(size_type __n) _LIBCPP_D
1709
1709
1710
1710
template <class _Tp , class _Hash , class _Equal , class _Alloc >
1711
1711
template <bool _UniqueKeys>
1712
- void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__do_rehash (size_type __nbc) {
1713
- __pointer_allocator& __npa = __bucket_list_.get_deleter ().__alloc ();
1714
- __bucket_list_.reset (__nbc > 0 ? __pointer_alloc_traits::allocate (__npa, __nbc) : nullptr );
1715
- __bucket_list_.get_deleter ().size () = __nbc;
1716
- if (__nbc > 0 ) {
1717
- for (size_type __i = 0 ; __i < __nbc; ++__i)
1718
- __bucket_list_[__i] = nullptr ;
1719
- __next_pointer __pp = __first_node_.__ptr ();
1720
- __next_pointer __cp = __pp->__next_ ;
1721
- if (__cp != nullptr ) {
1722
- size_type __chash = std::__constrain_hash (__cp->__hash (), __nbc);
1723
- __bucket_list_[__chash] = __pp;
1724
- size_type __phash = __chash;
1725
- for (__pp = __cp, void (), __cp = __cp->__next_ ; __cp != nullptr ; __cp = __pp->__next_ ) {
1726
- __chash = std::__constrain_hash (__cp->__hash (), __nbc);
1727
- if (__chash == __phash)
1728
- __pp = __cp;
1729
- else {
1730
- if (__bucket_list_[__chash] == nullptr ) {
1731
- __bucket_list_[__chash] = __pp;
1732
- __pp = __cp;
1733
- __phash = __chash;
1734
- } else {
1735
- __next_pointer __np = __cp;
1736
- if _LIBCPP_CONSTEXPR_SINCE_CXX17 (!_UniqueKeys) {
1737
- for (; __np->__next_ != nullptr &&
1738
- key_eq ()(__cp->__upcast ()->__get_value (), __np->__next_ ->__upcast ()->__get_value ());
1739
- __np = __np->__next_ )
1740
- ;
1741
- }
1742
- __pp->__next_ = __np->__next_ ;
1743
- __np->__next_ = __bucket_list_[__chash]->__next_ ;
1744
- __bucket_list_[__chash]->__next_ = __cp;
1745
- }
1712
+ void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__do_rehash (size_type __bucket_count) {
1713
+ __pointer_allocator& __ptr_alloc = __bucket_list_.get_deleter ().__alloc ();
1714
+ __bucket_list_.reset (__bucket_count > 0 ? __pointer_alloc_traits::allocate (__ptr_alloc, __bucket_count) : nullptr );
1715
+ __bucket_list_.get_deleter ().size () = __bucket_count;
1716
+
1717
+ if (__bucket_count == 0 )
1718
+ return ;
1719
+
1720
+ for (size_type __i = 0 ; __i < __bucket_count; ++__i)
1721
+ __bucket_list_[__i] = nullptr ;
1722
+ __next_pointer __pp = __first_node_.__ptr ();
1723
+ __next_pointer __cp = __pp->__next_ ;
1724
+
1725
+ if (!__cp)
1726
+ return ;
1727
+
1728
+ size_type __chash = std::__constrain_hash (__cp->__hash (), __bucket_count);
1729
+ __bucket_list_[__chash] = __pp;
1730
+ size_type __phash = __chash;
1731
+ for (__pp = __cp, void (), __cp = __cp->__next_ ; __cp != nullptr ; __cp = __pp->__next_ ) {
1732
+ __chash = std::__constrain_hash (__cp->__hash (), __bucket_count);
1733
+ if (__chash == __phash)
1734
+ __pp = __cp;
1735
+ else {
1736
+ if (__bucket_list_[__chash] == nullptr ) {
1737
+ __bucket_list_[__chash] = __pp;
1738
+ __pp = __cp;
1739
+ __phash = __chash;
1740
+ } else {
1741
+ __next_pointer __np = __cp;
1742
+ if _LIBCPP_CONSTEXPR (!_UniqueKeys) {
1743
+ for (; __np->__next_ != nullptr &&
1744
+ key_eq ()(__cp->__upcast ()->__get_value (), __np->__next_ ->__upcast ()->__get_value ());
1745
+ __np = __np->__next_ )
1746
+ ;
1746
1747
}
1748
+ __pp->__next_ = __np->__next_ ;
1749
+ __np->__next_ = __bucket_list_[__chash]->__next_ ;
1750
+ __bucket_list_[__chash]->__next_ = __cp;
1747
1751
}
1748
1752
}
1749
1753
}
0 commit comments