Implement merge

This commit is contained in:
Daniel James
2017-02-27 03:59:02 +00:00
parent 21a24d6cd7
commit d89aadc56c
8 changed files with 522 additions and 0 deletions

View File

@@ -391,6 +391,17 @@ template <class T, class H, class P, class A> class unordered_set
void clear();
void swap(unordered_set&);
template <typename H2, typename P2>
void merge(boost::unordered_set<T, H2, P2, A>& source);
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename H2, typename P2>
void merge(boost::unordered_set<T, H2, P2, A>&& source);
#endif
// template <typename H2, typename P2>
// void merge(boost::unordered_multiset<T,H2,P2,A>& source);
// template <typename H2, typename P2>
// void merge(boost::unordered_multiset<T,H2,P2,A>&& source);
// observers
hasher hash_function() const;
@@ -817,6 +828,17 @@ template <class T, class H, class P, class A> class unordered_multiset
void clear();
void swap(unordered_multiset&);
template <typename H2, typename P2>
void merge(boost::unordered_multiset<T, H2, P2, A>& source);
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename H2, typename P2>
void merge(boost::unordered_multiset<T, H2, P2, A>&& source);
#endif
// template <typename H2, typename P2>
// void merge(boost::unordered_set<T,H2,P2,A>& source);
// template <typename H2, typename P2>
// void merge(boost::unordered_set<T,H2,P2,A>&& source);
// observers
hasher hash_function() const;
@@ -1123,6 +1145,24 @@ unordered_set<T, H, P, A>::key_eq() const
return table_.key_eq();
}
template <class T, class H, class P, class A>
template <typename H2, typename P2>
void unordered_set<T, H, P, A>::merge(
boost::unordered_set<T, H2, P2, A>& source)
{
table_.merge_impl(source.table_);
}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <class T, class H, class P, class A>
template <typename H2, typename P2>
void unordered_set<T, H, P, A>::merge(
boost::unordered_set<T, H2, P2, A>&& source)
{
table_.merge_impl(source.table_);
}
#endif
// lookup
template <class T, class H, class P, class A>
@@ -1460,6 +1500,28 @@ unordered_multiset<T, H, P, A>::key_eq() const
return table_.key_eq();
}
template <class T, class H, class P, class A>
template <typename H2, typename P2>
void unordered_multiset<T, H, P, A>::merge(
boost::unordered_multiset<T, H2, P2, A>& source)
{
while (!source.empty()) {
insert(source.extract(source.begin()));
}
}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <class T, class H, class P, class A>
template <typename H2, typename P2>
void unordered_multiset<T, H, P, A>::merge(
boost::unordered_multiset<T, H2, P2, A>&& source)
{
while (!source.empty()) {
insert(source.extract(source.begin()));
}
}
#endif
// lookup
template <class T, class H, class P, class A>