]> gcc.gnu.org Git - gcc.git/commitdiff
vector.tcc (vector<>::_M_insert_aux<>(iterator, _Args&&...)): In C++0x mode do not...
authorPaolo Carlini <pcarlini@suse.de>
Wed, 7 Nov 2007 00:36:33 +0000 (00:36 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Wed, 7 Nov 2007 00:36:33 +0000 (00:36 +0000)
2007-11-06  Paolo Carlini  <pcarlini@suse.de>

* include/bits/vector.tcc (vector<>::_M_insert_aux<>(iterator,
_Args&&...)): In C++0x mode do not use temporary copies.
(insert(iterator, const value_type&)): Copy to a temporary
when not reallocating.

* include/bits/vector.tcc (insert(iterator, value_type&&)):
Minor tweaks in C++0x mode.

From-SVN: r129954

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/vector.tcc

index 6dcaed004d3ca47a7ccd05985360673a7341b0c0..53d97a7ca0b260ee74c7b6a1cb4c8baa80aff877 100644 (file)
@@ -1,3 +1,13 @@
+2007-11-06  Paolo Carlini  <pcarlini@suse.de>
+
+       * include/bits/vector.tcc (vector<>::_M_insert_aux<>(iterator,
+       _Args&&...)): In C++0x mode do not use temporary copies.
+       (insert(iterator, const value_type&)): Copy to a temporary
+       when not reallocating.
+
+       * include/bits/vector.tcc (insert(iterator, value_type&&)):
+       Minor tweaks in C++0x mode.
+
 2007-11-06  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
        * include/tr1_impl/boost_shared_ptr.h: Avoid unnecessary memory
index b097f44d2851a84fe17d6c9d3e2e9a577b386d0a..2b5c4b7ffa5c09df6283a9e668dcc1062708a257 100644 (file)
@@ -101,7 +101,17 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
          ++this->_M_impl._M_finish;
        }
       else
-        _M_insert_aux(__position, __x);
+       {
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+         if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
+           {
+             _Tp __x_copy = __x;
+             _M_insert_aux(__position, std::move(__x_copy));
+           }
+         else
+#endif
+           _M_insert_aux(__position, __x);
+       }
       return iterator(this->_M_impl._M_start + __n);
     }
 
@@ -115,12 +125,11 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
       if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage
          && __position == end())
        {
-         this->_M_impl.construct(this->_M_impl._M_finish,
-                                 std::forward<value_type>(__x));
+         this->_M_impl.construct(this->_M_impl._M_finish, std::move(__x));
          ++this->_M_impl._M_finish;
        }
       else
-        _M_insert_aux(__position, std::forward<value_type>(__x));
+        _M_insert_aux(__position, std::move(__x));
       return iterator(this->_M_impl._M_start + __n);
     }
 #endif
@@ -286,15 +295,13 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
       void
       vector<_Tp, _Alloc>::
       _M_insert_aux(iterator __position, _Args&&... __args)
-      {
-       _Tp __x_copy(std::forward<_Args>(__args)...);
 #else
   template<typename _Tp, typename _Alloc>
     void
     vector<_Tp, _Alloc>::
     _M_insert_aux(iterator __position, const _Tp& __x)
-    {
 #endif
+    {
       if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
        {
          this->_M_impl.construct(this->_M_impl._M_finish,
@@ -307,7 +314,11 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
          _GLIBCXX_MOVE_BACKWARD3(__position.base(),
                                  this->_M_impl._M_finish - 2,
                                  this->_M_impl._M_finish - 1);
-         *__position = _GLIBCXX_MOVE(__x_copy);
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
+         *__position = __x_copy;
+#else
+         *__position = _Tp(std::forward<_Args>(__args)...);
+#endif
        }
       else
        {
@@ -317,13 +328,15 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
          pointer __new_finish(__new_start);
          try
            {
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+             this->_M_impl.construct(__new_start + (__position - begin()),
+                                     std::forward<_Args>(__args)...);
+#endif
              __new_finish =
                std::__uninitialized_move_a(this->_M_impl._M_start,
                                            __position.base(), __new_start,
                                            _M_get_Tp_allocator());
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-             this->_M_impl.construct(__new_finish, std::move(__x_copy));
-#else
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
              this->_M_impl.construct(__new_finish, __x);
 #endif
              ++__new_finish;
This page took 0.073937 seconds and 5 git commands to generate.