diff options
| author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-11-11 11:46:10 +0000 |
|---|---|---|
| committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-11-11 11:46:10 +0000 |
| commit | 28d4f5d262ae9d43999545bbdfe4c1f228a72683 (patch) | |
| tree | 0184e79d28fd8a7efea4d00614f785f17738456f /libstdc++-v3/include/debug/list | |
| parent | f0c48ecc7783d07ebe5c769549161774cbcf83c3 (diff) | |
| download | ppe42-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/list | 58 |
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 |

