forked from boostorg/intrusive
Fixes Boost Trac #11865: "Intrusive list explicit ctor error with Clang 3.6 (C++11/14)"
This commit is contained in:
@@ -3839,6 +3839,7 @@ to be inserted in intrusive containers are allocated using `std::vector` or `std
|
|||||||
|
|
||||||
* Fixed bugs:
|
* Fixed bugs:
|
||||||
* [@https://svn.boost.org/trac/boost/ticket/11832 Boost Trac #11832: ['clang-cl + boost intrusive = miscompile]]
|
* [@https://svn.boost.org/trac/boost/ticket/11832 Boost Trac #11832: ['clang-cl + boost intrusive = miscompile]]
|
||||||
|
* [@https://svn.boost.org/trac/boost/ticket/11865 Boost Trac #11865: ['Intrusive list explicit ctor error with Clang 3.6 (C++11/14)]]
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
|
@@ -82,9 +82,13 @@ class avl_set_impl
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
//! @copydoc ::boost::intrusive::avltree::avltree()
|
||||||
|
avl_set_impl()
|
||||||
|
: tree_type()
|
||||||
|
{}
|
||||||
|
|
||||||
//! @copydoc ::boost::intrusive::avltree::avltree(const key_compare &,const value_traits &)
|
//! @copydoc ::boost::intrusive::avltree::avltree(const key_compare &,const value_traits &)
|
||||||
explicit avl_set_impl( const key_compare &cmp = key_compare()
|
explicit avl_set_impl( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
, const value_traits &v_traits = value_traits())
|
|
||||||
: tree_type(cmp, v_traits)
|
: tree_type(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -476,8 +480,11 @@ class avl_set
|
|||||||
//Assert if passed value traits are compatible with the type
|
//Assert if passed value traits are compatible with the type
|
||||||
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
||||||
|
|
||||||
explicit avl_set( const key_compare &cmp = key_compare()
|
avl_set()
|
||||||
, const value_traits &v_traits = value_traits())
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit avl_set( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
: Base(cmp, v_traits)
|
: Base(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -573,9 +580,13 @@ class avl_multiset_impl
|
|||||||
static const bool constant_time_size = tree_type::constant_time_size;
|
static const bool constant_time_size = tree_type::constant_time_size;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
//! @copydoc ::boost::intrusive::avltree::avltree()
|
||||||
|
avl_multiset_impl()
|
||||||
|
: tree_type()
|
||||||
|
{}
|
||||||
|
|
||||||
//! @copydoc ::boost::intrusive::avltree::avltree(const key_compare &,const value_traits &)
|
//! @copydoc ::boost::intrusive::avltree::avltree(const key_compare &,const value_traits &)
|
||||||
explicit avl_multiset_impl( const key_compare &cmp = key_compare()
|
explicit avl_multiset_impl( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
, const value_traits &v_traits = value_traits())
|
|
||||||
: tree_type(cmp, v_traits)
|
: tree_type(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -936,8 +947,11 @@ class avl_multiset
|
|||||||
//Assert if passed value traits are compatible with the type
|
//Assert if passed value traits are compatible with the type
|
||||||
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
||||||
|
|
||||||
explicit avl_multiset( const key_compare &cmp = key_compare()
|
avl_multiset()
|
||||||
, const value_traits &v_traits = value_traits())
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit avl_multiset( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
: Base(cmp, v_traits)
|
: Base(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@@ -121,10 +121,13 @@ class avltree_impl
|
|||||||
|
|
||||||
typedef typename implementation_defined::insert_commit_data insert_commit_data;
|
typedef typename implementation_defined::insert_commit_data insert_commit_data;
|
||||||
|
|
||||||
|
//! @copydoc ::boost::intrusive::bstree::bstree()
|
||||||
|
avltree_impl()
|
||||||
|
: tree_type()
|
||||||
|
{}
|
||||||
|
|
||||||
//! @copydoc ::boost::intrusive::bstree::bstree(const key_compare &,const value_traits &)
|
//! @copydoc ::boost::intrusive::bstree::bstree(const key_compare &,const value_traits &)
|
||||||
explicit avltree_impl( const key_compare &cmp = key_compare()
|
explicit avltree_impl( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
, const value_traits &v_traits = value_traits())
|
|
||||||
: tree_type(cmp, v_traits)
|
: tree_type(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -507,8 +510,11 @@ class avltree
|
|||||||
//Assert if passed value traits are compatible with the type
|
//Assert if passed value traits are compatible with the type
|
||||||
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
||||||
|
|
||||||
explicit avltree( const key_compare &cmp = key_compare()
|
avltree()
|
||||||
, const value_traits &v_traits = value_traits())
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit avltree( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
: Base(cmp, v_traits)
|
: Base(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@@ -80,9 +80,13 @@ class bs_set_impl
|
|||||||
static const bool constant_time_size = tree_type::constant_time_size;
|
static const bool constant_time_size = tree_type::constant_time_size;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
//! @copydoc ::boost::intrusive::bstree::bstree()
|
||||||
|
bs_set_impl()
|
||||||
|
: tree_type()
|
||||||
|
{}
|
||||||
|
|
||||||
//! @copydoc ::boost::intrusive::bstree::bstree(const key_compare &,const value_traits &)
|
//! @copydoc ::boost::intrusive::bstree::bstree(const key_compare &,const value_traits &)
|
||||||
explicit bs_set_impl( const key_compare &cmp = key_compare()
|
explicit bs_set_impl( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
, const value_traits &v_traits = value_traits())
|
|
||||||
: tree_type(cmp, v_traits)
|
: tree_type(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -473,8 +477,11 @@ class bs_set
|
|||||||
//Assert if passed value traits are compatible with the type
|
//Assert if passed value traits are compatible with the type
|
||||||
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
||||||
|
|
||||||
explicit bs_set( const key_compare &cmp = key_compare()
|
bs_set()
|
||||||
, const value_traits &v_traits = value_traits())
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit bs_set( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
: Base(cmp, v_traits)
|
: Base(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -569,9 +576,13 @@ class bs_multiset_impl
|
|||||||
static const bool constant_time_size = tree_type::constant_time_size;
|
static const bool constant_time_size = tree_type::constant_time_size;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
//! @copydoc ::boost::intrusive::bstree::bstree()
|
||||||
|
bs_multiset_impl()
|
||||||
|
: tree_type()
|
||||||
|
{}
|
||||||
|
|
||||||
//! @copydoc ::boost::intrusive::bstree::bstree(const key_compare &,const value_traits &)
|
//! @copydoc ::boost::intrusive::bstree::bstree(const key_compare &,const value_traits &)
|
||||||
explicit bs_multiset_impl( const key_compare &cmp = key_compare()
|
explicit bs_multiset_impl( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
, const value_traits &v_traits = value_traits())
|
|
||||||
: tree_type(cmp, v_traits)
|
: tree_type(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -932,8 +943,11 @@ class bs_multiset
|
|||||||
//Assert if passed value traits are compatible with the type
|
//Assert if passed value traits are compatible with the type
|
||||||
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
||||||
|
|
||||||
explicit bs_multiset( const key_compare &cmp = key_compare()
|
bs_multiset()
|
||||||
, const value_traits &v_traits = value_traits())
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit bs_multiset( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
: Base(cmp, v_traits)
|
: Base(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@@ -679,8 +679,18 @@ class bstree_impl
|
|||||||
//! <b>Throws</b>: If value_traits::node_traits::node
|
//! <b>Throws</b>: If value_traits::node_traits::node
|
||||||
//! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
|
//! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
|
||||||
//! or the copy constructor of the key_compare object throws. Basic guarantee.
|
//! or the copy constructor of the key_compare object throws. Basic guarantee.
|
||||||
explicit bstree_impl( const key_compare &cmp = key_compare()
|
bstree_impl()
|
||||||
, const value_traits &v_traits = value_traits())
|
: data_type(key_compare(), value_traits())
|
||||||
|
{}
|
||||||
|
|
||||||
|
//! <b>Effects</b>: Constructs an empty container with given comparison and traits.
|
||||||
|
//!
|
||||||
|
//! <b>Complexity</b>: Constant.
|
||||||
|
//!
|
||||||
|
//! <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 key_compare object throws. Basic guarantee.
|
||||||
|
explicit bstree_impl( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
: data_type(cmp, v_traits)
|
: data_type(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -2052,8 +2062,11 @@ class bstree
|
|||||||
//Assert if passed value traits are compatible with the type
|
//Assert if passed value traits are compatible with the type
|
||||||
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
||||||
|
|
||||||
bstree( const key_compare &cmp = key_compare()
|
bstree()
|
||||||
, const value_traits &v_traits = value_traits())
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit bstree( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
: Base(cmp, v_traits)
|
: Base(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@@ -176,7 +176,20 @@ class list_impl
|
|||||||
//!
|
//!
|
||||||
//! <b>Throws</b>: If value_traits::node_traits::node
|
//! <b>Throws</b>: If value_traits::node_traits::node
|
||||||
//! constructor throws (this does not happen with predefined Boost.Intrusive hooks).
|
//! constructor throws (this does not happen with predefined Boost.Intrusive hooks).
|
||||||
explicit list_impl(const value_traits &v_traits = value_traits())
|
list_impl()
|
||||||
|
: data_(value_traits())
|
||||||
|
{
|
||||||
|
this->priv_size_traits().set_size(size_type(0));
|
||||||
|
node_algorithms::init_header(this->get_root_node());
|
||||||
|
}
|
||||||
|
|
||||||
|
//! <b>Effects</b>: constructs an empty list.
|
||||||
|
//!
|
||||||
|
//! <b>Complexity</b>: Constant
|
||||||
|
//!
|
||||||
|
//! <b>Throws</b>: If value_traits::node_traits::node
|
||||||
|
//! constructor throws (this does not happen with predefined Boost.Intrusive hooks).
|
||||||
|
explicit list_impl(const value_traits &v_traits)
|
||||||
: data_(v_traits)
|
: data_(v_traits)
|
||||||
{
|
{
|
||||||
this->priv_size_traits().set_size(size_type(0));
|
this->priv_size_traits().set_size(size_type(0));
|
||||||
@@ -1455,7 +1468,11 @@ class list
|
|||||||
typedef typename Base::iterator iterator;
|
typedef typename Base::iterator iterator;
|
||||||
typedef typename Base::const_iterator const_iterator;
|
typedef typename Base::const_iterator const_iterator;
|
||||||
|
|
||||||
explicit list(const value_traits &v_traits = value_traits())
|
list()
|
||||||
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit list(const value_traits &v_traits)
|
||||||
: Base(v_traits)
|
: Base(v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@@ -121,9 +121,13 @@ class rbtree_impl
|
|||||||
|
|
||||||
typedef typename implementation_defined::insert_commit_data insert_commit_data;
|
typedef typename implementation_defined::insert_commit_data insert_commit_data;
|
||||||
|
|
||||||
|
//! @copydoc ::boost::intrusive::bstree::bstree()
|
||||||
|
rbtree_impl()
|
||||||
|
: tree_type()
|
||||||
|
{}
|
||||||
|
|
||||||
//! @copydoc ::boost::intrusive::bstree::bstree(const key_compare &,const value_traits &)
|
//! @copydoc ::boost::intrusive::bstree::bstree(const key_compare &,const value_traits &)
|
||||||
explicit rbtree_impl( const key_compare &cmp = key_compare()
|
explicit rbtree_impl( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
, const value_traits &v_traits = value_traits())
|
|
||||||
: tree_type(cmp, v_traits)
|
: tree_type(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -509,8 +513,11 @@ class rbtree
|
|||||||
//Assert if passed value traits are compatible with the type
|
//Assert if passed value traits are compatible with the type
|
||||||
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
||||||
|
|
||||||
explicit rbtree( const key_compare &cmp = key_compare()
|
rbtree()
|
||||||
, const value_traits &v_traits = value_traits())
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit rbtree( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
: Base(cmp, v_traits)
|
: Base(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@@ -83,9 +83,13 @@ class set_impl
|
|||||||
static const bool constant_time_size = tree_type::constant_time_size;
|
static const bool constant_time_size = tree_type::constant_time_size;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
//! @copydoc ::boost::intrusive::rbtree::rbtree()
|
||||||
|
set_impl()
|
||||||
|
: tree_type()
|
||||||
|
{}
|
||||||
|
|
||||||
//! @copydoc ::boost::intrusive::rbtree::rbtree(const key_compare &,const value_traits &)
|
//! @copydoc ::boost::intrusive::rbtree::rbtree(const key_compare &,const value_traits &)
|
||||||
explicit set_impl( const key_compare &cmp = key_compare()
|
explicit set_impl( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
, const value_traits &v_traits = value_traits())
|
|
||||||
: tree_type(cmp, v_traits)
|
: tree_type(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -476,8 +480,11 @@ class set
|
|||||||
//Assert if passed value traits are compatible with the type
|
//Assert if passed value traits are compatible with the type
|
||||||
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
||||||
|
|
||||||
explicit set( const key_compare &cmp = key_compare()
|
set()
|
||||||
, const value_traits &v_traits = value_traits())
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit set( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
: Base(cmp, v_traits)
|
: Base(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -573,9 +580,13 @@ class multiset_impl
|
|||||||
static const bool constant_time_size = tree_type::constant_time_size;
|
static const bool constant_time_size = tree_type::constant_time_size;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
//! @copydoc ::boost::intrusive::rbtree::rbtree()
|
||||||
|
multiset_impl()
|
||||||
|
: tree_type()
|
||||||
|
{}
|
||||||
|
|
||||||
//! @copydoc ::boost::intrusive::rbtree::rbtree(const key_compare &,const value_traits &)
|
//! @copydoc ::boost::intrusive::rbtree::rbtree(const key_compare &,const value_traits &)
|
||||||
explicit multiset_impl( const key_compare &cmp = key_compare()
|
explicit multiset_impl( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
, const value_traits &v_traits = value_traits())
|
|
||||||
: tree_type(cmp, v_traits)
|
: tree_type(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -936,8 +947,11 @@ class multiset
|
|||||||
//Assert if passed value traits are compatible with the type
|
//Assert if passed value traits are compatible with the type
|
||||||
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
||||||
|
|
||||||
multiset( const key_compare &cmp = key_compare()
|
multiset()
|
||||||
, const value_traits &v_traits = value_traits())
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit multiset( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
: Base(cmp, v_traits)
|
: Base(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@@ -81,9 +81,13 @@ class sg_set_impl
|
|||||||
static const bool constant_time_size = tree_type::constant_time_size;
|
static const bool constant_time_size = tree_type::constant_time_size;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
//! @copydoc ::boost::intrusive::sgtree::sgtree()
|
||||||
|
sg_set_impl()
|
||||||
|
: tree_type()
|
||||||
|
{}
|
||||||
|
|
||||||
//! @copydoc ::boost::intrusive::sgtree::sgtree(const key_compare &,const value_traits &)
|
//! @copydoc ::boost::intrusive::sgtree::sgtree(const key_compare &,const value_traits &)
|
||||||
explicit sg_set_impl( const key_compare &cmp = key_compare()
|
explicit sg_set_impl( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
, const value_traits &v_traits = value_traits())
|
|
||||||
: tree_type(cmp, v_traits)
|
: tree_type(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -487,8 +491,11 @@ class sg_set
|
|||||||
//Assert if passed value traits are compatible with the type
|
//Assert if passed value traits are compatible with the type
|
||||||
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
||||||
|
|
||||||
explicit sg_set( const key_compare &cmp = key_compare()
|
sg_set()
|
||||||
, const value_traits &v_traits = value_traits())
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit sg_set( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
: Base(cmp, v_traits)
|
: Base(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -584,9 +591,13 @@ class sg_multiset_impl
|
|||||||
static const bool constant_time_size = tree_type::constant_time_size;
|
static const bool constant_time_size = tree_type::constant_time_size;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
//! @copydoc ::boost::intrusive::sgtree::sgtree()
|
||||||
|
sg_multiset_impl()
|
||||||
|
: tree_type()
|
||||||
|
{}
|
||||||
|
|
||||||
//! @copydoc ::boost::intrusive::sgtree::sgtree(const key_compare &,const value_traits &)
|
//! @copydoc ::boost::intrusive::sgtree::sgtree(const key_compare &,const value_traits &)
|
||||||
explicit sg_multiset_impl( const key_compare &cmp = key_compare()
|
explicit sg_multiset_impl( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
, const value_traits &v_traits = value_traits())
|
|
||||||
: tree_type(cmp, v_traits)
|
: tree_type(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -960,8 +971,11 @@ class sg_multiset
|
|||||||
//Assert if passed value traits are compatible with the type
|
//Assert if passed value traits are compatible with the type
|
||||||
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
||||||
|
|
||||||
sg_multiset( const key_compare &cmp = key_compare()
|
sg_multiset()
|
||||||
, const value_traits &v_traits = value_traits())
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit sg_multiset( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
: Base(cmp, v_traits)
|
: Base(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@@ -281,9 +281,13 @@ class sgtree_impl
|
|||||||
|
|
||||||
typedef BOOST_INTRUSIVE_IMPDEF(typename node_algorithms::insert_commit_data) insert_commit_data;
|
typedef BOOST_INTRUSIVE_IMPDEF(typename node_algorithms::insert_commit_data) insert_commit_data;
|
||||||
|
|
||||||
|
//! @copydoc ::boost::intrusive::bstree::bstree()
|
||||||
|
sgtree_impl()
|
||||||
|
: tree_type()
|
||||||
|
{}
|
||||||
|
|
||||||
//! @copydoc ::boost::intrusive::bstree::bstree(const key_compare &,const value_traits &)
|
//! @copydoc ::boost::intrusive::bstree::bstree(const key_compare &,const value_traits &)
|
||||||
explicit sgtree_impl( const key_compare &cmp = key_compare()
|
explicit sgtree_impl( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
, const value_traits &v_traits = value_traits())
|
|
||||||
: tree_type(cmp, v_traits)
|
: tree_type(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -934,8 +938,11 @@ class sgtree
|
|||||||
//Assert if passed value traits are compatible with the type
|
//Assert if passed value traits are compatible with the type
|
||||||
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
||||||
|
|
||||||
explicit sgtree( const key_compare &cmp = key_compare()
|
sgtree()
|
||||||
, const value_traits &v_traits = value_traits())
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit sgtree(const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
: Base(cmp, v_traits)
|
: Base(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@@ -307,7 +307,17 @@ class slist_impl
|
|||||||
//!
|
//!
|
||||||
//! <b>Throws</b>: If value_traits::node_traits::node
|
//! <b>Throws</b>: If value_traits::node_traits::node
|
||||||
//! constructor throws (this does not happen with predefined Boost.Intrusive hooks).
|
//! constructor throws (this does not happen with predefined Boost.Intrusive hooks).
|
||||||
explicit slist_impl(const value_traits &v_traits = value_traits())
|
slist_impl()
|
||||||
|
: data_(value_traits())
|
||||||
|
{ this->set_default_constructed_state(); }
|
||||||
|
|
||||||
|
//! <b>Effects</b>: constructs an empty list.
|
||||||
|
//!
|
||||||
|
//! <b>Complexity</b>: Constant
|
||||||
|
//!
|
||||||
|
//! <b>Throws</b>: If value_traits::node_traits::node
|
||||||
|
//! constructor throws (this does not happen with predefined Boost.Intrusive hooks).
|
||||||
|
explicit slist_impl(const value_traits &v_traits)
|
||||||
: data_(v_traits)
|
: data_(v_traits)
|
||||||
{ this->set_default_constructed_state(); }
|
{ this->set_default_constructed_state(); }
|
||||||
|
|
||||||
@@ -2190,7 +2200,11 @@ class slist
|
|||||||
typedef typename Base::size_type size_type;
|
typedef typename Base::size_type size_type;
|
||||||
typedef typename Base::node_ptr node_ptr;
|
typedef typename Base::node_ptr node_ptr;
|
||||||
|
|
||||||
explicit slist(const value_traits &v_traits = value_traits())
|
slist()
|
||||||
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit slist(const value_traits &v_traits)
|
||||||
: Base(v_traits)
|
: Base(v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@@ -81,9 +81,13 @@ class splay_set_impl
|
|||||||
static const bool constant_time_size = tree_type::constant_time_size;
|
static const bool constant_time_size = tree_type::constant_time_size;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
//! @copydoc ::boost::intrusive::splaytree::splaytree()
|
||||||
|
splay_set_impl()
|
||||||
|
: tree_type()
|
||||||
|
{}
|
||||||
|
|
||||||
//! @copydoc ::boost::intrusive::splaytree::splaytree(const key_compare &,const value_traits &)
|
//! @copydoc ::boost::intrusive::splaytree::splaytree(const key_compare &,const value_traits &)
|
||||||
explicit splay_set_impl( const key_compare &cmp = key_compare()
|
explicit splay_set_impl( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
, const value_traits &v_traits = value_traits())
|
|
||||||
: tree_type(cmp, v_traits)
|
: tree_type(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -497,8 +501,11 @@ class splay_set
|
|||||||
//Assert if passed value traits are compatible with the type
|
//Assert if passed value traits are compatible with the type
|
||||||
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
||||||
|
|
||||||
explicit splay_set( const key_compare &cmp = key_compare()
|
splay_set()
|
||||||
, const value_traits &v_traits = value_traits())
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit splay_set( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
: Base(cmp, v_traits)
|
: Base(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -594,9 +601,13 @@ class splay_multiset_impl
|
|||||||
static const bool constant_time_size = tree_type::constant_time_size;
|
static const bool constant_time_size = tree_type::constant_time_size;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
//! @copydoc ::boost::intrusive::splaytree::splaytree()
|
||||||
|
splay_multiset_impl()
|
||||||
|
: tree_type()
|
||||||
|
{}
|
||||||
|
|
||||||
//! @copydoc ::boost::intrusive::splaytree::splaytree(const key_compare &,const value_traits &)
|
//! @copydoc ::boost::intrusive::splaytree::splaytree(const key_compare &,const value_traits &)
|
||||||
explicit splay_multiset_impl( const key_compare &cmp = key_compare()
|
explicit splay_multiset_impl(const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
, const value_traits &v_traits = value_traits())
|
|
||||||
: tree_type(cmp, v_traits)
|
: tree_type(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -973,8 +984,11 @@ class splay_multiset
|
|||||||
//Assert if passed value traits are compatible with the type
|
//Assert if passed value traits are compatible with the type
|
||||||
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
||||||
|
|
||||||
explicit splay_multiset( const key_compare &cmp = key_compare()
|
splay_multiset()
|
||||||
, const value_traits &v_traits = value_traits())
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit splay_multiset( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
: Base(cmp, v_traits)
|
: Base(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@@ -111,9 +111,13 @@ class splaytree_impl
|
|||||||
|
|
||||||
typedef typename implementation_defined::insert_commit_data insert_commit_data;
|
typedef typename implementation_defined::insert_commit_data insert_commit_data;
|
||||||
|
|
||||||
|
//! @copydoc ::boost::intrusive::bstree::bstree()
|
||||||
|
splaytree_impl()
|
||||||
|
: tree_type()
|
||||||
|
{}
|
||||||
|
|
||||||
//! @copydoc ::boost::intrusive::bstree::bstree(const key_compare &,const value_traits &)
|
//! @copydoc ::boost::intrusive::bstree::bstree(const key_compare &,const value_traits &)
|
||||||
explicit splaytree_impl( const key_compare &cmp = key_compare()
|
explicit splaytree_impl( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
, const value_traits &v_traits = value_traits())
|
|
||||||
: tree_type(cmp, v_traits)
|
: tree_type(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -584,8 +588,11 @@ class splaytree
|
|||||||
//Assert if passed value traits are compatible with the type
|
//Assert if passed value traits are compatible with the type
|
||||||
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
||||||
|
|
||||||
explicit splaytree( const key_compare &cmp = key_compare()
|
splaytree()
|
||||||
, const value_traits &v_traits = value_traits())
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit splaytree( const key_compare &cmp, const value_traits &v_traits = value_traits())
|
||||||
: Base(cmp, v_traits)
|
: Base(cmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@@ -159,7 +159,18 @@ class treap_impl
|
|||||||
//! <b>Throws</b>: If value_traits::node_traits::node
|
//! <b>Throws</b>: If value_traits::node_traits::node
|
||||||
//! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
|
//! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
|
||||||
//! or the copy constructor of the value_compare/priority_compare objects throw. Basic guarantee.
|
//! or the copy constructor of the value_compare/priority_compare objects throw. Basic guarantee.
|
||||||
explicit treap_impl( const key_compare &cmp = key_compare()
|
treap_impl()
|
||||||
|
: tree_type(), prio_base(priority_compare())
|
||||||
|
{}
|
||||||
|
|
||||||
|
//! <b>Effects</b>: Constructs an empty container.
|
||||||
|
//!
|
||||||
|
//! <b>Complexity</b>: Constant.
|
||||||
|
//!
|
||||||
|
//! <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/priority_compare objects throw. Basic guarantee.
|
||||||
|
explicit treap_impl( const key_compare &cmp
|
||||||
, const priority_compare &pcmp = priority_compare()
|
, const priority_compare &pcmp = priority_compare()
|
||||||
, const value_traits &v_traits = value_traits())
|
, const value_traits &v_traits = value_traits())
|
||||||
: tree_type(cmp, v_traits), prio_base(pcmp)
|
: tree_type(cmp, v_traits), prio_base(pcmp)
|
||||||
@@ -1147,8 +1158,11 @@ class treap
|
|||||||
|
|
||||||
//Assert if passed value traits are compatible with the type
|
//Assert if passed value traits are compatible with the type
|
||||||
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
||||||
|
treap()
|
||||||
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
explicit treap( const key_compare &cmp = key_compare()
|
explicit treap( const key_compare &cmp
|
||||||
, const priority_compare &pcmp = priority_compare()
|
, const priority_compare &pcmp = priority_compare()
|
||||||
, const value_traits &v_traits = value_traits())
|
, const value_traits &v_traits = value_traits())
|
||||||
: Base(cmp, pcmp, v_traits)
|
: Base(cmp, pcmp, v_traits)
|
||||||
|
@@ -83,31 +83,19 @@ class treap_set_impl
|
|||||||
static const bool constant_time_size = implementation_defined::constant_time_size;
|
static const bool constant_time_size = implementation_defined::constant_time_size;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//! <b>Effects</b>: Constructs an empty treap_set.
|
//! @copydoc ::boost::intrusive::treap::treap()
|
||||||
//!
|
treap_set_impl()
|
||||||
//! <b>Complexity</b>: Constant.
|
: tree_type()
|
||||||
//!
|
{}
|
||||||
//! <b>Throws</b>: If value_traits::node_traits::node
|
|
||||||
//! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
|
//! @copydoc ::boost::intrusive::treap::treap(const key_compare &,const priority_compare &,const value_traits &)
|
||||||
//! or the copy constructor of the key_compare object throws.
|
explicit treap_set_impl( const key_compare &cmp
|
||||||
explicit treap_set_impl( const key_compare &cmp = key_compare()
|
|
||||||
, const priority_compare &pcmp = priority_compare()
|
, const priority_compare &pcmp = priority_compare()
|
||||||
, const value_traits &v_traits = value_traits())
|
, const value_traits &v_traits = value_traits())
|
||||||
: tree_type(cmp, pcmp, v_traits)
|
: tree_type(cmp, pcmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
//! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
|
//! @copydoc ::boost::intrusive::treap::treap(bool,Iterator,Iterator,const key_compare &,const priority_compare &,const value_traits &)
|
||||||
//! cmp must be a comparison function that induces a strict weak ordering.
|
|
||||||
//!
|
|
||||||
//! <b>Effects</b>: Constructs an empty treap_set and inserts elements from
|
|
||||||
//! [b, e).
|
|
||||||
//!
|
|
||||||
//! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
|
|
||||||
//! comp and otherwise N * log N, where N is distance(last, first).
|
|
||||||
//!
|
|
||||||
//! <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 key_compare object throws.
|
|
||||||
template<class Iterator>
|
template<class Iterator>
|
||||||
treap_set_impl( Iterator b, Iterator e
|
treap_set_impl( Iterator b, Iterator e
|
||||||
, const key_compare &cmp = key_compare()
|
, const key_compare &cmp = key_compare()
|
||||||
@@ -368,21 +356,21 @@ class treap_set_impl
|
|||||||
|
|
||||||
#endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
|
#endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
|
||||||
|
|
||||||
//! @copydoc ::boost::intrusive::rbtree::equal_range(const key_type &)
|
//! @copydoc ::boost::intrusive::treap::equal_range(const key_type &)
|
||||||
std::pair<iterator,iterator> equal_range(const key_type &key)
|
std::pair<iterator,iterator> equal_range(const key_type &key)
|
||||||
{ return this->tree_type::lower_bound_range(key); }
|
{ return this->tree_type::lower_bound_range(key); }
|
||||||
|
|
||||||
//! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyTypeKeyCompare)
|
//! @copydoc ::boost::intrusive::treap::equal_range(const KeyType&,KeyTypeKeyCompare)
|
||||||
template<class KeyType, class KeyTypeKeyCompare>
|
template<class KeyType, class KeyTypeKeyCompare>
|
||||||
std::pair<iterator,iterator> equal_range(const KeyType& key, KeyTypeKeyCompare comp)
|
std::pair<iterator,iterator> equal_range(const KeyType& key, KeyTypeKeyCompare comp)
|
||||||
{ return this->tree_type::equal_range(key, comp); }
|
{ return this->tree_type::equal_range(key, comp); }
|
||||||
|
|
||||||
//! @copydoc ::boost::intrusive::rbtree::equal_range(const key_type &)const
|
//! @copydoc ::boost::intrusive::treap::equal_range(const key_type &)const
|
||||||
std::pair<const_iterator, const_iterator>
|
std::pair<const_iterator, const_iterator>
|
||||||
equal_range(const key_type &key) const
|
equal_range(const key_type &key) const
|
||||||
{ return this->tree_type::lower_bound_range(key); }
|
{ return this->tree_type::lower_bound_range(key); }
|
||||||
|
|
||||||
//! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyTypeKeyCompare)const
|
//! @copydoc ::boost::intrusive::treap::equal_range(const KeyType&,KeyTypeKeyCompare)const
|
||||||
template<class KeyType, class KeyTypeKeyCompare>
|
template<class KeyType, class KeyTypeKeyCompare>
|
||||||
std::pair<const_iterator, const_iterator>
|
std::pair<const_iterator, const_iterator>
|
||||||
equal_range(const KeyType& key, KeyTypeKeyCompare comp) const
|
equal_range(const KeyType& key, KeyTypeKeyCompare comp) const
|
||||||
@@ -508,7 +496,11 @@ class treap_set
|
|||||||
//Assert if passed value traits are compatible with the type
|
//Assert if passed value traits are compatible with the type
|
||||||
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
||||||
|
|
||||||
explicit treap_set( const key_compare &cmp = key_compare()
|
treap_set()
|
||||||
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit treap_set( const key_compare &cmp
|
||||||
, const priority_compare &pcmp = priority_compare()
|
, const priority_compare &pcmp = priority_compare()
|
||||||
, const value_traits &v_traits = value_traits())
|
, const value_traits &v_traits = value_traits())
|
||||||
: Base(cmp, pcmp, v_traits)
|
: Base(cmp, pcmp, v_traits)
|
||||||
@@ -608,31 +600,20 @@ class treap_multiset_impl
|
|||||||
static const bool constant_time_size = implementation_defined::constant_time_size;
|
static const bool constant_time_size = implementation_defined::constant_time_size;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//! <b>Effects</b>: Constructs an empty treap_multiset.
|
|
||||||
//!
|
//! @copydoc ::boost::intrusive::treap::treap()
|
||||||
//! <b>Complexity</b>: Constant.
|
treap_multiset_impl()
|
||||||
//!
|
: tree_type()
|
||||||
//! <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 key_compare object throws.
|
//! @copydoc ::boost::intrusive::treap::treap(const key_compare &,const priority_compare &,const value_traits &)
|
||||||
explicit treap_multiset_impl( const key_compare &cmp = key_compare()
|
explicit treap_multiset_impl( const key_compare &cmp
|
||||||
, const priority_compare &pcmp = priority_compare()
|
, const priority_compare &pcmp = priority_compare()
|
||||||
, const value_traits &v_traits = value_traits())
|
, const value_traits &v_traits = value_traits())
|
||||||
: tree_type(cmp, pcmp, v_traits)
|
: tree_type(cmp, pcmp, v_traits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
//! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
|
//! @copydoc ::boost::intrusive::treap::treap(bool,Iterator,Iterator,const key_compare &,const priority_compare &,const value_traits &)
|
||||||
//! cmp must be a comparison function that induces a strict weak ordering.
|
|
||||||
//!
|
|
||||||
//! <b>Effects</b>: Constructs an empty treap_multiset and inserts elements from
|
|
||||||
//! [b, e).
|
|
||||||
//!
|
|
||||||
//! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
|
|
||||||
//! comp and otherwise N * log N, where N is distance(last, first).
|
|
||||||
//!
|
|
||||||
//! <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 key_compare object throws.
|
|
||||||
template<class Iterator>
|
template<class Iterator>
|
||||||
treap_multiset_impl( Iterator b, Iterator e
|
treap_multiset_impl( Iterator b, Iterator e
|
||||||
, const key_compare &cmp = key_compare()
|
, const key_compare &cmp = key_compare()
|
||||||
@@ -1000,7 +981,11 @@ class treap_multiset
|
|||||||
//Assert if passed value traits are compatible with the type
|
//Assert if passed value traits are compatible with the type
|
||||||
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
||||||
|
|
||||||
explicit treap_multiset( const key_compare &cmp = key_compare()
|
treap_multiset()
|
||||||
|
: Base()
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit treap_multiset( const key_compare &cmp
|
||||||
, const priority_compare &pcmp = priority_compare()
|
, const priority_compare &pcmp = priority_compare()
|
||||||
, const value_traits &v_traits = value_traits())
|
, const value_traits &v_traits = value_traits())
|
||||||
: Base(cmp, pcmp, v_traits)
|
: Base(cmp, pcmp, v_traits)
|
||||||
|
Reference in New Issue
Block a user