revert: re PR libstdc++/49561 ([C++0x] std::list::size complexity)

2012-07-02  Paolo Carlini  <paolo.carlini@oracle.com>

	Revert:
	2011-10-04  Paolo Carlini  <paolo.carlini@oracle.com>

	PR libstdc++/49561
	* include/bits/stl_list.h (_List_base<>::_List_impl::_M_size):
	Add in C++0x mode.
	(_List_base<>::_List_impl, _List_base<>::_M_get_node,
	_List_base<>::_M_put_node, _List_base<>::_List_base(_List_base&&),
	list<>::size, list<>::swap, list<>::splice): Use it.
	(operator==(const list<>&, const list<>&)): Rewrite in C++0x mode.
	* include/bits/list.tcc (list<>::erase): Likewise.
	(list<>::merge): Adjust in C++0x mode.
	* testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
	Adjust dg-error line number.
	* testsuite/23_containers/list/requirements/dr438/insert_neg.cc:
	Likewise.
	* testsuite/23_containers/list/requirements/dr438/
	constructor_1_neg.cc: Likewise.
	* testsuite/23_containers/list/requirements/dr438/
	constructor_2_neg.cc: Likewise.

From-SVN: r189185
This commit is contained in:
Paolo Carlini 2012-07-03 00:47:17 +00:00 committed by Paolo Carlini
parent eeddef55da
commit d695f91575
7 changed files with 50 additions and 87 deletions

View File

@ -1,3 +1,26 @@
2012-07-02 Paolo Carlini <paolo.carlini@oracle.com>
Revert:
2011-10-04 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/49561
* include/bits/stl_list.h (_List_base<>::_List_impl::_M_size):
Add in C++0x mode.
(_List_base<>::_List_impl, _List_base<>::_M_get_node,
_List_base<>::_M_put_node, _List_base<>::_List_base(_List_base&&),
list<>::size, list<>::swap, list<>::splice): Use it.
(operator==(const list<>&, const list<>&)): Rewrite in C++0x mode.
* include/bits/list.tcc (list<>::erase): Likewise.
(list<>::merge): Adjust in C++0x mode.
* testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
Adjust dg-error line number.
* testsuite/23_containers/list/requirements/dr438/insert_neg.cc:
Likewise.
* testsuite/23_containers/list/requirements/dr438/
constructor_1_neg.cc: Likewise.
* testsuite/23_containers/list/requirements/dr438/
constructor_2_neg.cc: Likewise.
2012-06-27 Benjamin Kosnik <bkoz@redhat.com>
* include/bits/c++config: Remove __regex nested namespace.

View File

@ -1,7 +1,7 @@
// List implementation (out of line) -*- C++ -*-
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
// 2011 Free Software Foundation, Inc.
// 2011, 2012 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@ -139,14 +139,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
list<_Tp, _Alloc>::
resize(size_type __new_size)
{
if (__new_size > size())
_M_default_append(__new_size - size());
else if (__new_size < size())
{
iterator __i = begin();
std::advance(__i, __new_size);
erase(__i, end());
}
iterator __i = begin();
size_type __len = 0;
for (; __i != end() && __len < __new_size; ++__i, ++__len)
;
if (__len == __new_size)
erase(__i, end());
else // __i == end()
_M_default_append(__new_size - __len);
}
template<typename _Tp, typename _Alloc>
@ -154,14 +154,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
list<_Tp, _Alloc>::
resize(size_type __new_size, const value_type& __x)
{
if (__new_size > size())
insert(end(), __new_size - size(), __x);
else if (__new_size < size())
{
iterator __i = begin();
std::advance(__i, __new_size);
erase(__i, end());
}
iterator __i = begin();
size_type __len = 0;
for (; __i != end() && __len < __new_size; ++__i, ++__len)
;
if (__len == __new_size)
erase(__i, end());
else // __i == end()
insert(end(), __new_size - __len, __x);
}
#else
template<typename _Tp, typename _Alloc>
@ -312,11 +312,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
++__first1;
if (__first2 != __last2)
_M_transfer(__last1, __first2, __last2);
#ifdef __GXX_EXPERIMENTAL_CXX0X__
this->_M_impl._M_size += __x.size();
__x._M_impl._M_size = 0;
#endif
}
}
@ -351,11 +346,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
++__first1;
if (__first2 != __last2)
_M_transfer(__last1, __first2, __last2);
#ifdef __GXX_EXPERIMENTAL_CXX0X__
this->_M_impl._M_size += __x.size();
__x._M_impl._M_size = 0;
#endif
}
}

