diff options
author | Chris Fairles <chris.fairles@gmail.com> | 2008-06-17 21:33:15 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2008-06-17 21:33:15 +0000 |
commit | 65b0413a1927d561d87fe6b0c2b440811014c835 (patch) | |
tree | 66a9c270c3dd3066c44c91de51874dd25fcbf2f4 | |
parent | 88fec49fbb65368451cde61064b45d3ce12a29b8 (diff) | |
download | gcc-65b0413a1927d561d87fe6b0c2b440811014c835.zip gcc-65b0413a1927d561d87fe6b0c2b440811014c835.tar.gz gcc-65b0413a1927d561d87fe6b0c2b440811014c835.tar.bz2 |
stl_iterator_base_funcs.h (next, prev): Add in C++0x mode.
2008-06-17 Chris Fairles <chris.fairles@gmail.com>
* 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
-rw-r--r-- | libstdc++-v3/ChangeLog | 7 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_iterator_base_funcs.h | 22 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/24_iterators/operations/next.cc | 55 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/24_iterators/operations/prev.cc | 55 |
4 files changed, 138 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index bc9eefa..5b22886 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2008-06-17 Chris Fairles <chris.fairles@gmail.com> + + * 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 <paolo.carlini@oracle.com> * 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 dbdca22..2be3258 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<typename _InputIterator> + inline _InputIterator + next(_InputIterator __x, typename + iterator_traits<_InputIterator>::difference_type __n = 1) + { + std::advance(__x, __n); + return __x; + } + + template<typename _BidirectionalIterator> + 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 0000000..53bc23d --- /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 <vector> +#include <list> +#include <iterator> +#include <testsuite_hooks.h> + +void test01() +{ + bool test __attribute__((unused)) = true; + std::vector<int> c(3); + std::vector<int>::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<int> c(3); + std::list<int>::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 0000000..3cc90cb --- /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 <vector> +#include <list> +#include <iterator> +#include <testsuite_hooks.h> + +void test01() +{ + bool test __attribute__((unused)) = true; + std::vector<int> c(3); + std::vector<int>::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<int> c(3); + std::list<int>::iterator i = c.end(), j; + + j = std::prev(i, 3); + VERIFY( i == c.end() ); + VERIFY( j == c.begin() ); +} + +int main() +{ + test01(); + test02(); + return 0; +} |