diff options
Diffstat (limited to 'boost/intrusive/treap_set.hpp')
-rw-r--r-- | boost/intrusive/treap_set.hpp | 398 |
1 files changed, 223 insertions, 175 deletions
diff --git a/boost/intrusive/treap_set.hpp b/boost/intrusive/treap_set.hpp index a88df58e44..188c80fdce 100644 --- a/boost/intrusive/treap_set.hpp +++ b/boost/intrusive/treap_set.hpp @@ -40,16 +40,16 @@ namespace intrusive { #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) template<class T, class ...Options> #else -template<class ValueTraits, class VoidOrKeyComp, class VoidOrPrioComp, class SizeType, bool ConstantTimeSize, typename HeaderHolder> +template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyComp, class VoidOrPrioComp, class SizeType, bool ConstantTimeSize, typename HeaderHolder> #endif class treap_set_impl #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED - : public treap_impl<ValueTraits, VoidOrKeyComp, VoidOrPrioComp, SizeType, ConstantTimeSize, HeaderHolder> + : public treap_impl<ValueTraits, VoidOrKeyOfValue, VoidOrKeyComp, VoidOrPrioComp, SizeType, ConstantTimeSize, HeaderHolder> #endif { /// @cond public: - typedef treap_impl<ValueTraits, VoidOrKeyComp, VoidOrPrioComp, SizeType, ConstantTimeSize, HeaderHolder> tree_type; + typedef treap_impl<ValueTraits, VoidOrKeyOfValue, VoidOrKeyComp, VoidOrPrioComp, SizeType, ConstantTimeSize, HeaderHolder> tree_type; BOOST_MOVABLE_BUT_NOT_COPYABLE(treap_set_impl) typedef tree_type implementation_defined; @@ -58,6 +58,8 @@ class treap_set_impl public: typedef typename implementation_defined::value_type value_type; typedef typename implementation_defined::value_traits value_traits; + typedef typename implementation_defined::key_type key_type; + typedef typename implementation_defined::key_of_value key_of_value; typedef typename implementation_defined::pointer pointer; typedef typename implementation_defined::const_pointer const_pointer; typedef typename implementation_defined::reference reference; @@ -65,8 +67,8 @@ class treap_set_impl typedef typename implementation_defined::difference_type difference_type; typedef typename implementation_defined::size_type size_type; typedef typename implementation_defined::value_compare value_compare; - typedef typename implementation_defined::priority_compare priority_compare; typedef typename implementation_defined::key_compare key_compare; + typedef typename implementation_defined::priority_compare priority_compare; typedef typename implementation_defined::iterator iterator; typedef typename implementation_defined::const_iterator const_iterator; typedef typename implementation_defined::reverse_iterator reverse_iterator; @@ -87,8 +89,8 @@ class treap_set_impl //! //! <b>Throws</b>: If value_traits::node_traits::node //! constructor throws (this does not happen with predefined Boost.Intrusive hooks) - //! or the copy constructor of the value_compare object throws. - explicit treap_set_impl( const value_compare &cmp = value_compare() + //! or the copy constructor of the key_compare object throws. + explicit treap_set_impl( const key_compare &cmp = key_compare() , const priority_compare &pcmp = priority_compare() , const value_traits &v_traits = value_traits()) : tree_type(cmp, pcmp, v_traits) @@ -105,10 +107,10 @@ class treap_set_impl //! //! <b>Throws</b>: If value_traits::node_traits::node //! constructor throws (this does not happen with predefined Boost.Intrusive hooks) - //! or the copy constructor/operator() of the value_compare object throws. + //! or the copy constructor/operator() of the key_compare object throws. template<class Iterator> treap_set_impl( Iterator b, Iterator e - , const value_compare &cmp = value_compare() + , const key_compare &cmp = key_compare() , const priority_compare &pcmp = priority_compare() , const value_traits &v_traits = value_traits()) : tree_type(true, b, e, cmp, pcmp, v_traits) @@ -192,10 +194,23 @@ class treap_set_impl //! @copydoc ::boost::intrusive::treap::swap void swap(treap_set_impl& other); - //! @copydoc ::boost::intrusive::treap::clone_from + //! @copydoc ::boost::intrusive::treap::clone_from(const treap&,Cloner,Disposer) template <class Cloner, class Disposer> void clone_from(const treap_set_impl &src, Cloner cloner, Disposer disposer); + #else + + using tree_type::clone_from; + + #endif + + //! @copydoc ::boost::intrusive::treap::clone_from(treap&&,Cloner,Disposer) + template <class Cloner, class Disposer> + void clone_from(BOOST_RV_REF(treap_set_impl) src, Cloner cloner, Disposer disposer) + { tree_type::clone_from(BOOST_MOVE_BASE(tree_type, src), cloner, disposer); } + + #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) + //! @copydoc ::boost::intrusive::treap::top() iterator top(); @@ -226,20 +241,20 @@ class treap_set_impl iterator insert(const_iterator hint, reference value) { return tree_type::insert_unique(hint, value); } - //! @copydoc ::boost::intrusive::treap::insert_unique_check(const KeyType&,KeyValueCompare,KeyValuePrioCompare,insert_commit_data&) - template<class KeyType, class KeyValueCompare, class KeyValuePrioCompare> + //! @copydoc ::boost::intrusive::treap::insert_unique_check(const KeyType&,KeyTypeKeyCompare,KeyValuePrioCompare,insert_commit_data&) + template<class KeyType, class KeyTypeKeyCompare, class KeyValuePrioCompare> std::pair<iterator, bool> insert_check - ( const KeyType &key, KeyValueCompare key_value_comp, KeyValuePrioCompare key_value_pcomp + ( const KeyType &key, KeyTypeKeyCompare comp, KeyValuePrioCompare key_value_pcomp , insert_commit_data &commit_data) - { return tree_type::insert_unique_check(key, key_value_comp, key_value_pcomp, commit_data); } + { return tree_type::insert_unique_check(key, comp, key_value_pcomp, commit_data); } - //! @copydoc ::boost::intrusive::treap::insert_unique_check(const_iterator,const KeyType&,KeyValueCompare,KeyValuePrioCompare,insert_commit_data&) - template<class KeyType, class KeyValueCompare, class KeyValuePrioCompare> + //! @copydoc ::boost::intrusive::treap::insert_unique_check(const_iterator,const KeyType&,KeyTypeKeyCompare,KeyValuePrioCompare,insert_commit_data&) + template<class KeyType, class KeyTypeKeyCompare, class KeyValuePrioCompare> std::pair<iterator, bool> insert_check ( const_iterator hint, const KeyType &key - , KeyValueCompare key_value_comp, KeyValuePrioCompare key_value_pcomp + , KeyTypeKeyCompare comp, KeyValuePrioCompare key_value_pcomp , insert_commit_data &commit_data) - { return tree_type::insert_unique_check(hint, key, key_value_comp, key_value_pcomp, commit_data); } + { return tree_type::insert_unique_check(hint, key, comp, key_value_pcomp, commit_data); } //! @copydoc ::boost::intrusive::treap::insert_unique(Iterator,Iterator) template<class Iterator> @@ -266,12 +281,12 @@ class treap_set_impl //! @copydoc ::boost::intrusive::treap::erase(const_iterator,const_iterator) iterator erase(const_iterator b, const_iterator e); - //! @copydoc ::boost::intrusive::treap::erase(const_reference) - size_type erase(const_reference value); + //! @copydoc ::boost::intrusive::treap::erase(const key_type &) + size_type erase(const key_type &key); - //! @copydoc ::boost::intrusive::treap::erase(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - size_type erase(const KeyType& key, KeyValueCompare comp); + //! @copydoc ::boost::intrusive::treap::erase(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + size_type erase(const KeyType& key, KeyTypeKeyCompare comp); //! @copydoc ::boost::intrusive::treap::erase_and_dispose(const_iterator,Disposer) template<class Disposer> @@ -281,13 +296,13 @@ class treap_set_impl template<class Disposer> iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer); - //! @copydoc ::boost::intrusive::treap::erase_and_dispose(const_reference, Disposer) + //! @copydoc ::boost::intrusive::treap::erase_and_dispose(const key_type &, Disposer) template<class Disposer> - size_type erase_and_dispose(const_reference value, Disposer disposer); + size_type erase_and_dispose(const key_type &key, Disposer disposer); - //! @copydoc ::boost::intrusive::treap::erase_and_dispose(const KeyType&,KeyValueCompare,Disposer) - template<class KeyType, class KeyValueCompare, class Disposer> - size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer); + //! @copydoc ::boost::intrusive::treap::erase_and_dispose(const KeyType&,KeyTypeKeyCompare,Disposer) + template<class KeyType, class KeyTypeKeyCompare, class Disposer> + size_type erase_and_dispose(const KeyType& key, KeyTypeKeyCompare comp, Disposer disposer); //! @copydoc ::boost::intrusive::treap::clear void clear(); @@ -298,100 +313,100 @@ class treap_set_impl #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED - //! @copydoc ::boost::intrusive::treap::count(const_reference)const - size_type count(const_reference value) const - { return static_cast<size_type>(this->tree_type::find(value) != this->tree_type::cend()); } + //! @copydoc ::boost::intrusive::treap::count(const key_type &)const + size_type count(const key_type &key) const + { return static_cast<size_type>(this->tree_type::find(key) != this->tree_type::cend()); } - //! @copydoc ::boost::intrusive::treap::count(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> - size_type count(const KeyType& key, KeyValueCompare comp) const + //! @copydoc ::boost::intrusive::treap::count(const KeyType&,KeyTypeKeyCompare)const + template<class KeyType, class KeyTypeKeyCompare> + size_type count(const KeyType& key, KeyTypeKeyCompare comp) const { return static_cast<size_type>(this->tree_type::find(key, comp) != this->tree_type::cend()); } #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED - //! @copydoc ::boost::intrusive::treap::lower_bound(const_reference) - iterator lower_bound(const_reference value); + //! @copydoc ::boost::intrusive::treap::lower_bound(const key_type &) + iterator lower_bound(const key_type &key); - //! @copydoc ::boost::intrusive::treap::lower_bound(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - iterator lower_bound(const KeyType& key, KeyValueCompare comp); + //! @copydoc ::boost::intrusive::treap::lower_bound(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + iterator lower_bound(const KeyType& key, KeyTypeKeyCompare comp); - //! @copydoc ::boost::intrusive::treap::lower_bound(const_reference)const - const_iterator lower_bound(const_reference value) const; + //! @copydoc ::boost::intrusive::treap::lower_bound(const key_type &)const + const_iterator lower_bound(const key_type &key) const; - //! @copydoc ::boost::intrusive::treap::lower_bound(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> - const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const; + //! @copydoc ::boost::intrusive::treap::lower_bound(const KeyType&,KeyTypeKeyCompare)const + template<class KeyType, class KeyTypeKeyCompare> + const_iterator lower_bound(const KeyType& key, KeyTypeKeyCompare comp) const; - //! @copydoc ::boost::intrusive::treap::upper_bound(const_reference) - iterator upper_bound(const_reference value); + //! @copydoc ::boost::intrusive::treap::upper_bound(const key_type &) + iterator upper_bound(const key_type &key); - //! @copydoc ::boost::intrusive::treap::upper_bound(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - iterator upper_bound(const KeyType& key, KeyValueCompare comp); + //! @copydoc ::boost::intrusive::treap::upper_bound(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + iterator upper_bound(const KeyType& key, KeyTypeKeyCompare comp); - //! @copydoc ::boost::intrusive::treap::upper_bound(const_reference)const - const_iterator upper_bound(const_reference value) const; + //! @copydoc ::boost::intrusive::treap::upper_bound(const key_type &)const + const_iterator upper_bound(const key_type &key) const; - //! @copydoc ::boost::intrusive::treap::upper_bound(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> - const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const; + //! @copydoc ::boost::intrusive::treap::upper_bound(const KeyType&,KeyTypeKeyCompare)const + template<class KeyType, class KeyTypeKeyCompare> + const_iterator upper_bound(const KeyType& key, KeyTypeKeyCompare comp) const; - //! @copydoc ::boost::intrusive::treap::find(const_reference) - iterator find(const_reference value); + //! @copydoc ::boost::intrusive::treap::find(const key_type &) + iterator find(const key_type &key); - //! @copydoc ::boost::intrusive::treap::find(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - iterator find(const KeyType& key, KeyValueCompare comp); + //! @copydoc ::boost::intrusive::treap::find(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + iterator find(const KeyType& key, KeyTypeKeyCompare comp); - //! @copydoc ::boost::intrusive::treap::find(const_reference)const - const_iterator find(const_reference value) const; + //! @copydoc ::boost::intrusive::treap::find(const key_type &)const + const_iterator find(const key_type &key) const; - //! @copydoc ::boost::intrusive::treap::find(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> - const_iterator find(const KeyType& key, KeyValueCompare comp) const; + //! @copydoc ::boost::intrusive::treap::find(const KeyType&,KeyTypeKeyCompare)const + template<class KeyType, class KeyTypeKeyCompare> + const_iterator find(const KeyType& key, KeyTypeKeyCompare comp) const; #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED - //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference) - std::pair<iterator,iterator> equal_range(const_reference value) - { return this->tree_type::lower_bound_range(value); } + //! @copydoc ::boost::intrusive::rbtree::equal_range(const key_type &) + std::pair<iterator,iterator> equal_range(const key_type &key) + { return this->tree_type::lower_bound_range(key); } - //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp) + //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + std::pair<iterator,iterator> equal_range(const KeyType& key, KeyTypeKeyCompare comp) { return this->tree_type::lower_bound_range(key, comp); } - //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference)const + //! @copydoc ::boost::intrusive::rbtree::equal_range(const key_type &)const std::pair<const_iterator, const_iterator> - equal_range(const_reference value) const - { return this->tree_type::lower_bound_range(value); } + equal_range(const key_type &key) const + { return this->tree_type::lower_bound_range(key); } - //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> + //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyTypeKeyCompare)const + template<class KeyType, class KeyTypeKeyCompare> std::pair<const_iterator, const_iterator> - equal_range(const KeyType& key, KeyValueCompare comp) const + equal_range(const KeyType& key, KeyTypeKeyCompare comp) const { return this->tree_type::lower_bound_range(key, comp); } #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED - //! @copydoc ::boost::intrusive::treap::bounded_range(const_reference,const_reference,bool,bool) + //! @copydoc ::boost::intrusive::treap::bounded_range(const key_type &,const key_type &,bool,bool) std::pair<iterator,iterator> bounded_range - (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed); + (const key_type &lower_key, const key_type &upper_key, bool left_closed, bool right_closed); - //! @copydoc ::boost::intrusive::treap::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool) - template<class KeyType, class KeyValueCompare> + //! @copydoc ::boost::intrusive::treap::bounded_range(const KeyType&,const KeyType&,KeyTypeKeyCompare,bool,bool) + template<class KeyType, class KeyTypeKeyCompare> std::pair<iterator,iterator> bounded_range - (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed); + (const KeyType& lower_key, const KeyType& upper_key, KeyTypeKeyCompare comp, bool left_closed, bool right_closed); - //! @copydoc ::boost::intrusive::treap::bounded_range(const_reference,const_reference,bool,bool)const + //! @copydoc ::boost::intrusive::treap::bounded_range(const key_type &,const key_type &,bool,bool)const std::pair<const_iterator, const_iterator> - bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const; + bounded_range(const key_type &lower_key, const key_type &upper_key, bool left_closed, bool right_closed) const; - //! @copydoc ::boost::intrusive::treap::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const - template<class KeyType, class KeyValueCompare> + //! @copydoc ::boost::intrusive::treap::bounded_range(const KeyType&,const KeyType&,KeyTypeKeyCompare,bool,bool)const + template<class KeyType, class KeyTypeKeyCompare> std::pair<const_iterator, const_iterator> bounded_range - (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const; + (const KeyType& lower_key, const KeyType& upper_key, KeyTypeKeyCompare comp, bool left_closed, bool right_closed) const; //! @copydoc ::boost::intrusive::treap::s_iterator_to(reference) static iterator s_iterator_to(reference value); @@ -428,14 +443,14 @@ template<class T, class ...Options> #else template<class T, class O1 = void, class O2 = void , class O3 = void, class O4 = void - , class O5 = void> + , class O5 = void, class O6 = void> #endif struct make_treap_set { typedef typename pack_options < treap_defaults, #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) - O1, O2, O3, O4, O5 + O1, O2, O3, O4, O5, O6 #else Options... #endif @@ -446,6 +461,7 @@ struct make_treap_set typedef treap_set_impl < value_traits + , typename packed_options::key_of_value , typename packed_options::compare , typename packed_options::priority , typename packed_options::size_type @@ -459,14 +475,14 @@ struct make_treap_set #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) -template<class T, class O1, class O2, class O3, class O4, class O5> +template<class T, class O1, class O2, class O3, class O4, class O5, class O6> #else template<class T, class ...Options> #endif class treap_set : public make_treap_set<T, #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) - O1, O2, O3, O4, O5 + O1, O2, O3, O4, O5, O6 #else Options... #endif @@ -475,7 +491,7 @@ class treap_set typedef typename make_treap_set <T, #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) - O1, O2, O3, O4, O5 + O1, O2, O3, O4, O5, O6 #else Options... #endif @@ -483,7 +499,7 @@ class treap_set BOOST_MOVABLE_BUT_NOT_COPYABLE(treap_set) public: - typedef typename Base::value_compare value_compare; + typedef typename Base::key_compare key_compare; typedef typename Base::priority_compare priority_compare; typedef typename Base::value_traits value_traits; typedef typename Base::iterator iterator; @@ -492,7 +508,7 @@ class treap_set //Assert if passed value traits are compatible with the type BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value)); - explicit treap_set( const value_compare &cmp = value_compare() + explicit treap_set( const key_compare &cmp = key_compare() , const priority_compare &pcmp = priority_compare() , const value_traits &v_traits = value_traits()) : Base(cmp, pcmp, v_traits) @@ -500,7 +516,7 @@ class treap_set template<class Iterator> treap_set( Iterator b, Iterator e - , const value_compare &cmp = value_compare() + , const key_compare &cmp = key_compare() , const priority_compare &pcmp = priority_compare() , const value_traits &v_traits = value_traits()) : Base(b, e, cmp, pcmp, v_traits) @@ -513,6 +529,14 @@ class treap_set treap_set& operator=(BOOST_RV_REF(treap_set) x) { return static_cast<treap_set &>(this->Base::operator=(BOOST_MOVE_BASE(Base, x))); } + template <class Cloner, class Disposer> + void clone_from(const treap_set &src, Cloner cloner, Disposer disposer) + { Base::clone_from(src, cloner, disposer); } + + template <class Cloner, class Disposer> + void clone_from(BOOST_RV_REF(treap_set) src, Cloner cloner, Disposer disposer) + { Base::clone_from(BOOST_MOVE_BASE(Base, src), cloner, disposer); } + static treap_set &container_from_end_iterator(iterator end_iterator) { return static_cast<treap_set &>(Base::container_from_end_iterator(end_iterator)); } @@ -542,15 +566,15 @@ class treap_set #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) template<class T, class ...Options> #else -template<class ValueTraits, class VoidOrKeyComp, class VoidOrPrioComp, class SizeType, bool ConstantTimeSize, typename HeaderHolder> +template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyComp, class VoidOrPrioComp, class SizeType, bool ConstantTimeSize, typename HeaderHolder> #endif class treap_multiset_impl #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED - : public treap_impl<ValueTraits, VoidOrKeyComp, VoidOrPrioComp, SizeType, ConstantTimeSize, HeaderHolder> + : public treap_impl<ValueTraits, VoidOrKeyOfValue, VoidOrKeyComp, VoidOrPrioComp, SizeType, ConstantTimeSize, HeaderHolder> #endif { /// @cond - typedef treap_impl<ValueTraits, VoidOrKeyComp, VoidOrPrioComp, SizeType, ConstantTimeSize, HeaderHolder> tree_type; + typedef treap_impl<ValueTraits, VoidOrKeyOfValue, VoidOrKeyComp, VoidOrPrioComp, SizeType, ConstantTimeSize, HeaderHolder> tree_type; BOOST_MOVABLE_BUT_NOT_COPYABLE(treap_multiset_impl) typedef tree_type implementation_defined; @@ -559,6 +583,8 @@ class treap_multiset_impl public: typedef typename implementation_defined::value_type value_type; typedef typename implementation_defined::value_traits value_traits; + typedef typename implementation_defined::key_type key_type; + typedef typename implementation_defined::key_of_value key_of_value; typedef typename implementation_defined::pointer pointer; typedef typename implementation_defined::const_pointer const_pointer; typedef typename implementation_defined::reference reference; @@ -566,8 +592,8 @@ class treap_multiset_impl typedef typename implementation_defined::difference_type difference_type; typedef typename implementation_defined::size_type size_type; typedef typename implementation_defined::value_compare value_compare; - typedef typename implementation_defined::priority_compare priority_compare; typedef typename implementation_defined::key_compare key_compare; + typedef typename implementation_defined::priority_compare priority_compare; typedef typename implementation_defined::iterator iterator; typedef typename implementation_defined::const_iterator const_iterator; typedef typename implementation_defined::reverse_iterator reverse_iterator; @@ -588,8 +614,8 @@ class treap_multiset_impl //! //! <b>Throws</b>: If value_traits::node_traits::node //! constructor throws (this does not happen with predefined Boost.Intrusive hooks) - //! or the copy constructor of the value_compare object throws. - explicit treap_multiset_impl( const value_compare &cmp = value_compare() + //! or the copy constructor of the key_compare object throws. + explicit treap_multiset_impl( const key_compare &cmp = key_compare() , const priority_compare &pcmp = priority_compare() , const value_traits &v_traits = value_traits()) : tree_type(cmp, pcmp, v_traits) @@ -606,10 +632,10 @@ class treap_multiset_impl //! //! <b>Throws</b>: If value_traits::node_traits::node //! constructor throws (this does not happen with predefined Boost.Intrusive hooks) - //! or the copy constructor/operator() of the value_compare object throws. + //! or the copy constructor/operator() of the key_compare object throws. template<class Iterator> treap_multiset_impl( Iterator b, Iterator e - , const value_compare &cmp = value_compare() + , const key_compare &cmp = key_compare() , const priority_compare &pcmp = priority_compare() , const value_traits &v_traits = value_traits()) : tree_type(false, b, e, cmp, pcmp, v_traits) @@ -693,10 +719,23 @@ class treap_multiset_impl //! @copydoc ::boost::intrusive::treap::swap void swap(treap_multiset_impl& other); - //! @copydoc ::boost::intrusive::treap::clone_from + //! @copydoc ::boost::intrusive::treap::clone_from(const treap&,Cloner,Disposer) template <class Cloner, class Disposer> void clone_from(const treap_multiset_impl &src, Cloner cloner, Disposer disposer); + #else + + using tree_type::clone_from; + + #endif + + //! @copydoc ::boost::intrusive::treap::clone_from(treap&&,Cloner,Disposer) + template <class Cloner, class Disposer> + void clone_from(BOOST_RV_REF(treap_multiset_impl) src, Cloner cloner, Disposer disposer) + { tree_type::clone_from(BOOST_MOVE_BASE(tree_type, src), cloner, disposer); } + + #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) + //! @copydoc ::boost::intrusive::treap::top() iterator top(); @@ -748,12 +787,12 @@ class treap_multiset_impl //! @copydoc ::boost::intrusive::treap::erase(const_iterator,const_iterator) iterator erase(const_iterator b, const_iterator e); - //! @copydoc ::boost::intrusive::treap::erase(const_reference) - size_type erase(const_reference value); + //! @copydoc ::boost::intrusive::treap::erase(const key_type &) + size_type erase(const key_type &key); - //! @copydoc ::boost::intrusive::treap::erase(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - size_type erase(const KeyType& key, KeyValueCompare comp); + //! @copydoc ::boost::intrusive::treap::erase(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + size_type erase(const KeyType& key, KeyTypeKeyCompare comp); //! @copydoc ::boost::intrusive::treap::erase_and_dispose(const_iterator,Disposer) template<class Disposer> @@ -763,13 +802,13 @@ class treap_multiset_impl template<class Disposer> iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer); - //! @copydoc ::boost::intrusive::treap::erase_and_dispose(const_reference, Disposer) + //! @copydoc ::boost::intrusive::treap::erase_and_dispose(const key_type &, Disposer) template<class Disposer> - size_type erase_and_dispose(const_reference value, Disposer disposer); + size_type erase_and_dispose(const key_type &key, Disposer disposer); - //! @copydoc ::boost::intrusive::treap::erase_and_dispose(const KeyType&,KeyValueCompare,Disposer) - template<class KeyType, class KeyValueCompare, class Disposer> - size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer); + //! @copydoc ::boost::intrusive::treap::erase_and_dispose(const KeyType&,KeyTypeKeyCompare,Disposer) + template<class KeyType, class KeyTypeKeyCompare, class Disposer> + size_type erase_and_dispose(const KeyType& key, KeyTypeKeyCompare comp, Disposer disposer); //! @copydoc ::boost::intrusive::treap::clear void clear(); @@ -778,88 +817,88 @@ class treap_multiset_impl template<class Disposer> void clear_and_dispose(Disposer disposer); - //! @copydoc ::boost::intrusive::treap::count(const_reference)const - size_type count(const_reference value) const; + //! @copydoc ::boost::intrusive::treap::count(const key_type &)const + size_type count(const key_type &key) const; - //! @copydoc ::boost::intrusive::treap::count(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> - size_type count(const KeyType& key, KeyValueCompare comp) const; + //! @copydoc ::boost::intrusive::treap::count(const KeyType&,KeyTypeKeyCompare)const + template<class KeyType, class KeyTypeKeyCompare> + size_type count(const KeyType& key, KeyTypeKeyCompare comp) const; - //! @copydoc ::boost::intrusive::treap::lower_bound(const_reference) - iterator lower_bound(const_reference value); + //! @copydoc ::boost::intrusive::treap::lower_bound(const key_type &) + iterator lower_bound(const key_type &key); - //! @copydoc ::boost::intrusive::treap::lower_bound(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - iterator lower_bound(const KeyType& key, KeyValueCompare comp); + //! @copydoc ::boost::intrusive::treap::lower_bound(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + iterator lower_bound(const KeyType& key, KeyTypeKeyCompare comp); - //! @copydoc ::boost::intrusive::treap::lower_bound(const_reference)const - const_iterator lower_bound(const_reference value) const; + //! @copydoc ::boost::intrusive::treap::lower_bound(const key_type &)const + const_iterator lower_bound(const key_type &key) const; - //! @copydoc ::boost::intrusive::treap::lower_bound(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> - const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const; + //! @copydoc ::boost::intrusive::treap::lower_bound(const KeyType&,KeyTypeKeyCompare)const + template<class KeyType, class KeyTypeKeyCompare> + const_iterator lower_bound(const KeyType& key, KeyTypeKeyCompare comp) const; - //! @copydoc ::boost::intrusive::treap::upper_bound(const_reference) - iterator upper_bound(const_reference value); + //! @copydoc ::boost::intrusive::treap::upper_bound(const key_type &) + iterator upper_bound(const key_type &key); - //! @copydoc ::boost::intrusive::treap::upper_bound(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - iterator upper_bound(const KeyType& key, KeyValueCompare comp); + //! @copydoc ::boost::intrusive::treap::upper_bound(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + iterator upper_bound(const KeyType& key, KeyTypeKeyCompare comp); - //! @copydoc ::boost::intrusive::treap::upper_bound(const_reference)const - const_iterator upper_bound(const_reference value) const; + //! @copydoc ::boost::intrusive::treap::upper_bound(const key_type &)const + const_iterator upper_bound(const key_type &key) const; - //! @copydoc ::boost::intrusive::treap::upper_bound(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> - const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const; + //! @copydoc ::boost::intrusive::treap::upper_bound(const KeyType&,KeyTypeKeyCompare)const + template<class KeyType, class KeyTypeKeyCompare> + const_iterator upper_bound(const KeyType& key, KeyTypeKeyCompare comp) const; - //! @copydoc ::boost::intrusive::treap::find(const_reference) - iterator find(const_reference value); + //! @copydoc ::boost::intrusive::treap::find(const key_type &) + iterator find(const key_type &key); - //! @copydoc ::boost::intrusive::treap::find(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - iterator find(const KeyType& key, KeyValueCompare comp); + //! @copydoc ::boost::intrusive::treap::find(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + iterator find(const KeyType& key, KeyTypeKeyCompare comp); - //! @copydoc ::boost::intrusive::treap::find(const_reference)const - const_iterator find(const_reference value) const; + //! @copydoc ::boost::intrusive::treap::find(const key_type &)const + const_iterator find(const key_type &key) const; - //! @copydoc ::boost::intrusive::treap::find(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> - const_iterator find(const KeyType& key, KeyValueCompare comp) const; + //! @copydoc ::boost::intrusive::treap::find(const KeyType&,KeyTypeKeyCompare)const + template<class KeyType, class KeyTypeKeyCompare> + const_iterator find(const KeyType& key, KeyTypeKeyCompare comp) const; - //! @copydoc ::boost::intrusive::treap::equal_range(const_reference) - std::pair<iterator,iterator> equal_range(const_reference value); + //! @copydoc ::boost::intrusive::treap::equal_range(const key_type &) + std::pair<iterator,iterator> equal_range(const key_type &key); - //! @copydoc ::boost::intrusive::treap::equal_range(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp); + //! @copydoc ::boost::intrusive::treap::equal_range(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + std::pair<iterator,iterator> equal_range(const KeyType& key, KeyTypeKeyCompare comp); - //! @copydoc ::boost::intrusive::treap::equal_range(const_reference)const + //! @copydoc ::boost::intrusive::treap::equal_range(const key_type &)const std::pair<const_iterator, const_iterator> - equal_range(const_reference value) const; + equal_range(const key_type &key) const; - //! @copydoc ::boost::intrusive::treap::equal_range(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> + //! @copydoc ::boost::intrusive::treap::equal_range(const KeyType&,KeyTypeKeyCompare)const + template<class KeyType, class KeyTypeKeyCompare> std::pair<const_iterator, const_iterator> - equal_range(const KeyType& key, KeyValueCompare comp) const; + equal_range(const KeyType& key, KeyTypeKeyCompare comp) const; - //! @copydoc ::boost::intrusive::treap::bounded_range(const_reference,const_reference,bool,bool) + //! @copydoc ::boost::intrusive::treap::bounded_range(const key_type &,const key_type &,bool,bool) std::pair<iterator,iterator> bounded_range - (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed); + (const key_type &lower_key, const key_type &upper_key, bool left_closed, bool right_closed); - //! @copydoc ::boost::intrusive::treap::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool) - template<class KeyType, class KeyValueCompare> + //! @copydoc ::boost::intrusive::treap::bounded_range(const KeyType&,const KeyType&,KeyTypeKeyCompare,bool,bool) + template<class KeyType, class KeyTypeKeyCompare> std::pair<iterator,iterator> bounded_range - (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed); + (const KeyType& lower_key, const KeyType& upper_key, KeyTypeKeyCompare comp, bool left_closed, bool right_closed); - //! @copydoc ::boost::intrusive::treap::bounded_range(const_reference,const_reference,bool,bool)const + //! @copydoc ::boost::intrusive::treap::bounded_range(const key_type &,const key_type &,bool,bool)const std::pair<const_iterator, const_iterator> - bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const; + bounded_range(const key_type &lower_key, const key_type &upper_key, bool left_closed, bool right_closed) const; - //! @copydoc ::boost::intrusive::treap::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const - template<class KeyType, class KeyValueCompare> + //! @copydoc ::boost::intrusive::treap::bounded_range(const KeyType&,const KeyType&,KeyTypeKeyCompare,bool,bool)const + template<class KeyType, class KeyTypeKeyCompare> std::pair<const_iterator, const_iterator> bounded_range - (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const; + (const KeyType& lower_key, const KeyType& upper_key, KeyTypeKeyCompare comp, bool left_closed, bool right_closed) const; //! @copydoc ::boost::intrusive::treap::s_iterator_to(reference) static iterator s_iterator_to(reference value); @@ -896,14 +935,14 @@ template<class T, class ...Options> #else template<class T, class O1 = void, class O2 = void , class O3 = void, class O4 = void - , class O5 = void> + , class O5 = void, class O6 = void> #endif struct make_treap_multiset { typedef typename pack_options < treap_defaults, #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) - O1, O2, O3, O4, O5 + O1, O2, O3, O4, O5, O6 #else Options... #endif @@ -914,6 +953,7 @@ struct make_treap_multiset typedef treap_multiset_impl < value_traits + , typename packed_options::key_of_value , typename packed_options::compare , typename packed_options::priority , typename packed_options::size_type @@ -927,14 +967,14 @@ struct make_treap_multiset #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) -template<class T, class O1, class O2, class O3, class O4, class O5> +template<class T, class O1, class O2, class O3, class O4, class O5, class O6> #else template<class T, class ...Options> #endif class treap_multiset : public make_treap_multiset<T, #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) - O1, O2, O3, O4, O5 + O1, O2, O3, O4, O5, O6 #else Options... #endif @@ -943,7 +983,7 @@ class treap_multiset typedef typename make_treap_multiset <T, #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) - O1, O2, O3, O4, O5 + O1, O2, O3, O4, O5, O6 #else Options... #endif @@ -951,7 +991,7 @@ class treap_multiset BOOST_MOVABLE_BUT_NOT_COPYABLE(treap_multiset) public: - typedef typename Base::value_compare value_compare; + typedef typename Base::key_compare key_compare; typedef typename Base::priority_compare priority_compare; typedef typename Base::value_traits value_traits; typedef typename Base::iterator iterator; @@ -960,7 +1000,7 @@ class treap_multiset //Assert if passed value traits are compatible with the type BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value)); - explicit treap_multiset( const value_compare &cmp = value_compare() + explicit treap_multiset( const key_compare &cmp = key_compare() , const priority_compare &pcmp = priority_compare() , const value_traits &v_traits = value_traits()) : Base(cmp, pcmp, v_traits) @@ -968,7 +1008,7 @@ class treap_multiset template<class Iterator> treap_multiset( Iterator b, Iterator e - , const value_compare &cmp = value_compare() + , const key_compare &cmp = key_compare() , const priority_compare &pcmp = priority_compare() , const value_traits &v_traits = value_traits()) : Base(b, e, cmp, pcmp, v_traits) @@ -981,6 +1021,14 @@ class treap_multiset treap_multiset& operator=(BOOST_RV_REF(treap_multiset) x) { return static_cast<treap_multiset &>(this->Base::operator=(BOOST_MOVE_BASE(Base, x))); } + template <class Cloner, class Disposer> + void clone_from(const treap_multiset &src, Cloner cloner, Disposer disposer) + { Base::clone_from(src, cloner, disposer); } + + template <class Cloner, class Disposer> + void clone_from(BOOST_RV_REF(treap_multiset) src, Cloner cloner, Disposer disposer) + { Base::clone_from(BOOST_MOVE_BASE(Base, src), cloner, disposer); } + static treap_multiset &container_from_end_iterator(iterator end_iterator) { return static_cast<treap_multiset &>(Base::container_from_end_iterator(end_iterator)); } |