View File

@ -313,10 +313,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{
__detail::_List_node_base _M_node;
#ifdef __GXX_EXPERIMENTAL_CXX0X__
size_t _M_size = 0;
#endif
_List_impl()
: _Node_alloc_type(), _M_node()
{ }
@ -336,23 +332,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_List_node<_Tp>*
_M_get_node()
{
_List_node<_Tp>* __tmp = _M_impl._Node_alloc_type::allocate(1);
#ifdef __GXX_EXPERIMENTAL_CXX0X__
++_M_impl._M_size;
#endif
return __tmp;
}
{ return _M_impl._Node_alloc_type::allocate(1); }
void
_M_put_node(_List_node<_Tp>* __p)
{
_M_impl._Node_alloc_type::deallocate(__p, 1);
#ifdef __GXX_EXPERIMENTAL_CXX0X__
--_M_impl._M_size;
#endif
}
{ _M_impl._Node_alloc_type::deallocate(__p, 1); }
public:
typedef _Alloc allocator_type;
@ -386,7 +371,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{
_M_init();
__detail::_List_node_base::swap(_M_impl._M_node, __x._M_impl._M_node);
std::swap(_M_impl._M_size, __x._M_impl._M_size);
}
#endif
@ -888,13 +872,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
/** Returns the number of elements in the %list. */
size_type
size() const _GLIBCXX_NOEXCEPT
{
#ifdef __GXX_EXPERIMENTAL_CXX0X__
return this->_M_impl._M_size;
#else
return std::distance(begin(), end());
#endif
}
{ return std::distance(begin(), end()); }
/** Returns the size() of the largest possible %list. */
size_type
@ -1234,9 +1212,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
{
__detail::_List_node_base::swap(this->_M_impl._M_node,
__x._M_impl._M_node);
#ifdef __GXX_EXPERIMENTAL_CXX0X__
std::swap(this->_M_impl._M_size, __x._M_impl._M_size);
#endif
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 431. Swapping containers with unequal allocators.
@ -1281,11 +1256,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_M_check_equal_allocators(__x);
this->_M_transfer(__position, __x.begin(), __x.end());
#ifdef __GXX_EXPERIMENTAL_CXX0X__
this->_M_impl._M_size += __x.size();
__x._M_impl._M_size = 0;
#endif
}
}
@ -1317,14 +1287,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
return;
if (this != &__x)
{
_M_check_equal_allocators(__x);
#ifdef __GXX_EXPERIMENTAL_CXX0X__
++this->_M_impl._M_size;
--__x._M_impl._M_size;
#endif
}
_M_check_equal_allocators(__x);
this->_M_transfer(__position, __i, __j);
}
@ -1359,15 +1322,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
if (__first != __last)
{
if (this != &__x)
{
_M_check_equal_allocators(__x);
#ifdef __GXX_EXPERIMENTAL_CXX0X__
const size_type __size = std::distance(__first, __last);
this->_M_impl._M_size += __size;
__x._M_impl._M_size -= __size;
#endif
}
_M_check_equal_allocators(__x);
this->_M_transfer(__position, __first, __last);
}
@ -1643,10 +1598,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
inline bool
operator==(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
{
#ifdef __GXX_EXPERIMENTAL_CXX0X__
return (__x.size() == __y.size()
&& std::equal(__x.begin(), __x.end(), __y.begin()));
#else
typedef typename list<_Tp, _Alloc>::const_iterator const_iterator;
const_iterator __end1 = __x.end();
const_iterator __end2 = __y.end();
@ -1659,7 +1610,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
++__i2;
}
return __i1 == __end1 && __i2 == __end2;
#endif
}
/**

View File

@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
// { dg-error "no matching" "" { target *-*-* } 1571 }
// { dg-error "no matching" "" { target *-*-* } 1526 }
#include <list>

View File

@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
// { dg-error "no matching" "" { target *-*-* } 1527 }
// { dg-error "no matching" "" { target *-*-* } 1482 }
#include <list>

View File

@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
// { dg-error "no matching" "" { target *-*-* } 1527 }
// { dg-error "no matching" "" { target *-*-* } 1482 }
#include <list>
#include <utility>

View File

@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
// { dg-error "no matching" "" { target *-*-* } 1527 }
// { dg-error "no matching" "" { target *-*-* } 1482 }
#include <list>