summaryrefslogtreecommitdiffstats
path: root/libstdc++-v3/include/debug/list
diff options
context:
space:
mode:
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2007-11-11 11:46:10 +0000
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2007-11-11 11:46:10 +0000
commit28d4f5d262ae9d43999545bbdfe4c1f228a72683 (patch)
tree0184e79d28fd8a7efea4d00614f785f17738456f /libstdc++-v3/include/debug/list
parentf0c48ecc7783d07ebe5c769549161774cbcf83c3 (diff)
downloadppe42-gcc-28d4f5d262ae9d43999545bbdfe4c1f228a72683.tar.gz
ppe42-gcc-28d4f5d262ae9d43999545bbdfe4c1f228a72683.zip
2007-11-11 Paolo Carlini <pcarlini@suse.de>
* include/bits/stl_list.h (list<>::_M_create_node<>(_Args&&...), _M_insert<>(iterator, _Args&&...), push_front<>(_Args&&...), push_back<>(_Args&&...)): Add. (list<>::emplace<>(iterator, _Args&&...), insert(iterator, value_type&&)): Declare. (splice(iterator, list&&), splice(iterator, list&&, iterator), splice(iterator, list&&, iterator, iterator), merge(list&&), merge(list&&, _StrictWeakOrdering)): Add C++0x signatures. * include/bits/list.tcc (list<>::emplace<>(iterator, _Args&&...), insert(iterator, value_type&&)): Define. * include/debug/list (list<>::emplace<>(iterator, _Args&&...), insert(iterator, value_type&&)): Add. (splice(iterator, list&&), splice(iterator, list&&, iterator), splice(iterator, list&&, iterator, iterator), merge(list&&), merge(list&&, _StrictWeakOrdering)): Add C++0x signatures, use _GLIBCXX_MOVE. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130082 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/debug/list')
-rw-r--r--libstdc++-v3/include/debug/list58
1 files changed, 51 insertions, 7 deletions
diff --git a/libstdc++-v3/include/debug/list b/libstdc++-v3/include/debug/list
index 9e78fc94c52..9b7f33bf4ca 100644
--- a/libstdc++-v3/include/debug/list
+++ b/libstdc++-v3/include/debug/list
@@ -301,6 +301,17 @@ namespace __debug
_Base::pop_back();
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename... _Args>
+ iterator
+ emplace(iterator __position, _Args&&... __args)
+ {
+ __glibcxx_check_insert(__position);
+ return iterator(_Base::emplace(__position.base(),
+ std::forward<_Args>(__args)...), this);
+ }
+#endif
+
iterator
insert(iterator __position, const _Tp& __x)
{
@@ -308,6 +319,16 @@ namespace __debug
return iterator(_Base::insert(__position.base(), __x), this);
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ iterator
+ insert(iterator __position, _Tp&& __x)
+ {
+ __glibcxx_check_insert(__position);
+ return iterator(_Base::insert(__position.base(),
+ std::move(__x)), this);
+ }
+#endif
+
void
insert(iterator __position, size_type __n, const _Tp& __x)
{
@@ -367,16 +388,24 @@ namespace __debug
// 23.2.2.4 list operations:
void
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ splice(iterator __position, list&& __x)
+#else
splice(iterator __position, list& __x)
+#endif
{
_GLIBCXX_DEBUG_VERIFY(&__x != this,
_M_message(__gnu_debug::__msg_self_splice)
._M_sequence(*this, "this"));
- this->splice(__position, __x, __x.begin(), __x.end());
+ this->splice(__position, _GLIBCXX_MOVE(__x), __x.begin(), __x.end());
}
void
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ splice(iterator __position, list&& __x, iterator __i)
+#else
splice(iterator __position, list& __x, iterator __i)
+#endif
{
__glibcxx_check_insert(__position);
@@ -393,11 +422,18 @@ namespace __debug
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 250. splicing invalidates iterators
this->_M_transfer_iter(__i);
- _Base::splice(__position.base(), __x._M_base(), __i.base());
+ _Base::splice(__position.base(), _GLIBCXX_MOVE(__x._M_base()),
+ __i.base());
}
void
- splice(iterator __position, list& __x, iterator __first, iterator __last)
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ splice(iterator __position, list&& __x, iterator __first,
+ iterator __last)
+#else
+ splice(iterator __position, list& __x, iterator __first,
+ iterator __last)
+#endif
{
__glibcxx_check_insert(__position);
__glibcxx_check_valid_range(__first, __last);
@@ -422,8 +458,8 @@ namespace __debug
this->_M_transfer_iter(__victim);
}
- _Base::splice(__position.base(), __x._M_base(), __first.base(),
- __last.base());
+ _Base::splice(__position.base(), _GLIBCXX_MOVE(__x._M_base()),
+ __first.base(), __last.base());
}
void
@@ -489,7 +525,11 @@ namespace __debug
}
void
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ merge(list&& __x)
+#else
merge(list& __x)
+#endif
{
__glibcxx_check_sorted(_Base::begin(), _Base::end());
__glibcxx_check_sorted(__x.begin().base(), __x.end().base());
@@ -498,12 +538,16 @@ namespace __debug
iterator __victim = __tmp++;
__victim._M_attach(&__x);
}
- _Base::merge(__x._M_base());
+ _Base::merge(_GLIBCXX_MOVE(__x._M_base()));
}
template<class _Compare>
void
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ merge(list&& __x, _Compare __comp)
+#else
merge(list& __x, _Compare __comp)
+#endif
{
__glibcxx_check_sorted_pred(_Base::begin(), _Base::end(), __comp);
__glibcxx_check_sorted_pred(__x.begin().base(), __x.end().base(),
@@ -513,7 +557,7 @@ namespace __debug
iterator __victim = __tmp++;
__victim._M_attach(&__x);
}
- _Base::merge(__x._M_base(), __comp);
+ _Base::merge(_GLIBCXX_MOVE(__x._M_base()), __comp);
}
void
OpenPOWER on IntegriCloud