forked from boostorg/container
* Improved vector's insertion performance.
* Changed again experimental multiallocation interface for better performance (still experimental). * Added no exception support for those willing to disable exceptions in their compilers. * Fixed GCC -Wshadow warnings. * Replaced deprecated BOOST_NO_XXXX with newer BOOST_NO_CXX11_XXX macros. [SVN r81518]
This commit is contained in:
1 parent
a75d72d03c
commit
bc5c91bb79
28 files changed
+2449
-1892
No files matched your search
@@ -19,8 +19,8 @@
|
||||
#include <boost/container/detail/workaround.hpp>
|
||||
|
||||
#include <boost/container/container_fwd.hpp>
|
||||
#include <boost/move/move.hpp>
|
||||
#include <boost/move/move_helpers.hpp>
|
||||
#include <boost/move/utility.hpp>
|
||||
#include <boost/move/detail/move_helpers.hpp>
|
||||
#include <boost/intrusive/pointer_traits.hpp>
|
||||
#include <boost/container/detail/utilities.hpp>
|
||||
#include <boost/container/detail/mpl.hpp>
|
||||
@@ -140,9 +140,6 @@ class slist_const_iterator
|
||||
friend bool operator!= (const slist_const_iterator& l, const slist_const_iterator& r)
|
||||
{ return l.m_it != r.m_it; }
|
||||
|
||||
IIterator &get()
|
||||
{ return this->m_it; }
|
||||
|
||||
const IIterator &get() const
|
||||
{ return this->m_it; }
|
||||
};
|
||||
@@ -181,9 +178,6 @@ class slist_iterator
|
||||
slist_iterator operator++(int)
|
||||
{ IIterator tmp = this->m_it; ++*this; return slist_iterator(tmp); }
|
||||
|
||||
IIterator &get()
|
||||
{ return this->m_it; }
|
||||
|
||||
const IIterator &get() const
|
||||
{ return this->m_it; }
|
||||
};
|
||||
@@ -319,10 +313,10 @@ class slist
|
||||
|
||||
//! <b>Effects</b>: Constructs a list taking the allocator as parameter.
|
||||
//!
|
||||
//! <b>Throws</b>: If allocator_type's copy constructor throws.
|
||||
//! <b>Throws</b>: Nothing
|
||||
//!
|
||||
//! <b>Complexity</b>: Constant.
|
||||
explicit slist(const allocator_type& a)
|
||||
explicit slist(const allocator_type& a) BOOST_CONTAINER_NOEXCEPT
|
||||
: AllocHolder(a)
|
||||
{}
|
||||
|
||||
@@ -407,7 +401,7 @@ class slist
|
||||
//! <b>Throws</b>: Nothing.
|
||||
//!
|
||||
//! <b>Complexity</b>: Linear to the number of elements.
|
||||
~slist()
|
||||
~slist() BOOST_CONTAINER_NOEXCEPT
|
||||
{} //AllocHolder clears the slist
|
||||
|
||||
//! <b>Effects</b>: Makes *this contain the same elements as x.
|
||||
@@ -511,7 +505,7 @@ class slist
|
||||
//! <b>Throws</b>: If allocator's copy constructor throws.
|
||||
//!
|
||||
//! <b>Complexity</b>: Constant.
|
||||
allocator_type get_allocator() const
|
||||
allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT
|
||||
{ return allocator_type(this->node_alloc()); }
|
||||
|
||||
//! <b>Effects</b>: Returns a reference to the internal allocator.
|
||||
@@ -521,7 +515,7 @@ class slist
|
||||
//! <b>Complexity</b>: Constant.
|
||||
//!
|
||||
//! <b>Note</b>: Non-standard extension.
|
||||
stored_allocator_type &get_stored_allocator()
|
||||
stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT
|
||||
{ return this->node_alloc(); }
|
||||
|
||||
//! <b>Effects</b>: Returns a reference to the internal allocator.
|
||||
@@ -531,7 +525,7 @@ class slist
|
||||
//! <b>Complexity</b>: Constant.
|
||||
//!
|
||||
//! <b>Note</b>: Non-standard extension.
|
||||
const stored_allocator_type &get_stored_allocator() const
|
||||
const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT
|
||||
{ return this->node_alloc(); }
|
||||
|
||||
//////////////////////////////////////////////
|
||||
@@ -547,7 +541,7 @@ class slist
|
||||
//! <b>Throws</b>: Nothing.
|
||||
//!
|
||||
//! <b>Complexity</b>: Constant.
|
||||
iterator before_begin()
|
||||
iterator before_begin() BOOST_CONTAINER_NOEXCEPT
|
||||
{ return iterator(end()); }
|
||||
|
||||
//! <b>Effects</b>: Returns a non-dereferenceable const_iterator
|
||||
@@ -557,7 +551,7 @@ class slist
|
||||
//! <b>Throws</b>: Nothing.
|
||||
//!
|
||||
//! <b>Complexity</b>: Constant.
|
||||
const_iterator before_begin() const
|
||||
const_iterator before_begin() const BOOST_CONTAINER_NOEXCEPT
|
||||
{ return this->cbefore_begin(); }
|
||||
|
||||
//! <b>Effects</b>: Returns an iterator to the first element contained in the list.
|
||||
@@ -565,7 +559,7 @@ class slist
|
||||
//! <b>Throws</b>: Nothing.
|
||||
//!
|
||||
//! <b>Complexity</b>: Constant.
|
||||
iterator begin()
|
||||
iterator begin() BOOST_CONTAINER_NOEXCEPT
|
||||
{ return iterator(this->icont().begin()); }
|
||||
|
||||
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the list.
|
||||
@@ -573,7 +567,7 @@ class slist
|
||||
//! <b>Throws</b>: Nothing.
|
||||
//!
|
||||
//! <b>Complexity</b>: Constant.
|
||||
const_iterator begin() const
|
||||
const_iterator begin() const BOOST_CONTAINER_NOEXCEPT
|
||||
{ return this->cbegin(); }
|
||||
|
||||
//! <b>Effects</b>: Returns an iterator to the end of the list.
|
||||
@@ -581,7 +575,7 @@ class slist
|
||||
//! <b>Throws</b>: Nothing.
|
||||
//!
|
||||
//! <b>Complexity</b>: Constant.
|
||||
iterator end()
|
||||
iterator end() BOOST_CONTAINER_NOEXCEPT
|
||||
{ return iterator(this->icont().end()); }
|
||||
|
||||
//! <b>Effects</b>: Returns a const_iterator to the end of the list.
|
||||
@@ -589,7 +583,7 @@ class slist
|
||||
//! <b>Throws</b>: Nothing.
|
||||
//!
|
||||
//! <b>Complexity</b>: Constant.
|
||||
const_iterator end() const
|
||||
const_iterator end() const BOOST_CONTAINER_NOEXCEPT
|
||||
{ return this->cend(); }
|
||||
|
||||
//! <b>Effects</b>: Returns a non-dereferenceable const_iterator
|
||||
@@ -599,7 +593,7 @@ class slist
|
||||
//! <b>Throws</b>: Nothing.
|
||||
//!
|
||||
//! <b>Complexity</b>: Constant.
|
||||
const_iterator cbefore_begin() const
|
||||
const_iterator cbefore_begin() const BOOST_CONTAINER_NOEXCEPT
|
||||
{ return const_iterator(end()); }
|
||||
|
||||
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the list.
|
||||
@@ -607,7 +601,7 @@ class slist
|
||||
//! <b>Throws</b>: Nothing.
|
||||
//!
|
||||
//! <b>Complexity</b>: Constant.
|
||||
const_iterator cbegin() const
|
||||
const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT
|
||||
{ return const_iterator(this->non_const_icont().begin()); }
|
||||
|
||||
//! <b>Effects</b>: Returns a const_iterator to the end of the list.
|
||||
@@ -615,7 +609,7 @@ class slist
|
||||
//! <b>Throws</b>: Nothing.
|
||||
//!
|
||||
//! <b>Complexity</b>: Constant.
|
||||
const_iterator cend() const
|
||||
const_iterator cend() const BOOST_CONTAINER_NOEXCEPT
|
||||
{ return const_iterator(this->non_const_icont().end()); }
|
||||
|
||||
//! <b>Returns</b>: The iterator to the element before i in the sequence.
|
||||
@@ -627,7 +621,7 @@ class slist
|
||||
//! <b>Complexity</b>: Linear to the number of elements before i.
|
||||
//!
|
||||
//! <b>Note</b>: Non-standard extension.
|
||||
iterator previous(iterator p)
|
||||
iterator previous(iterator p) BOOST_CONTAINER_NOEXCEPT
|
||||
{ return iterator(this->icont().previous(p.get())); }
|
||||
|
||||
//! <b>Returns</b>: The const_iterator to the element before i in the sequence.
|
||||
@@ -986,9 +980,9 @@ class slist
|
||||
//!
|
||||
//! <b>Note</b>: Iterators of values obtained from list x now point to elements of
|
||||
//! this list. Iterators of this list and all the references are not invalidated.
|
||||
void splice_after(const_iterator prev_pos, slist& x)
|
||||
void splice_after(const_iterator prev_pos, slist& x) BOOST_CONTAINER_NOEXCEPT
|
||||
{
|
||||
BOOST_ASSERT(*this != x);
|
||||
BOOST_ASSERT(this != &x);
|
||||
BOOST_ASSERT(this->node_alloc() == x.node_alloc());
|
||||
this->icont().splice_after(prev_pos.get(), x.icont());
|
||||
}
|
||||
@@ -1006,65 +1000,63 @@ class slist
|
||||
//!
|
||||
//! <b>Note</b>: Iterators of values obtained from list x now point to elements of
|
||||
//! this list. Iterators of this list and all the references are not invalidated.
|
||||
void splice_after(const_iterator prev_pos, BOOST_RV_REF(slist) x)
|
||||
void splice_after(const_iterator prev_pos, BOOST_RV_REF(slist) x) BOOST_CONTAINER_NOEXCEPT
|
||||
{ this->splice_after(prev_pos, static_cast<slist&>(x)); }
|
||||
|
||||
//! <b>Requires</b>: prev_pos must be a valid iterator of this.
|
||||
//! i must point to an element contained in list x.
|
||||
//! this' allocator and x's allocator shall compare equal.
|
||||
//!
|
||||
//! <b>Effects</b>: Transfers the value pointed by i, from list x to this list,
|
||||
//! after the element pointed by prev_pos.
|
||||
//! If prev_pos == prev or prev_pos == ++prev, this function is a null operation.
|
||||
//!
|
||||
//! <b>Throws</b>: std::runtime_error if this' allocator and x's allocator
|
||||
//! are not equal.
|
||||
//! <b>Throws</b>: Nothing
|
||||
//!
|
||||
//! <b>Complexity</b>: Constant.
|
||||
//!
|
||||
//! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
|
||||
//! list. Iterators of this list and all the references are not invalidated.
|
||||
void splice_after(const_iterator prev_pos, slist& x, const_iterator prev)
|
||||
void splice_after(const_iterator prev_pos, slist& x, const_iterator prev) BOOST_CONTAINER_NOEXCEPT
|
||||
{
|
||||
BOOST_ASSERT(*this != x);
|
||||
BOOST_ASSERT(this->node_alloc() == x.node_alloc());
|
||||
this->icont().splice_after(prev_pos.get(), x.icont(), prev.get());
|
||||
}
|
||||
|
||||
//! <b>Requires</b>: prev_pos must be a valid iterator of this.
|
||||
//! i must point to an element contained in list x.
|
||||
//! this' allocator and x's allocator shall compare equal.
|
||||
//!
|
||||
//! <b>Effects</b>: Transfers the value pointed by i, from list x to this list,
|
||||
//! after the element pointed by prev_pos.
|
||||
//! If prev_pos == prev or prev_pos == ++prev, this function is a null operation.
|
||||
//!
|
||||
//! <b>Throws</b>: std::runtime_error if this' allocator and x's allocator
|
||||
//! are not equal.
|
||||
//! <b>Throws</b>: Nothing
|
||||
//!
|
||||
//! <b>Complexity</b>: Constant.
|
||||
//!
|
||||
//! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
|
||||
//! list. Iterators of this list and all the references are not invalidated.
|
||||
void splice_after(const_iterator prev_pos, BOOST_RV_REF(slist) x, const_iterator prev)
|
||||
void splice_after(const_iterator prev_pos, BOOST_RV_REF(slist) x, const_iterator prev) BOOST_CONTAINER_NOEXCEPT
|
||||
{ this->splice_after(prev_pos, static_cast<slist&>(x), prev); }
|
||||
|
||||
//! <b>Requires</b>: prev_pos must be a valid iterator of this.
|
||||
//! before_first and before_last must be valid iterators of x.
|
||||
//! prev_pos must not be contained in [before_first, before_last) range.
|
||||
//! this' allocator and x's allocator shall compare equal.
|
||||
//!
|
||||
//! <b>Effects</b>: Transfers the range [before_first + 1, before_last + 1)
|
||||
//! from list x to this list, after the element pointed by prev_pos.
|
||||
//!
|
||||
//! <b>Throws</b>: std::runtime_error if this' allocator and x's allocator
|
||||
//! are not equal.
|
||||
//! <b>Throws</b>: Nothing
|
||||
//!
|
||||
//! <b>Complexity</b>: Linear to the number of transferred elements.
|
||||
//!
|
||||
//! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
|
||||
//! list. Iterators of this list and all the references are not invalidated.
|
||||
void splice_after(const_iterator prev_pos, slist& x,
|
||||
const_iterator before_first, const_iterator before_last)
|
||||
const_iterator before_first, const_iterator before_last) BOOST_CONTAINER_NOEXCEPT
|
||||
{
|
||||
BOOST_ASSERT(*this != x);
|
||||
BOOST_ASSERT(this->node_alloc() == x.node_alloc());
|
||||
this->icont().splice_after
|
||||
(prev_pos.get(), x.icont(), before_first.get(), before_last.get());
|
||||
@@ -1073,31 +1065,31 @@ class slist
|
||||
//! <b>Requires</b>: prev_pos must be a valid iterator of this.
|
||||
//! before_first and before_last must be valid iterators of x.
|
||||
//! prev_pos must not be contained in [before_first, before_last) range.
|
||||
//! this' allocator and x's allocator shall compare equal.
|
||||
//!
|
||||
//! <b>Effects</b>: Transfers the range [before_first + 1, before_last + 1)
|
||||
//! from list x to this list, after the element pointed by prev_pos.
|
||||
//!
|
||||
//! <b>Throws</b>: std::runtime_error if this' allocator and x's allocator
|
||||
//! are not equal.
|
||||
//! <b>Throws</b>: Nothing
|
||||
//!
|
||||
//! <b>Complexity</b>: Linear to the number of transferred elements.
|
||||
//!
|
||||
//! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
|
||||
//! list. Iterators of this list and all the references are not invalidated.
|
||||
void splice_after(const_iterator prev_pos, BOOST_RV_REF(slist) x,
|
||||
const_iterator before_first, const_iterator before_last)
|
||||
const_iterator before_first, const_iterator before_last) BOOST_CONTAINER_NOEXCEPT
|
||||
{ this->splice_after(prev_pos, static_cast<slist&>(x), before_first, before_last); }
|
||||
|
||||
//! <b>Requires</b>: prev_pos must be a valid iterator of this.
|
||||
//! before_first and before_last must be valid iterators of x.
|
||||
//! prev_pos must not be contained in [before_first, before_last) range.
|
||||
//! n == std::distance(before_first, before_last)
|
||||
//! n == std::distance(before_first, before_last).
|
||||
//! this' allocator and x's allocator shall compare equal.
|
||||
//!
|
||||
//! <b>Effects</b>: Transfers the range [before_first + 1, before_last + 1)
|
||||
//! from list x to this list, after the element pointed by prev_pos.
|
||||
//!
|
||||
//! <b>Throws</b>: std::runtime_error if this' allocator and x's allocator
|
||||
//! are not equal.
|
||||
//! <b>Throws</b>: Nothing
|
||||
//!
|
||||
//! <b>Complexity</b>: Constant.
|
||||
//!
|
||||
@@ -1105,9 +1097,8 @@ class slist
|
||||
//! list. Iterators of this list and all the references are not invalidated.
|
||||
void splice_after(const_iterator prev_pos, slist& x,
|
||||
const_iterator before_first, const_iterator before_last,
|
||||
size_type n)
|
||||
size_type n) BOOST_CONTAINER_NOEXCEPT
|
||||
{
|
||||
BOOST_ASSERT(*this != x);
|
||||
BOOST_ASSERT(this->node_alloc() == x.node_alloc());
|
||||
this->icont().splice_after
|
||||
(prev_pos.get(), x.icont(), before_first.get(), before_last.get(), n);
|
||||
@@ -1116,13 +1107,13 @@ class slist
|
||||
//! <b>Requires</b>: prev_pos must be a valid iterator of this.
|
||||
//! before_first and before_last must be valid iterators of x.
|
||||
//! prev_pos must not be contained in [before_first, before_last) range.
|
||||
//! n == std::distance(before_first, before_last)
|
||||
//! n == std::distance(before_first, before_last).
|
||||
//! this' allocator and x's allocator shall compare equal.
|
||||
//!
|
||||
//! <b>Effects</b>: Transfers the range [before_first + 1, before_last + 1)
|
||||
//! from list x to this list, after the element pointed by prev_pos.
|
||||
//!
|
||||
//! <b>Throws</b>: std::runtime_error if this' allocator and x's allocator
|
||||
//! are not equal.
|
||||
//! <b>Throws</b>: Nothing
|
||||
//!
|
||||
//! <b>Complexity</b>: Constant.
|
||||
//!
|
||||
@@ -1130,7 +1121,7 @@ class slist
|
||||
//! list. Iterators of this list and all the references are not invalidated.
|
||||
void splice_after(const_iterator prev_pos, BOOST_RV_REF(slist) x,
|
||||
const_iterator before_first, const_iterator before_last,
|
||||
size_type n)
|
||||
size_type n) BOOST_CONTAINER_NOEXCEPT
|
||||
{ this->splice_after(prev_pos, static_cast<slist&>(x), before_first, before_last, n); }
|
||||
|
||||
//! <b>Effects</b>: Removes all the elements that compare equal to value.
|
||||
@@ -1163,9 +1154,9 @@ class slist
|
||||
//! <b>Effects</b>: Removes adjacent duplicate elements or adjacent
|
||||
//! elements that are equal from the list.
|
||||
//!
|
||||
//! <b>Throws</b>: Nothing.
|
||||
//! <b>Throws</b>: If comparison throws.
|
||||
//!
|
||||
//! <b>Complexity</b>: Linear time (size()-1 comparisons calls to pred()).
|
||||
//! <b>Complexity</b>: Linear time (size()-1 comparisons equality comparisons).
|
||||
//!
|
||||
//! <b>Note</b>: The relative order of elements that are not removed is unchanged,
|
||||
//! and iterators to elements that are not removed remain valid.
|
||||
@@ -1177,7 +1168,7 @@ class slist
|
||||
//!
|
||||
//! <b>Throws</b>: If pred throws.
|
||||
//!
|
||||
//! <b>Complexity</b>: Linear time (size()-1 comparisons equality comparisons).
|
||||
//! <b>Complexity</b>: Linear time (size()-1 comparisons calls to pred()).
|
||||
//!
|
||||
//! <b>Note</b>: The relative order of elements that are not removed is unchanged,
|
||||
//! and iterators to elements that are not removed remain valid.
|
||||
@@ -1195,7 +1186,7 @@ class slist
|
||||
//! that is, if an element from *this is equivalent to one from x, then the element
|
||||
//! from *this will precede the one from x.
|
||||
//!
|
||||
//! <b>Throws</b>: Nothing.
|
||||
//! <b>Throws</b>: If comparison throws.
|
||||
//!
|
||||
//! <b>Complexity</b>: This function is linear time: it performs at most
|
||||
//! size() + x.size() - 1 comparisons.
|
||||
@@ -1209,7 +1200,7 @@ class slist
|
||||
//! that is, if an element from *this is equivalent to one from x, then the element
|
||||
//! from *this will precede the one from x.
|
||||
//!
|
||||
//! <b>Throws</b>: Nothing.
|
||||
//! <b>Throws</b>: If comparison throws.
|
||||
//!
|
||||
//! <b>Complexity</b>: This function is linear time: it performs at most
|
||||
//! size() + x.size() - 1 comparisons.
|
||||
@@ -1224,7 +1215,7 @@ class slist
|
||||
//! in order into *this. The merge is stable; that is, if an element from *this is
|
||||
//! equivalent to one from x, then the element from *this will precede the one from x.
|
||||
//!
|
||||
//! <b>Throws</b>: Nothing.
|
||||
//! <b>Throws</b>: If comp throws.
|
||||
//!
|
||||
//! <b>Complexity</b>: This function is linear time: it performs at most
|
||||
//! size() + x.size() - 1 comparisons.
|
||||
@@ -1233,13 +1224,9 @@ class slist
|
||||
template <class StrictWeakOrdering>
|
||||
void merge(slist& x, StrictWeakOrdering comp)
|
||||
{
|
||||
if((NodeAlloc&)*this == (NodeAlloc&)x){
|
||||
this->icont().merge(x.icont(),
|
||||
ValueCompareToNodeCompare<StrictWeakOrdering>(comp));
|
||||
}
|
||||
else{
|
||||
throw std::runtime_error("list::merge called with unequal allocators");
|
||||
}
|
||||
BOOST_ASSERT(this->node_alloc() == x.node_alloc());
|
||||
this->icont().merge(x.icont(),
|
||||
ValueCompareToNodeCompare<StrictWeakOrdering>(comp));
|
||||
}
|
||||
|
||||
//! <b>Requires</b>: p must be a comparison function that induces a strict weak
|
||||
@@ -1250,7 +1237,7 @@ class slist
|
||||
//! in order into *this. The merge is stable; that is, if an element from *this is
|
||||
//! equivalent to one from x, then the element from *this will precede the one from x.
|
||||
//!
|
||||
//! <b>Throws</b>: Nothing.
|
||||
//! <b>Throws</b>: If comp throws.
|
||||
//!
|
||||
//! <b>Complexity</b>: This function is linear time: it performs at most
|
||||
//! size() + x.size() - 1 comparisons.
|
||||
@@ -1263,7 +1250,7 @@ class slist
|
||||
//! <b>Effects</b>: This function sorts the list *this according to std::less<value_type>.
|
||||
//! The sort is stable, that is, the relative order of equivalent elements is preserved.
|
||||
//!
|
||||
//! <b>Throws</b>: Nothing.
|
||||
//! <b>Throws</b>: If comparison throws.
|
||||
//!
|
||||
//! <b>Notes</b>: Iterators and references are not invalidated.
|
||||
//!
|
||||
@@ -1275,7 +1262,7 @@ class slist
|
||||
//! <b>Effects</b>: This function sorts the list *this according to std::less<value_type>.
|
||||
//! The sort is stable, that is, the relative order of equivalent elements is preserved.
|
||||
//!
|
||||
//! <b>Throws</b>: Nothing.
|
||||
//! <b>Throws</b>: If comp throws.
|
||||
//!
|
||||
//! <b>Notes</b>: Iterators and references are not invalidated.
|
||||
//!
|
||||
@@ -1297,7 +1284,7 @@ class slist
|
||||
//! <b>Complexity</b>: This function is linear time.
|
||||
//!
|
||||
//! <b>Note</b>: Iterators and references are not invalidated
|
||||
void reverse()
|
||||
void reverse() BOOST_CONTAINER_NOEXCEPT
|
||||
{ this->icont().reverse(); }
|
||||
|
||||
//////////////////////////////////////////////
|
||||
@@ -1403,7 +1390,7 @@ class slist
|
||||
//! <b>Throws</b>: Nothing.
|
||||
//!
|
||||
//! <b>Complexity</b>: Linear to the number of elements before p.
|
||||
iterator erase(const_iterator p)
|
||||
iterator erase(const_iterator p) BOOST_CONTAINER_NOEXCEPT
|
||||
{ return iterator(this->erase_after(previous(p))); }
|
||||
|
||||
//! <b>Requires</b>: first and last must be valid iterator to elements in *this.
|
||||
@@ -1414,73 +1401,71 @@ class slist
|
||||
//!
|
||||
//! <b>Complexity</b>: Linear to the distance between first and last plus
|
||||
//! linear to the elements before first.
|
||||
iterator erase(const_iterator first, const_iterator last)
|
||||
iterator erase(const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT
|
||||
{ return iterator(this->erase_after(previous(first), last)); }
|
||||
|
||||
//! <b>Requires</b>: p must point to an element contained
|
||||
//! by the list. x != *this
|
||||
//! by the list. x != *this. this' allocator and x's allocator shall compare equal
|
||||
//!
|
||||
//! <b>Effects</b>: Transfers all the elements of list x to this list, before the
|
||||
//! the element pointed by p. No destructors or copy constructors are called.
|
||||
//!
|
||||
//! <b>Throws</b>: std::runtime_error if this' allocator and x's allocator
|
||||
//! are not equal.
|
||||
//! <b>Throws</b>: Nothing
|
||||
//!
|
||||
//! <b>Complexity</b>: Linear in distance(begin(), p), and linear in x.size().
|
||||
//!
|
||||
//! <b>Note</b>: Iterators of values obtained from list x now point to elements of
|
||||
//! this list. Iterators of this list and all the references are not invalidated.
|
||||
void splice(const_iterator p, slist& x)
|
||||
void splice(const_iterator p, slist& x) BOOST_CONTAINER_NOEXCEPT
|
||||
{ this->splice_after(this->previous(p), x); }
|
||||
|
||||
//! <b>Requires</b>: p must point to an element contained
|
||||
//! by the list. x != *this
|
||||
//! by the list. x != *this. this' allocator and x's allocator shall compare equal
|
||||
//!
|
||||
//! <b>Effects</b>: Transfers all the elements of list x to this list, before the
|
||||
//! the element pointed by p. No destructors or copy constructors are called.
|
||||
//!
|
||||
//! <b>Throws</b>: std::runtime_error if this' allocator and x's allocator
|
||||
//! are not equal.
|
||||
//! <b>Throws</b>: Nothing
|
||||
//!
|
||||
//! <b>Complexity</b>: Linear in distance(begin(), p), and linear in x.size().
|
||||
//!
|
||||
//! <b>Note</b>: Iterators of values obtained from list x now point to elements of
|
||||
//! this list. Iterators of this list and all the references are not invalidated.
|
||||
void splice(const_iterator p, BOOST_RV_REF(slist) x)
|
||||
void splice(const_iterator p, BOOST_RV_REF(slist) x) BOOST_CONTAINER_NOEXCEPT
|
||||
{ this->splice(p, static_cast<slist&>(x)); }
|
||||
|
||||
//! <b>Requires</b>: p must point to an element contained
|
||||
//! by this list. i must point to an element contained in list x.
|
||||
//! this' allocator and x's allocator shall compare equal
|
||||
//!
|
||||
//! <b>Effects</b>: Transfers the value pointed by i, from list x to this list,
|
||||
//! before the the element pointed by p. No destructors or copy constructors are called.
|
||||
//! If p == i or p == ++i, this function is a null operation.
|
||||
//!
|
||||
//! <b>Throws</b>: std::runtime_error if this' allocator and x's allocator
|
||||
//! are not equal.
|
||||
//! <b>Throws</b>: Nothing
|
||||
//!
|
||||
//! <b>Complexity</b>: Linear in distance(begin(), p), and in distance(x.begin(), i).
|
||||
//!
|
||||
//! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
|
||||
//! list. Iterators of this list and all the references are not invalidated.
|
||||
void splice(const_iterator p, slist& x, const_iterator i)
|
||||
void splice(const_iterator p, slist& x, const_iterator i) BOOST_CONTAINER_NOEXCEPT
|
||||
{ this->splice_after(this->previous(p), x, this->previous(i)); }
|
||||
|
||||
//! <b>Requires</b>: p must point to an element contained
|
||||
//! by this list. i must point to an element contained in list x.
|
||||
//! this' allocator and x's allocator shall compare equal.
|
||||
//!
|
||||
//! <b>Effects</b>: Transfers the value pointed by i, from list x to this list,
|
||||
//! before the the element pointed by p. No destructors or copy constructors are called.
|
||||
//! If p == i or p == ++i, this function is a null operation.
|
||||
//!
|
||||
//! <b>Throws</b>: std::runtime_error if this' allocator and x's allocator
|
||||
//! are not equal.
|
||||
//! <b>Throws</b>: Nothing
|
||||
//!
|
||||
//! <b>Complexity</b>: Linear in distance(begin(), p), and in distance(x.begin(), i).
|
||||
//!
|
||||
//! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
|
||||
//! list. Iterators of this list and all the references are not invalidated.
|
||||
void splice(const_iterator p, BOOST_RV_REF(slist) x, const_iterator i)
|
||||
void splice(const_iterator p, BOOST_RV_REF(slist) x, const_iterator i) BOOST_CONTAINER_NOEXCEPT
|
||||
{ this->splice(p, static_cast<slist&>(x), i); }
|
||||
|
||||
//! <b>Requires</b>: p must point to an element contained
|
||||
@@ -1488,33 +1473,33 @@ class slist
|
||||
//!
|
||||
//! <b>Effects</b>: Transfers the range pointed by first and last from list x to this list,
|
||||
//! before the the element pointed by p. No destructors or copy constructors are called.
|
||||
//! this' allocator and x's allocator shall compare equal.
|
||||
//!
|
||||
//! <b>Throws</b>: std::runtime_error if this' allocator and x's allocator
|
||||
//! are not equal.
|
||||
//! <b>Throws</b>: Nothing
|
||||
//!
|
||||
//! <b>Complexity</b>: Linear in distance(begin(), p), in distance(x.begin(), first),
|
||||
//! and in distance(first, last).
|
||||
//!
|
||||
//! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
|
||||
//! list. Iterators of this list and all the references are not invalidated.
|
||||
void splice(const_iterator p, slist& x, const_iterator first, const_iterator last)
|
||||
void splice(const_iterator p, slist& x, const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT
|
||||
{ this->splice_after(this->previous(p), x, this->previous(first), this->previous(last)); }
|
||||
|
||||
//! <b>Requires</b>: p must point to an element contained
|
||||
//! by this list. first and last must point to elements contained in list x.
|
||||
//! this' allocator and x's allocator shall compare equal
|
||||
//!
|
||||
//! <b>Effects</b>: Transfers the range pointed by first and last from list x to this list,
|
||||
//! before the the element pointed by p. No destructors or copy constructors are called.
|
||||
//!
|
||||
//! <b>Throws</b>: std::runtime_error if this' allocator and x's allocator
|
||||
//! are not equal.
|
||||
//! <b>Throws</b>: Nothing
|
||||
//!
|
||||
//! <b>Complexity</b>: Linear in distance(begin(), p), in distance(x.begin(), first),
|
||||
//! and in distance(first, last).
|
||||
//!
|
||||
//! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
|
||||
//! list. Iterators of this list and all the references are not invalidated.
|
||||
void splice(const_iterator p, BOOST_RV_REF(slist) x, const_iterator first, const_iterator last)
|
||||
void splice(const_iterator p, BOOST_RV_REF(slist) x, const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT
|
||||
{ this->splice(p, static_cast<slist&>(x), first, last); }
|
||||
|
||||
/// @cond
|
||||
@@ -1658,15 +1643,14 @@ inline void swap(slist<T,Allocator>& x, slist<T,Allocator>& y)
|
||||
/// @cond
|
||||
|
||||
namespace boost {
|
||||
/*
|
||||
|
||||
//!has_trivial_destructor_after_move<> == true_type
|
||||
//!specialization for optimizations
|
||||
template <class T, class Allocator>
|
||||
struct has_trivial_destructor_after_move<boost::container::slist<T, Allocator> >
|
||||
{
|
||||
static const bool value = has_trivial_destructor<Allocator>::value;
|
||||
};
|
||||
*/
|
||||
: public ::boost::has_trivial_destructor_after_move<Allocator>
|
||||
{};
|
||||
|
||||
namespace container {
|
||||
|
||||
/// @endcond
|
||||
|
||||
Reference in new issue
Block a user