From: Stefano Soffia Date: Mon, 12 May 2008 10:15:34 +0000 (+0200) Subject: vector (vector<>::_M_requires_reallocation): Just use this->capacity(). X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2028b66d86a328f2e15bf5bd2077b5cdb9bb8f93;p=gcc.git vector (vector<>::_M_requires_reallocation): Just use this->capacity(). 2008-05-12 Stefano Soffia Paolo Carlini * include/debug/vector (vector<>::_M_requires_reallocation): Just use this->capacity(). (vector<>::capacity): Move non-pedantic / pedantic logic here. * testsuite/23_containers/vector/ debug_mode_requires_reallocation-2.cc: New. * testsuite/23_containers/vector/debug_mode_requires_reallocation.cc: Rename to debug_mode_requires_reallocation-1.cc Co-Authored-By: Paolo Carlini From-SVN: r135208 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index b64bb7e4384..b81746e86ec 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,15 @@ +2008-05-12 Stefano Soffia + Paolo Carlini + + * include/debug/vector (vector<>::_M_requires_reallocation): Just + use this->capacity(). + (vector<>::capacity): Move non-pedantic / pedantic logic here. + * testsuite/23_containers/vector/ + debug_mode_requires_reallocation-2.cc: New. + + * testsuite/23_containers/vector/debug_mode_requires_reallocation.cc: + Rename to debug_mode_requires_reallocation-1.cc + 2008-05-10 Roberto Bagnara Paolo Carlini diff --git a/libstdc++-v3/include/debug/vector b/libstdc++-v3/include/debug/vector index a588ca8f104..7945b54591e 100644 --- a/libstdc++-v3/include/debug/vector +++ b/libstdc++-v3/include/debug/vector @@ -216,7 +216,16 @@ namespace __debug this->_M_invalidate_all(); } - using _Base::capacity; + size_type + capacity() const + { +#ifdef _GLIBCXX_DEBUG_PEDANTIC + return _M_guaranteed_capacity; +#else + return _Base::capacity(); +#endif + } + using _Base::empty; void @@ -442,13 +451,7 @@ namespace __debug bool _M_requires_reallocation(size_type __elements) - { -#ifndef _GLIBCXX_DEBUG_PEDANTIC - return __elements > this->capacity(); -#else - return __elements > _M_guaranteed_capacity; -#endif - } + { return __elements > this->capacity(); } void _M_update_guaranteed_capacity() diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug_mode_requires_reallocation-1.cc b/libstdc++-v3/testsuite/23_containers/vector/debug_mode_requires_reallocation-1.cc new file mode 100644 index 00000000000..079a70f497b --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/vector/debug_mode_requires_reallocation-1.cc @@ -0,0 +1,51 @@ +// Copyright (C) 2008 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 +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +// USA. + +// { dg-options "-D_GLIBCXX_DEBUG" } + +#include +#include +#include + +// http://gcc.gnu.org/ml/libstdc++/2008-05/msg00039.html +void test01() +{ + typedef std::vector array_t; + typedef std::back_insert_iterator bii_t; + + array_t a; + + // Push 5 elements. + a.push_back(0); + a.push_back(1); + a.push_back(2); + a.push_back(3); + a.push_back(4); + // Ensure that there is enough space for other two elements. + // (2 + 5 = 7) + if (a.capacity() < 7) + a.reserve(7); + // Add two new elements. + std::copy(a.begin(), a.begin() + 2, bii_t(a)); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug_mode_requires_reallocation-2.cc b/libstdc++-v3/testsuite/23_containers/vector/debug_mode_requires_reallocation-2.cc new file mode 100644 index 00000000000..a09be47fd17 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/vector/debug_mode_requires_reallocation-2.cc @@ -0,0 +1,51 @@ +// Copyright (C) 2008 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 +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 2, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +// USA. + +// { dg-options "-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC" } + +#include +#include +#include + +// http://gcc.gnu.org/ml/libstdc++/2008-05/msg00046.html +void test01() +{ + typedef std::vector array_t; + typedef std::back_insert_iterator bii_t; + + array_t a; + + // Push 5 elements. + a.push_back(0); + a.push_back(1); + a.push_back(2); + a.push_back(3); + a.push_back(4); + // Ensure that there is enough space for other two elements. + // (2 + 5 = 7) + if (a.capacity() < 7) + a.reserve(7); + // Add two new elements. + std::copy(a.begin(), a.begin() + 2, bii_t(a)); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug_mode_requires_reallocation.cc b/libstdc++-v3/testsuite/23_containers/vector/debug_mode_requires_reallocation.cc deleted file mode 100644 index 079a70f497b..00000000000 --- a/libstdc++-v3/testsuite/23_containers/vector/debug_mode_requires_reallocation.cc +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (C) 2008 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 -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -// USA. - -// { dg-options "-D_GLIBCXX_DEBUG" } - -#include -#include -#include - -// http://gcc.gnu.org/ml/libstdc++/2008-05/msg00039.html -void test01() -{ - typedef std::vector array_t; - typedef std::back_insert_iterator bii_t; - - array_t a; - - // Push 5 elements. - a.push_back(0); - a.push_back(1); - a.push_back(2); - a.push_back(3); - a.push_back(4); - // Ensure that there is enough space for other two elements. - // (2 + 5 = 7) - if (a.capacity() < 7) - a.reserve(7); - // Add two new elements. - std::copy(a.begin(), a.begin() + 2, bii_t(a)); -} - -int main() -{ - test01(); - return 0; -}