diff --git a/include/boost/unordered/detail/implementation.hpp b/include/boost/unordered/detail/implementation.hpp index d3612c21..9e7e01e8 100644 --- a/include/boost/unordered/detail/implementation.hpp +++ b/include/boost/unordered/detail/implementation.hpp @@ -4071,12 +4071,6 @@ struct table_unique : boost::unordered::detail::table // if hash function throws, or inserting > 1 element, basic exception // safety strong otherwise - template void insert_range(InputIt i, InputIt j) - { - if (i != j) - return insert_range_impl(extractor::extract(*i), i, j); - } - template void insert_range_impl(const_key_type& k, InputIt i, InputIt j) { diff --git a/include/boost/unordered/unordered_map.hpp b/include/boost/unordered/unordered_map.hpp index 08135a57..3aa0d12a 100644 --- a/include/boost/unordered/unordered_map.hpp +++ b/include/boost/unordered/unordered_map.hpp @@ -1369,7 +1369,7 @@ unordered_map::unordered_map(InputIt f, InputIt l, size_type n, const hasher& hf, const key_equal& eql, const allocator_type& a) : table_(boost::unordered::detail::initial_size(f, l, n), hf, eql, a) { - table_.insert_range(f, l); + this->insert(f, l); } template @@ -1409,7 +1409,7 @@ unordered_map::unordered_map( boost::unordered::detail::initial_size(list.begin(), list.end(), n), hf, eql, a) { - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); } #endif @@ -1435,7 +1435,7 @@ unordered_map::unordered_map( : table_(boost::unordered::detail::initial_size(f, l, n), hasher(), key_equal(), a) { - table_.insert_range(f, l); + this->insert(f, l); } template @@ -1445,7 +1445,7 @@ unordered_map::unordered_map(InputIt f, InputIt l, size_type n, : table_( boost::unordered::detail::initial_size(f, l, n), hf, key_equal(), a) { - table_.insert_range(f, l); + this->insert(f, l); } #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) @@ -1458,7 +1458,7 @@ unordered_map::unordered_map( boost::unordered::detail::initial_size(list.begin(), list.end(), n), hasher(), key_equal(), a) { - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); } template @@ -1469,7 +1469,7 @@ unordered_map::unordered_map( boost::unordered::detail::initial_size(list.begin(), list.end(), n), hf, key_equal(), a) { - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); } #endif @@ -1486,7 +1486,7 @@ unordered_map& unordered_map::operator=( std::initializer_list list) { this->clear(); - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); return *this; } @@ -1512,7 +1512,10 @@ template template void unordered_map::insert(InputIt first, InputIt last) { - table_.insert_range(first, last); + if (first != last) { + table_.insert_range_impl( + table::extractor::extract(*first), first, last); + } } #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) @@ -1520,7 +1523,7 @@ template void unordered_map::insert( std::initializer_list list) { - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); } #endif @@ -1811,7 +1814,7 @@ unordered_multimap::unordered_multimap(InputIt f, InputIt l, const allocator_type& a) : table_(boost::unordered::detail::initial_size(f, l, n), hf, eql, a) { - table_.insert_range(f, l); + this->insert(f, l); } template @@ -1852,7 +1855,7 @@ unordered_multimap::unordered_multimap( boost::unordered::detail::initial_size(list.begin(), list.end(), n), hf, eql, a) { - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); } #endif @@ -1878,7 +1881,7 @@ unordered_multimap::unordered_multimap( : table_(boost::unordered::detail::initial_size(f, l, n), hasher(), key_equal(), a) { - table_.insert_range(f, l); + this->insert(f, l); } template @@ -1888,7 +1891,7 @@ unordered_multimap::unordered_multimap(InputIt f, InputIt l, : table_( boost::unordered::detail::initial_size(f, l, n), hf, key_equal(), a) { - table_.insert_range(f, l); + this->insert(f, l); } #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) @@ -1901,7 +1904,7 @@ unordered_multimap::unordered_multimap( boost::unordered::detail::initial_size(list.begin(), list.end(), n), hasher(), key_equal(), a) { - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); } template @@ -1912,7 +1915,7 @@ unordered_multimap::unordered_multimap( boost::unordered::detail::initial_size(list.begin(), list.end(), n), hf, key_equal(), a) { - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); } #endif @@ -1929,7 +1932,7 @@ unordered_multimap& unordered_multimap::operator=( std::initializer_list list) { this->clear(); - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); return *this; } @@ -1963,7 +1966,7 @@ template void unordered_multimap::insert( std::initializer_list list) { - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); } #endif diff --git a/include/boost/unordered/unordered_set.hpp b/include/boost/unordered/unordered_set.hpp index 705c9b87..4cb8eaa9 100644 --- a/include/boost/unordered/unordered_set.hpp +++ b/include/boost/unordered/unordered_set.hpp @@ -1068,7 +1068,7 @@ unordered_set::unordered_set(InputIt f, InputIt l, size_type n, const hasher& hf, const key_equal& eql, const allocator_type& a) : table_(boost::unordered::detail::initial_size(f, l, n), hf, eql, a) { - table_.insert_range(f, l); + this->insert(f, l); } template @@ -1108,7 +1108,7 @@ unordered_set::unordered_set(std::initializer_list list, boost::unordered::detail::initial_size(list.begin(), list.end(), n), hf, eql, a) { - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); } #endif @@ -1133,7 +1133,7 @@ unordered_set::unordered_set( : table_(boost::unordered::detail::initial_size(f, l, n), hasher(), key_equal(), a) { - table_.insert_range(f, l); + this->insert(f, l); } template @@ -1143,7 +1143,7 @@ unordered_set::unordered_set(InputIt f, InputIt l, size_type n, : table_( boost::unordered::detail::initial_size(f, l, n), hf, key_equal(), a) { - table_.insert_range(f, l); + this->insert(f, l); } #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) @@ -1155,7 +1155,7 @@ unordered_set::unordered_set(std::initializer_list list, boost::unordered::detail::initial_size(list.begin(), list.end(), n), hasher(), key_equal(), a) { - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); } template @@ -1165,7 +1165,7 @@ unordered_set::unordered_set(std::initializer_list list, boost::unordered::detail::initial_size(list.begin(), list.end(), n), hf, key_equal(), a) { - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); } #endif @@ -1182,7 +1182,7 @@ unordered_set& unordered_set::operator=( std::initializer_list list) { this->clear(); - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); return *this; } @@ -1208,14 +1208,17 @@ template template void unordered_set::insert(InputIt first, InputIt last) { - table_.insert_range(first, last); + if (first != last) { + table_.insert_range_impl( + table::extractor::extract(*first), first, last); + } } #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) template void unordered_set::insert(std::initializer_list list) { - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); } #endif @@ -1445,7 +1448,7 @@ unordered_multiset::unordered_multiset(InputIt f, InputIt l, const allocator_type& a) : table_(boost::unordered::detail::initial_size(f, l, n), hf, eql, a) { - table_.insert_range(f, l); + this->insert(f, l); } template @@ -1486,7 +1489,7 @@ unordered_multiset::unordered_multiset( boost::unordered::detail::initial_size(list.begin(), list.end(), n), hf, eql, a) { - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); } #endif @@ -1512,7 +1515,7 @@ unordered_multiset::unordered_multiset( : table_(boost::unordered::detail::initial_size(f, l, n), hasher(), key_equal(), a) { - table_.insert_range(f, l); + this->insert(f, l); } template @@ -1522,7 +1525,7 @@ unordered_multiset::unordered_multiset(InputIt f, InputIt l, : table_( boost::unordered::detail::initial_size(f, l, n), hf, key_equal(), a) { - table_.insert_range(f, l); + this->insert(f, l); } #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) @@ -1535,7 +1538,7 @@ unordered_multiset::unordered_multiset( boost::unordered::detail::initial_size(list.begin(), list.end(), n), hasher(), key_equal(), a) { - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); } template @@ -1546,7 +1549,7 @@ unordered_multiset::unordered_multiset( boost::unordered::detail::initial_size(list.begin(), list.end(), n), hf, key_equal(), a) { - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); } #endif @@ -1563,7 +1566,7 @@ unordered_multiset& unordered_multiset::operator=( std::initializer_list list) { this->clear(); - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); return *this; } @@ -1597,7 +1600,7 @@ template void unordered_multiset::insert( std::initializer_list list) { - table_.insert_range(list.begin(), list.end()); + this->insert(list.begin(), list.end()); } #endif