summaryrefslogtreecommitdiffstats
path: root/libstdc++-v3/include/debug/vector
diff options
context:
space:
mode:
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2007-11-05 19:46:07 +0000
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2007-11-05 19:46:07 +0000
commitf7dcde8abdf70c559837f0e4c24146fb75998e6e (patch)
tree01d64cc281df436959d334dee7ca39fcc4c91e94 /libstdc++-v3/include/debug/vector
parent1891b5fbbccd00e7544d03624cbb96801328f2fa (diff)
downloadppe42-gcc-f7dcde8abdf70c559837f0e4c24146fb75998e6e.tar.gz
ppe42-gcc-f7dcde8abdf70c559837f0e4c24146fb75998e6e.zip
2007-11-05 Chris Jefferson <chris@bubblescope.net>
Paolo Carlini <pcarlini@suse.de> * include/bits/stl_vector.h (vector<>::push_back<>(_Args...), emplace<>(iterator, _Args...), insert(iterator, _Tp&&), _M_insert_aux<>(iterator, _Args&&...)): Add. * include/bits/vector.tcc (insert(iterator, value_type&&), emplace<>(iterator, _Args...), _M_insert_aux<>(iterator, _Args&&...)): Define. (_M_fill_insert(iterator, size_type, const value_type&), _M_range_insert(iterator, _ForwardIterator, _ForwardIterator, std::forward_iterator_tag)): Use __uninitialized_move_a, _GLIBCXX_MOVE_BACKWARD3 when possible. * include/bits/stl_uninitialized.h (__uninitialized_move_a): Add. * include/debug/vector (vector<>::push_back<>(_Args...), emplace<>(iterator, _Args...), insert(iterator, _Tp&&)): Add. * testsuite/23_containers/vector/modifiers/moveable.cc: Enable. * testsuite/23_containers/vector/resize/moveable.cc: Likewise. * testsuite/23_containers/vector/cons/moveable.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: Adjust dg-error line numbers. * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/ constructor_1_neg.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/ constructor_2_neg.cc: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@129907 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/debug/vector')
-rw-r--r--libstdc++-v3/include/debug/vector50
1 files changed, 50 insertions, 0 deletions
diff --git a/libstdc++-v3/include/debug/vector b/libstdc++-v3/include/debug/vector
index ce44241004b..977fbbd9cee 100644
--- a/libstdc++-v3/include/debug/vector
+++ b/libstdc++-v3/include/debug/vector
@@ -278,6 +278,7 @@ namespace __debug
using _Base::data;
// 23.2.4.3 modifiers:
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
void
push_back(const _Tp& __x)
{
@@ -287,6 +288,18 @@ namespace __debug
this->_M_invalidate_all();
_M_update_guaranteed_capacity();
}
+#else
+ template<typename... _Args>
+ void
+ push_back(_Args... __args)
+ {
+ bool __realloc = _M_requires_reallocation(this->size() + 1);
+ _Base::push_back(std::forward<_Args>(__args)...);
+ if (__realloc)
+ this->_M_invalidate_all();
+ _M_update_guaranteed_capacity();
+ }
+#endif
void
pop_back()
@@ -297,6 +310,25 @@ namespace __debug
_Base::pop_back();
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename... _Args>
+ iterator
+ emplace(iterator __position, _Args... __args)
+ {
+ __glibcxx_check_insert(__position);
+ bool __realloc = _M_requires_reallocation(this->size() + 1);
+ difference_type __offset = __position - begin();
+ typename _Base::iterator __res = _Base::emplace(__position.base(),
+ std::forward<_Args>(__args)...);
+ if (__realloc)
+ this->_M_invalidate_all();
+ else
+ this->_M_invalidate_if(_After_nth(__offset, _M_base().begin()));
+ _M_update_guaranteed_capacity();
+ return iterator(__res, this);
+ }
+#endif
+
iterator
insert(iterator __position, const _Tp& __x)
{
@@ -312,6 +344,24 @@ namespace __debug
return iterator(__res, this);
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ iterator
+ insert(iterator __position, _Tp&& __x)
+ {
+ __glibcxx_check_insert(__position);
+ bool __realloc = _M_requires_reallocation(this->size() + 1);
+ difference_type __offset = __position - begin();
+ typename _Base::iterator __res = _Base::insert(__position.base(),
+ std::forward<_Tp>(__x));
+ if (__realloc)
+ this->_M_invalidate_all();
+ else
+ this->_M_invalidate_if(_After_nth(__offset, _M_base().begin()));
+ _M_update_guaranteed_capacity();
+ return iterator(__res, this);
+ }
+#endif
+
void
insert(iterator __position, size_type __n, const _Tp& __x)
{
OpenPOWER on IntegriCloud