From 65b0413a1927d561d87fe6b0c2b440811014c835 Mon Sep 17 00:00:00 2001 From: Chris Fairles Date: Tue, 17 Jun 2008 21:33:15 +0000 Subject: [PATCH] stl_iterator_base_funcs.h (next, prev): Add in C++0x mode. 2008-06-17 Chris Fairles * include/bits/stl_iterator_base_funcs.h (next, prev): Add in C++0x mode. * testsuite/24_iterators/operations/next.cc: New. * testsuite/24_iterators/operations/prev.cc: Likewise. From-SVN: r136873 --- libstdc++-v3/ChangeLog | 7 +++ .../include/bits/stl_iterator_base_funcs.h | 22 +++++++- .../testsuite/24_iterators/operations/next.cc | 55 +++++++++++++++++++ .../testsuite/24_iterators/operations/prev.cc | 55 +++++++++++++++++++ 4 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 libstdc++-v3/testsuite/24_iterators/operations/next.cc create mode 100644 libstdc++-v3/testsuite/24_iterators/operations/prev.cc diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index bc9eefa1b74..5b2288613db 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2008-06-17 Chris Fairles + + * include/bits/stl_iterator_base_funcs.h (next, prev): Add in + C++0x mode. + * testsuite/24_iterators/operations/next.cc: New. + * testsuite/24_iterators/operations/prev.cc: Likewise. + 2008-06-17 Paolo Carlini * src/string_conversions.cc (__to_xstring<>): New. diff --git a/libstdc++-v3/include/bits/stl_iterator_base_funcs.h b/libstdc++-v3/include/bits/stl_iterator_base_funcs.h index dbdca22e6e9..2be3258c95a 100644 --- a/libstdc++-v3/include/bits/stl_iterator_base_funcs.h +++ b/libstdc++-v3/include/bits/stl_iterator_base_funcs.h @@ -1,6 +1,6 @@ // Functions used by iterators -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -177,6 +177,26 @@ _GLIBCXX_BEGIN_NAMESPACE(std) std::__advance(__i, __d, std::__iterator_category(__i)); } +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template + inline _InputIterator + next(_InputIterator __x, typename + iterator_traits<_InputIterator>::difference_type __n = 1) + { + std::advance(__x, __n); + return __x; + } + + template + inline _BidirectionalIterator + prev(_BidirectionalIterator __x, typename + iterator_traits<_BidirectionalIterator>::difference_type __n = 1) + { + std::advance(__x, -__n); + return __x; + } +#endif + _GLIBCXX_END_NAMESPACE #endif /* _STL_ITERATOR_BASE_FUNCS_H */ diff --git a/libstdc++-v3/testsuite/24_iterators/operations/next.cc b/libstdc++-v3/testsuite/24_iterators/operations/next.cc new file mode 100644 index 00000000000..53bc23d3f80 --- /dev/null +++ b/libstdc++-v3/testsuite/24_iterators/operations/next.cc @@ -0,0 +1,55 @@ +// { dg-options "-std=gnu++0x" } + +// 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. + +// 24.3.4 Iterator operations [iterator.operations] + +#include +#include +#include +#include + +void test01() +{ + bool test __attribute__((unused)) = true; + std::vector c(3); + std::vector::iterator i = c.begin(), j; + + j = std::next(i, 3); + VERIFY( i == c.begin() ); + VERIFY( j == c.end() ); +} + +void test02() +{ + bool test __attribute__((unused)) = true; + std::list c(3); + std::list::iterator i = c.begin(), j; + + j = std::next(i, 3); + VERIFY( i == c.begin() ); + VERIFY( j == c.end() ); +} + +int main() +{ + test01(); + test02(); + return 0; +} diff --git a/libstdc++-v3/testsuite/24_iterators/operations/prev.cc b/libstdc++-v3/testsuite/24_iterators/operations/prev.cc new file mode 100644 index 00000000000..3cc90cb4005 --- /dev/null +++ b/libstdc++-v3/testsuite/24_iterators/operations/prev.cc @@ -0,0 +1,55 @@ +// { dg-options "-std=gnu++0x" } + +// 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. + +// 24.3.4 Iterator operations [iterator.operations] + +#include +#include +#include +#include + +void test01() +{ + bool test __attribute__((unused)) = true; + std::vector c(3); + std::vector::iterator i = c.end(), j; + + j = std::prev(i, 3); + VERIFY( i == c.end() ); + VERIFY( j == c.begin() ); +} + +void test02() +{ + bool test __attribute__((unused)) = true; + std::list c(3); + std::list::iterator i = c.end(), j; + + j = std::prev(i, 3); + VERIFY( i == c.end() ); + VERIFY( j == c.begin() ); +} + +int main() +{ + test01(); + test02(); + return 0; +} -- 2.30.2