added hashed_index::merge

This commit is contained in:
joaquintides 2021-08-05 19:14:52 +02:00
parent c2f282ffb6
commit 02fb784eb1
2 changed files with 38 additions and 1 deletions

View File

@ -50,6 +50,11 @@
#include <iterator>
#include <utility>
#if !defined(BOOST_NO_SFINAE)
#include <boost/type_traits/is_const.hpp>
#include <boost/utility/enable_if.hpp>
#endif
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
#include <initializer_list>
#endif
@ -515,6 +520,38 @@ public:
this->final_swap_(x.final());
}
template<typename Index>
#if !defined(BOOST_NO_SFINAE)
typename enable_if_c<
!is_const<Index>::value&&
is_same<typename Index::node_type,node_type>::value
>::type
#else
void
#endif
merge(Index& x)
{
BOOST_MULTI_INDEX_CHECK_EQUAL_ALLOCATORS(*this,x);
BOOST_MULTI_INDEX_HASHED_INDEX_CHECK_INVARIANT;
this->final_merge_(x);
}
template<typename Index>
#if !defined(BOOST_NO_SFINAE)
typename enable_if_c<
!is_const<Index>::value&&
is_same<typename Index::node_type,node_type>::value
>::type
#else
void
#endif
merge(BOOST_RV_REF(Index) x){merge(static_cast<Index&>(x));}
/* observers */
key_from_value key_extractor()const{return key;}

View File

@ -436,7 +436,7 @@ void test_merge()
c1.merge(c2);
BOOST_TEST(c1.size()==10&&c2.size()==0);
c1.merge(c1.get<2>());
c1.get<1>().merge(c1.get<2>());
BOOST_TEST(c1.size()==10&&c2.size()==0);
c2.merge(c1.get<4>());
BOOST_TEST(c1.size()==0&&c2.size()==10);