diff options
Diffstat (limited to 'boost/intrusive/avl_set.hpp')
-rw-r--r-- | boost/intrusive/avl_set.hpp | 390 |
1 files changed, 215 insertions, 175 deletions
diff --git a/boost/intrusive/avl_set.hpp b/boost/intrusive/avl_set.hpp index d06d441a19..c3d8d999ac 100644 --- a/boost/intrusive/avl_set.hpp +++ b/boost/intrusive/avl_set.hpp @@ -40,15 +40,15 @@ namespace intrusive { #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) template<class T, class ...Options> #else -template<class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize, typename HeaderHolder> +template<class ValueTraits, class VoidOrKeyOfValue, class Compare, class SizeType, bool ConstantTimeSize, typename HeaderHolder> #endif class avl_set_impl #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED - : public bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, AvlTreeAlgorithms, HeaderHolder> + : public bstree_impl<ValueTraits, VoidOrKeyOfValue, Compare, SizeType, ConstantTimeSize, AvlTreeAlgorithms, HeaderHolder> #endif { /// @cond - typedef bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, AvlTreeAlgorithms, HeaderHolder> tree_type; + typedef bstree_impl<ValueTraits, VoidOrKeyOfValue, Compare, SizeType, ConstantTimeSize, AvlTreeAlgorithms, HeaderHolder> tree_type; BOOST_MOVABLE_BUT_NOT_COPYABLE(avl_set_impl) typedef tree_type implementation_defined; @@ -56,6 +56,8 @@ class avl_set_impl public: typedef typename implementation_defined::value_type value_type; + typedef typename implementation_defined::key_type key_type; + typedef typename implementation_defined::key_of_value key_of_value; typedef typename implementation_defined::value_traits value_traits; typedef typename implementation_defined::pointer pointer; typedef typename implementation_defined::const_pointer const_pointer; @@ -80,16 +82,16 @@ class avl_set_impl public: - //! @copydoc ::boost::intrusive::avltree::avltree(const value_compare &,const value_traits &) - explicit avl_set_impl( const value_compare &cmp = value_compare() + //! @copydoc ::boost::intrusive::avltree::avltree(const key_compare &,const value_traits &) + explicit avl_set_impl( const key_compare &cmp = key_compare() , const value_traits &v_traits = value_traits()) : tree_type(cmp, v_traits) {} - //! @copydoc ::boost::intrusive::avltree::avltree(bool,Iterator,Iterator,const value_compare &,const value_traits &) + //! @copydoc ::boost::intrusive::avltree::avltree(bool,Iterator,Iterator,const key_compare &,const value_traits &) template<class Iterator> avl_set_impl( Iterator b, Iterator e - , const value_compare &cmp = value_compare() + , const key_compare &cmp = key_compare() , const value_traits &v_traits = value_traits()) : tree_type(true, b, e, cmp, v_traits) {} @@ -171,11 +173,20 @@ class avl_set_impl //! @copydoc ::boost::intrusive::avltree::swap void swap(avl_set_impl& other); - //! @copydoc ::boost::intrusive::avltree::clone_from + //! @copydoc ::boost::intrusive::avltree::clone_from(const avltree&,Cloner,Disposer) template <class Cloner, class Disposer> void clone_from(const avl_set_impl &src, Cloner cloner, Disposer disposer); - #endif //#ifdef BOOST_iNTRUSIVE_DOXYGEN_INVOKED + #else + + using tree_type::clone_from; + + #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED + + //! @copydoc ::boost::intrusive::avltree::clone_from(avltree&&,Cloner,Disposer) + template <class Cloner, class Disposer> + void clone_from(BOOST_RV_REF(avl_set_impl) src, Cloner cloner, Disposer disposer) + { tree_type::clone_from(BOOST_MOVE_BASE(tree_type, src), cloner, disposer); } //! @copydoc ::boost::intrusive::avltree::insert_unique(reference) std::pair<iterator, bool> insert(reference value) @@ -185,18 +196,18 @@ class avl_set_impl iterator insert(const_iterator hint, reference value) { return tree_type::insert_unique(hint, value); } - //! @copydoc ::boost::intrusive::avltree::insert_unique_check(const KeyType&,KeyValueCompare,insert_commit_data&) - template<class KeyType, class KeyValueCompare> + //! @copydoc ::boost::intrusive::avltree::insert_unique_check(const KeyType&,KeyTypeKeyCompare,insert_commit_data&) + template<class KeyType, class KeyTypeKeyCompare> std::pair<iterator, bool> insert_check - (const KeyType &key, KeyValueCompare key_value_comp, insert_commit_data &commit_data) - { return tree_type::insert_unique_check(key, key_value_comp, commit_data); } + (const KeyType &key, KeyTypeKeyCompare comp, insert_commit_data &commit_data) + { return tree_type::insert_unique_check(key, comp, commit_data); } - //! @copydoc ::boost::intrusive::avltree::insert_unique_check(const_iterator,const KeyType&,KeyValueCompare,insert_commit_data&) - template<class KeyType, class KeyValueCompare> + //! @copydoc ::boost::intrusive::avltree::insert_unique_check(const_iterator,const KeyType&,KeyTypeKeyCompare,insert_commit_data&) + template<class KeyType, class KeyTypeKeyCompare> std::pair<iterator, bool> insert_check (const_iterator hint, const KeyType &key - ,KeyValueCompare key_value_comp, insert_commit_data &commit_data) - { return tree_type::insert_unique_check(hint, key, key_value_comp, commit_data); } + ,KeyTypeKeyCompare comp, insert_commit_data &commit_data) + { return tree_type::insert_unique_check(hint, key, comp, commit_data); } //! @copydoc ::boost::intrusive::avltree::insert_unique(Iterator,Iterator) template<class Iterator> @@ -223,12 +234,12 @@ class avl_set_impl //! @copydoc ::boost::intrusive::avltree::erase(const_iterator,const_iterator) iterator erase(const_iterator b, const_iterator e); - //! @copydoc ::boost::intrusive::avltree::erase(const_reference) - size_type erase(const_reference value); + //! @copydoc ::boost::intrusive::avltree::erase(const key_type &key) + size_type erase(const key_type &key); - //! @copydoc ::boost::intrusive::avltree::erase(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - size_type erase(const KeyType& key, KeyValueCompare comp); + //! @copydoc ::boost::intrusive::avltree::erase(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + size_type erase(const KeyType& key, KeyTypeKeyCompare comp); //! @copydoc ::boost::intrusive::avltree::erase_and_dispose(const_iterator,Disposer) template<class Disposer> @@ -238,13 +249,13 @@ class avl_set_impl template<class Disposer> iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer); - //! @copydoc ::boost::intrusive::avltree::erase_and_dispose(const_reference, Disposer) + //! @copydoc ::boost::intrusive::avltree::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::avltree::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::avltree::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::avltree::clear void clear(); @@ -255,100 +266,100 @@ class avl_set_impl #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED - //! @copydoc ::boost::intrusive::avltree::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::avltree::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::avltree::count(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> - size_type count(const KeyType& key, KeyValueCompare comp) const + //! @copydoc ::boost::intrusive::avltree::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::avltree::lower_bound(const_reference) - iterator lower_bound(const_reference value); + //! @copydoc ::boost::intrusive::avltree::lower_bound(const key_type &) + iterator lower_bound(const key_type &key); - //! @copydoc ::boost::intrusive::avltree::lower_bound(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - iterator lower_bound(const KeyType& key, KeyValueCompare comp); + //! @copydoc ::boost::intrusive::avltree::lower_bound(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + iterator lower_bound(const KeyType& key, KeyTypeKeyCompare comp); - //! @copydoc ::boost::intrusive::avltree::lower_bound(const_reference)const - const_iterator lower_bound(const_reference value) const; + //! @copydoc ::boost::intrusive::avltree::lower_bound(const key_type &)const + const_iterator lower_bound(const key_type &key) const; - //! @copydoc ::boost::intrusive::avltree::lower_bound(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> - const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const; + //! @copydoc ::boost::intrusive::avltree::lower_bound(const KeyType&,KeyTypeKeyCompare)const + template<class KeyType, class KeyTypeKeyCompare> + const_iterator lower_bound(const KeyType& key, KeyTypeKeyCompare comp) const; - //! @copydoc ::boost::intrusive::avltree::upper_bound(const_reference) - iterator upper_bound(const_reference value); + //! @copydoc ::boost::intrusive::avltree::upper_bound(const key_type &) + iterator upper_bound(const key_type &key); - //! @copydoc ::boost::intrusive::avltree::upper_bound(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - iterator upper_bound(const KeyType& key, KeyValueCompare comp); + //! @copydoc ::boost::intrusive::avltree::upper_bound(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + iterator upper_bound(const KeyType& key, KeyTypeKeyCompare comp); - //! @copydoc ::boost::intrusive::avltree::upper_bound(const_reference)const - const_iterator upper_bound(const_reference value) const; + //! @copydoc ::boost::intrusive::avltree::upper_bound(const key_type &)const + const_iterator upper_bound(const key_type &key) const; - //! @copydoc ::boost::intrusive::avltree::upper_bound(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> - const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const; + //! @copydoc ::boost::intrusive::avltree::upper_bound(const KeyType&,KeyTypeKeyCompare)const + template<class KeyType, class KeyTypeKeyCompare> + const_iterator upper_bound(const KeyType& key, KeyTypeKeyCompare comp) const; - //! @copydoc ::boost::intrusive::avltree::find(const_reference) - iterator find(const_reference value); + //! @copydoc ::boost::intrusive::avltree::find(const key_type &) + iterator find(const key_type &key); - //! @copydoc ::boost::intrusive::avltree::find(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - iterator find(const KeyType& key, KeyValueCompare comp); + //! @copydoc ::boost::intrusive::avltree::find(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + iterator find(const KeyType& key, KeyTypeKeyCompare comp); - //! @copydoc ::boost::intrusive::avltree::find(const_reference)const - const_iterator find(const_reference value) const; + //! @copydoc ::boost::intrusive::avltree::find(const key_type &)const + const_iterator find(const key_type &key) const; - //! @copydoc ::boost::intrusive::avltree::find(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> - const_iterator find(const KeyType& key, KeyValueCompare comp) const; + //! @copydoc ::boost::intrusive::avltree::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::avltree::bounded_range(const_reference,const_reference,bool,bool) + //! @copydoc ::boost::intrusive::avltree::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::avltree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool) - template<class KeyType, class KeyValueCompare> + //! @copydoc ::boost::intrusive::avltree::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::avltree::bounded_range(const_reference,const_reference,bool,bool)const + //! @copydoc ::boost::intrusive::avltree::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::avltree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const - template<class KeyType, class KeyValueCompare> + //! @copydoc ::boost::intrusive::avltree::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::avltree::s_iterator_to(reference) static iterator s_iterator_to(reference value); @@ -402,7 +413,7 @@ 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_avl_set { @@ -410,7 +421,7 @@ struct make_avl_set typedef typename pack_options < avltree_defaults, #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) - O1, O2, O3, O4, O5 + O1, O2, O3, O4, O5, O6 #else Options... #endif @@ -421,6 +432,7 @@ struct make_avl_set typedef avl_set_impl < value_traits + , typename packed_options::key_of_value , typename packed_options::compare , typename packed_options::size_type , packed_options::constant_time_size @@ -432,14 +444,14 @@ struct make_avl_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 avl_set : public make_avl_set<T, #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) - O1, O2, O3, O4, O5 + O1, O2, O3, O4, O5, O6 #else Options... #endif @@ -448,7 +460,7 @@ class avl_set typedef typename make_avl_set <T, #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) - O1, O2, O3, O4, O5 + O1, O2, O3, O4, O5, O6 #else Options... #endif @@ -456,7 +468,7 @@ class avl_set BOOST_MOVABLE_BUT_NOT_COPYABLE(avl_set) public: - typedef typename Base::value_compare value_compare; + typedef typename Base::key_compare key_compare; typedef typename Base::value_traits value_traits; typedef typename Base::iterator iterator; typedef typename Base::const_iterator const_iterator; @@ -464,14 +476,14 @@ class avl_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 avl_set( const value_compare &cmp = value_compare() + explicit avl_set( const key_compare &cmp = key_compare() , const value_traits &v_traits = value_traits()) : Base(cmp, v_traits) {} template<class Iterator> avl_set( Iterator b, Iterator e - , const value_compare &cmp = value_compare() + , const key_compare &cmp = key_compare() , const value_traits &v_traits = value_traits()) : Base(b, e, cmp, v_traits) {} @@ -483,6 +495,14 @@ class avl_set avl_set& operator=(BOOST_RV_REF(avl_set) x) { return static_cast<avl_set &>(this->Base::operator=(BOOST_MOVE_BASE(Base, x))); } + template <class Cloner, class Disposer> + void clone_from(const avl_set &src, Cloner cloner, Disposer disposer) + { Base::clone_from(src, cloner, disposer); } + + template <class Cloner, class Disposer> + void clone_from(BOOST_RV_REF(avl_set) src, Cloner cloner, Disposer disposer) + { Base::clone_from(BOOST_MOVE_BASE(Base, src), cloner, disposer); } + static avl_set &container_from_end_iterator(iterator end_iterator) { return static_cast<avl_set &>(Base::container_from_end_iterator(end_iterator)); } @@ -512,15 +532,15 @@ class avl_set #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) template<class T, class ...Options> #else -template<class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize, typename HeaderHolder> +template<class ValueTraits, class VoidOrKeyOfValue, class Compare, class SizeType, bool ConstantTimeSize, typename HeaderHolder> #endif class avl_multiset_impl #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED - : public bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, AvlTreeAlgorithms, HeaderHolder> + : public bstree_impl<ValueTraits, VoidOrKeyOfValue, Compare, SizeType, ConstantTimeSize, AvlTreeAlgorithms, HeaderHolder> #endif { /// @cond - typedef bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, AvlTreeAlgorithms, HeaderHolder> tree_type; + typedef bstree_impl<ValueTraits, VoidOrKeyOfValue, Compare, SizeType, ConstantTimeSize, AvlTreeAlgorithms, HeaderHolder> tree_type; BOOST_MOVABLE_BUT_NOT_COPYABLE(avl_multiset_impl) typedef tree_type implementation_defined; @@ -528,6 +548,8 @@ class avl_multiset_impl public: typedef typename implementation_defined::value_type value_type; + typedef typename implementation_defined::key_type key_type; + typedef typename implementation_defined::key_of_value key_of_value; typedef typename implementation_defined::value_traits value_traits; typedef typename implementation_defined::pointer pointer; typedef typename implementation_defined::const_pointer const_pointer; @@ -551,16 +573,16 @@ class avl_multiset_impl static const bool constant_time_size = tree_type::constant_time_size; public: - //! @copydoc ::boost::intrusive::avltree::avltree(const value_compare &,const value_traits &) - explicit avl_multiset_impl( const value_compare &cmp = value_compare() + //! @copydoc ::boost::intrusive::avltree::avltree(const key_compare &,const value_traits &) + explicit avl_multiset_impl( const key_compare &cmp = key_compare() , const value_traits &v_traits = value_traits()) : tree_type(cmp, v_traits) {} - //! @copydoc ::boost::intrusive::avltree::avltree(bool,Iterator,Iterator,const value_compare &,const value_traits &) + //! @copydoc ::boost::intrusive::avltree::avltree(bool,Iterator,Iterator,const key_compare &,const value_traits &) template<class Iterator> avl_multiset_impl( Iterator b, Iterator e - , const value_compare &cmp = value_compare() + , const key_compare &cmp = key_compare() , const value_traits &v_traits = value_traits()) : tree_type(false, b, e, cmp, v_traits) {} @@ -641,11 +663,20 @@ class avl_multiset_impl //! @copydoc ::boost::intrusive::avltree::swap void swap(avl_multiset_impl& other); - //! @copydoc ::boost::intrusive::avltree::clone_from + //! @copydoc ::boost::intrusive::avltree::clone_from(const avltree&,Cloner,Disposer) template <class Cloner, class Disposer> void clone_from(const avl_multiset_impl &src, Cloner cloner, Disposer disposer); - #endif //#ifdef BOOST_iNTRUSIVE_DOXYGEN_INVOKED + #else + + using tree_type::clone_from; + + #endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED + + //! @copydoc ::boost::intrusive::avltree::clone_from(avltree&&,Cloner,Disposer) + template <class Cloner, class Disposer> + void clone_from(BOOST_RV_REF(avl_multiset_impl) src, Cloner cloner, Disposer disposer) + { tree_type::clone_from(BOOST_MOVE_BASE(tree_type, src), cloner, disposer); } //! @copydoc ::boost::intrusive::avltree::insert_equal(reference) iterator insert(reference value) @@ -676,12 +707,12 @@ class avl_multiset_impl //! @copydoc ::boost::intrusive::avltree::erase(const_iterator,const_iterator) iterator erase(const_iterator b, const_iterator e); - //! @copydoc ::boost::intrusive::avltree::erase(const_reference) - size_type erase(const_reference value); + //! @copydoc ::boost::intrusive::avltree::erase(const key_type &) + size_type erase(const key_type &key); - //! @copydoc ::boost::intrusive::avltree::erase(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - size_type erase(const KeyType& key, KeyValueCompare comp); + //! @copydoc ::boost::intrusive::avltree::erase(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + size_type erase(const KeyType& key, KeyTypeKeyCompare comp); //! @copydoc ::boost::intrusive::avltree::erase_and_dispose(const_iterator,Disposer) template<class Disposer> @@ -691,13 +722,13 @@ class avl_multiset_impl template<class Disposer> iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer); - //! @copydoc ::boost::intrusive::avltree::erase_and_dispose(const_reference, Disposer) + //! @copydoc ::boost::intrusive::avltree::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::avltree::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::avltree::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::avltree::clear void clear(); @@ -706,88 +737,88 @@ class avl_multiset_impl template<class Disposer> void clear_and_dispose(Disposer disposer); - //! @copydoc ::boost::intrusive::avltree::count(const_reference)const - size_type count(const_reference value) const; + //! @copydoc ::boost::intrusive::avltree::count(const key_type &)const + size_type count(const key_type &key) const; - //! @copydoc ::boost::intrusive::avltree::count(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> - size_type count(const KeyType& key, KeyValueCompare comp) const; + //! @copydoc ::boost::intrusive::avltree::count(const KeyType&,KeyTypeKeyCompare)const + template<class KeyType, class KeyTypeKeyCompare> + size_type count(const KeyType& key, KeyTypeKeyCompare comp) const; - //! @copydoc ::boost::intrusive::avltree::lower_bound(const_reference) - iterator lower_bound(const_reference value); + //! @copydoc ::boost::intrusive::avltree::lower_bound(const key_type &) + iterator lower_bound(const key_type &key); - //! @copydoc ::boost::intrusive::avltree::lower_bound(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - iterator lower_bound(const KeyType& key, KeyValueCompare comp); + //! @copydoc ::boost::intrusive::avltree::lower_bound(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + iterator lower_bound(const KeyType& key, KeyTypeKeyCompare comp); - //! @copydoc ::boost::intrusive::avltree::lower_bound(const_reference)const - const_iterator lower_bound(const_reference value) const; + //! @copydoc ::boost::intrusive::avltree::lower_bound(const key_type &)const + const_iterator lower_bound(const key_type &key) const; - //! @copydoc ::boost::intrusive::avltree::lower_bound(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> - const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const; + //! @copydoc ::boost::intrusive::avltree::lower_bound(const KeyType&,KeyTypeKeyCompare)const + template<class KeyType, class KeyTypeKeyCompare> + const_iterator lower_bound(const KeyType& key, KeyTypeKeyCompare comp) const; - //! @copydoc ::boost::intrusive::avltree::upper_bound(const_reference) - iterator upper_bound(const_reference value); + //! @copydoc ::boost::intrusive::avltree::upper_bound(const key_type &) + iterator upper_bound(const key_type &key); - //! @copydoc ::boost::intrusive::avltree::upper_bound(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - iterator upper_bound(const KeyType& key, KeyValueCompare comp); + //! @copydoc ::boost::intrusive::avltree::upper_bound(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + iterator upper_bound(const KeyType& key, KeyTypeKeyCompare comp); - //! @copydoc ::boost::intrusive::avltree::upper_bound(const_reference)const - const_iterator upper_bound(const_reference value) const; + //! @copydoc ::boost::intrusive::avltree::upper_bound(const key_type &)const + const_iterator upper_bound(const key_type &key) const; - //! @copydoc ::boost::intrusive::avltree::upper_bound(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> - const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const; + //! @copydoc ::boost::intrusive::avltree::upper_bound(const KeyType&,KeyTypeKeyCompare)const + template<class KeyType, class KeyTypeKeyCompare> + const_iterator upper_bound(const KeyType& key, KeyTypeKeyCompare comp) const; - //! @copydoc ::boost::intrusive::avltree::find(const_reference) - iterator find(const_reference value); + //! @copydoc ::boost::intrusive::avltree::find(const key_type &) + iterator find(const key_type &key); - //! @copydoc ::boost::intrusive::avltree::find(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - iterator find(const KeyType& key, KeyValueCompare comp); + //! @copydoc ::boost::intrusive::avltree::find(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + iterator find(const KeyType& key, KeyTypeKeyCompare comp); - //! @copydoc ::boost::intrusive::avltree::find(const_reference)const - const_iterator find(const_reference value) const; + //! @copydoc ::boost::intrusive::avltree::find(const key_type &)const + const_iterator find(const key_type &key) const; - //! @copydoc ::boost::intrusive::avltree::find(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> - const_iterator find(const KeyType& key, KeyValueCompare comp) const; + //! @copydoc ::boost::intrusive::avltree::find(const KeyType&,KeyTypeKeyCompare)const + template<class KeyType, class KeyTypeKeyCompare> + const_iterator find(const KeyType& key, KeyTypeKeyCompare comp) const; - //! @copydoc ::boost::intrusive::avltree::equal_range(const_reference) - std::pair<iterator,iterator> equal_range(const_reference value); + //! @copydoc ::boost::intrusive::avltree::equal_range(const key_type &) + std::pair<iterator,iterator> equal_range(const key_type &key); - //! @copydoc ::boost::intrusive::avltree::equal_range(const KeyType&,KeyValueCompare) - template<class KeyType, class KeyValueCompare> - std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp); + //! @copydoc ::boost::intrusive::avltree::equal_range(const KeyType&,KeyTypeKeyCompare) + template<class KeyType, class KeyTypeKeyCompare> + std::pair<iterator,iterator> equal_range(const KeyType& key, KeyTypeKeyCompare comp); - //! @copydoc ::boost::intrusive::avltree::equal_range(const_reference)const + //! @copydoc ::boost::intrusive::avltree::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::avltree::equal_range(const KeyType&,KeyValueCompare)const - template<class KeyType, class KeyValueCompare> + //! @copydoc ::boost::intrusive::avltree::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::avltree::bounded_range(const_reference,const_reference,bool,bool) + //! @copydoc ::boost::intrusive::avltree::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::avltree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool) - template<class KeyType, class KeyValueCompare> + //! @copydoc ::boost::intrusive::avltree::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::avltree::bounded_range(const_reference,const_reference,bool,bool)const + //! @copydoc ::boost::intrusive::avltree::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 &key upper_key, bool left_closed, bool right_closed) const; - //! @copydoc ::boost::intrusive::avltree::bounded_range(const KeyType&,const KeyType&,KeyValueCompare,bool,bool)const - template<class KeyType, class KeyValueCompare> + //! @copydoc ::boost::intrusive::avltree::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::avltree::s_iterator_to(reference) static iterator s_iterator_to(reference value); @@ -841,7 +872,7 @@ 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_avl_multiset { @@ -849,7 +880,7 @@ struct make_avl_multiset typedef typename pack_options < avltree_defaults, #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) - O1, O2, O3, O4, O5 + O1, O2, O3, O4, O5, O6 #else Options... #endif @@ -860,6 +891,7 @@ struct make_avl_multiset typedef avl_multiset_impl < value_traits + , typename packed_options::key_of_value , typename packed_options::compare , typename packed_options::size_type , packed_options::constant_time_size @@ -872,14 +904,14 @@ struct make_avl_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 avl_multiset : public make_avl_multiset<T, #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) - O1, O2, O3, O4, O5 + O1, O2, O3, O4, O5, O6 #else Options... #endif @@ -887,7 +919,7 @@ class avl_multiset { typedef typename make_avl_multiset<T, #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) - O1, O2, O3, O4, O5 + O1, O2, O3, O4, O5, O6 #else Options... #endif @@ -896,7 +928,7 @@ class avl_multiset BOOST_MOVABLE_BUT_NOT_COPYABLE(avl_multiset) public: - typedef typename Base::value_compare value_compare; + typedef typename Base::key_compare key_compare; typedef typename Base::value_traits value_traits; typedef typename Base::iterator iterator; typedef typename Base::const_iterator const_iterator; @@ -904,14 +936,14 @@ class avl_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 avl_multiset( const value_compare &cmp = value_compare() + explicit avl_multiset( const key_compare &cmp = key_compare() , const value_traits &v_traits = value_traits()) : Base(cmp, v_traits) {} template<class Iterator> avl_multiset( Iterator b, Iterator e - , const value_compare &cmp = value_compare() + , const key_compare &cmp = key_compare() , const value_traits &v_traits = value_traits()) : Base(b, e, cmp, v_traits) {} @@ -923,6 +955,14 @@ class avl_multiset avl_multiset& operator=(BOOST_RV_REF(avl_multiset) x) { return static_cast<avl_multiset &>(this->Base::operator=(BOOST_MOVE_BASE(Base, x))); } + template <class Cloner, class Disposer> + void clone_from(const avl_multiset &src, Cloner cloner, Disposer disposer) + { Base::clone_from(src, cloner, disposer); } + + template <class Cloner, class Disposer> + void clone_from(BOOST_RV_REF(avl_multiset) src, Cloner cloner, Disposer disposer) + { Base::clone_from(BOOST_MOVE_BASE(Base, src), cloner, disposer); } + static avl_multiset &container_from_end_iterator(iterator end_iterator) { return static_cast<avl_multiset &>(Base::container_from_end_iterator(end_iterator)); } |