Commit 3c167a8b by Paolo Carlini Committed by Paolo Carlini

stl_algobase.h (struct __cm_assign, [...]): Add.

2007-10-19  Paolo Carlini  <pcarlini@suse.de>

	* include/bits/stl_algobase.h (struct __cm_assign,
	struct __copy_move, struct __copy_move_backward, move,
	move_backward): Add.
	(struct __copy, struct __copy_backward): Remove.
	(__copy_aux, __copy_backward_aux): Rename to...
	(__copy_move_a, __copy_move_backward_a): ... this, and
	adjust calls.
	(copy, copy_backward): Adjust calls.
	* include/bits/streambuf_iterator.h (__copy_aux): Rename
	to ...
	(__copy_move_a): ... this; add bool template parameter.
	* include/std/streambuf: Adjust friend declarations.
	* testsuite/util/testsuite_iterators.h
	(WritableObject<>::operator=(U&&)): Add.
	* testsuite/25_algorithms/move/1.cc: New.
	* testsuite/25_algorithms/move/requirements/
	explicit_instantiation/2.cc: Likewise.
	* testsuite/25_algorithms/move/requirements/
	explicit_instantiation/pod.cc: Likewise.
	* testsuite/25_algorithms/move_backward/1.cc: Likewise.
	* testsuite/25_algorithms/move_backward/requirements/
	explicit_instantiation/2.cc: Likewise.
	* testsuite/25_algorithms/move_backward/requirements/
	explicit_instantiation/pod.cc: Likewise.

From-SVN: r129492
parent 36784d0e
2007-10-19 Paolo Carlini <pcarlini@suse.de>
* include/bits/stl_algobase.h (struct __cm_assign,
struct __copy_move, struct __copy_move_backward, move,
move_backward): Add.
(struct __copy, struct __copy_backward): Remove.
(__copy_aux, __copy_backward_aux): Rename to...
(__copy_move_a, __copy_move_backward_a): ... this, and
adjust calls.
(copy, copy_backward): Adjust calls.
* include/bits/streambuf_iterator.h (__copy_aux): Rename
to ...
(__copy_move_a): ... this; add bool template parameter.
* include/std/streambuf: Adjust friend declarations.
* testsuite/util/testsuite_iterators.h
(WritableObject<>::operator=(U&&)): Add.
* testsuite/25_algorithms/move/1.cc: New.
* testsuite/25_algorithms/move/requirements/
explicit_instantiation/2.cc: Likewise.
* testsuite/25_algorithms/move/requirements/
explicit_instantiation/pod.cc: Likewise.
* testsuite/25_algorithms/move_backward/1.cc: Likewise.
* testsuite/25_algorithms/move_backward/requirements/
explicit_instantiation/2.cc: Likewise.
* testsuite/25_algorithms/move_backward/requirements/
explicit_instantiation/pod.cc: Likewise.
2007-10-18 Kaz Kojima <kkojima@gcc.gnu.org>
* testsuite/tr1/5_numerical_facilities/special_functions/
......
// Streambuf iterators
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
// 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
......@@ -67,11 +68,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>,
ostreambuf_iterator<_CharT2>);
template<typename _CharT2>
template<bool _IsCopy, typename _CharT2>
friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
_CharT2*>::__type
__copy_aux(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>,
_CharT2*);
__copy_move_a(istreambuf_iterator<_CharT2>,
istreambuf_iterator<_CharT2>, _CharT2*);
template<typename _CharT2>
friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
......@@ -291,11 +292,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
return __result;
}
template<typename _CharT>
template<bool _IsCopy, typename _CharT>
typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
ostreambuf_iterator<_CharT> >::__type
__copy_aux(_CharT* __first, _CharT* __last,
ostreambuf_iterator<_CharT> __result)
__copy_move_a(_CharT* __first, _CharT* __last,
ostreambuf_iterator<_CharT> __result)
{
const streamsize __num = __last - __first;
if (__num > 0)
......@@ -303,11 +304,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
return __result;
}
template<typename _CharT>
template<bool _IsCopy, typename _CharT>
typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
ostreambuf_iterator<_CharT> >::__type
__copy_aux(const _CharT* __first, const _CharT* __last,
ostreambuf_iterator<_CharT> __result)
__copy_move_a(const _CharT* __first, const _CharT* __last,
ostreambuf_iterator<_CharT> __result)
{
const streamsize __num = __last - __first;
if (__num > 0)
......@@ -315,11 +316,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
return __result;
}
template<typename _CharT>
template<bool _IsCopy, typename _CharT>
typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
_CharT*>::__type
__copy_aux(istreambuf_iterator<_CharT> __first,
istreambuf_iterator<_CharT> __last, _CharT* __result)
__copy_move_a(istreambuf_iterator<_CharT> __first,
istreambuf_iterator<_CharT> __last, _CharT* __result)
{
typedef istreambuf_iterator<_CharT> __is_iterator_type;
typedef typename __is_iterator_type::traits_type traits_type;
......
......@@ -155,11 +155,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
friend streamsize
__copy_streambufs_eof<>(__streambuf_type*, __streambuf_type*, bool&);
template<typename _CharT2>
template<bool _IsCopy, typename _CharT2>
friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
_CharT2*>::__type
__copy_aux(istreambuf_iterator<_CharT2>,
istreambuf_iterator<_CharT2>, _CharT2*);
__copy_move_a(istreambuf_iterator<_CharT2>,
istreambuf_iterator<_CharT2>, _CharT2*);
template<typename _CharT2>
friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
......
// { dg-options "-std=gnu++0x" }
// Copyright (C) 2007 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 Pred 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
#undef _GLIBCXX_CONCEPT_CHECKS
#define _GLIBCXX_TESTSUITE_ALLOW_RVALREF_ALIASING
#include <algorithm>
#include <testsuite_hooks.h>
#include <testsuite_iterators.h>
#include <testsuite_rvalref.h>
using __gnu_test::test_container;
using __gnu_test::input_iterator_wrapper;
using __gnu_test::output_iterator_wrapper;
using __gnu_test::rvalstruct;
using std::move;
typedef test_container<rvalstruct, input_iterator_wrapper> container_in;
typedef test_container<rvalstruct, output_iterator_wrapper> container_out;
void test01()
{
bool test __attribute__((unused)) = true;
int inarray[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
const int size = sizeof(inarray) / sizeof(int);
rvalstruct in[size], out[size];
std::copy(inarray, inarray + size, in);
std::fill(out, out + size, 0);
container_in incon(in, in + size);
container_out outcon(out, out + size);
move(incon.begin(), incon.end(), outcon.begin());
VERIFY( std::equal(out, out + size, inarray) );
for (int z = 0; z < size; ++z)
VERIFY( out[z].valid );
for (int z = 0; z < size; ++z)
VERIFY( !in[z].valid );
}
int main()
{
test01();
return 0;
}
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
// 2007-10-19 Paolo Carlini <pcarlini@suse.de>
// Copyright (C) 2007 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.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
// templates or use macros or inline functions from this file, or you compile
// this file and link it with other files to produce an executable, this
// file does not by itself cause the resulting executable to be covered by
// the GNU General Public License. This exception does not however
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
#include <algorithm>
#include <testsuite_api.h>
namespace std
{
using __gnu_test::NonDefaultConstructible;
typedef NonDefaultConstructible value_type;
typedef value_type* iterator_type;
template iterator_type move(iterator_type, iterator_type, iterator_type);
}
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
// 2007-10-19 Paolo Carlini <pcarlini@suse.de>
// Copyright (C) 2007 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.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
// templates or use macros or inline functions from this file, or you compile
// this file and link it with other files to produce an executable, this
// file does not by itself cause the resulting executable to be covered by
// the GNU General Public License. This exception does not however
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
#include <algorithm>
#include <testsuite_character.h>
namespace std
{
using __gnu_test::pod_int;
typedef pod_int value_type;
typedef value_type* iterator_type;
template iterator_type move(iterator_type, iterator_type, iterator_type);
}
// { dg-options "-std=gnu++0x" }
// Copyright (C) 2007 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 Pred 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.
#undef _GLIBCXX_CONCEPT_CHECKS
#define _GLIBCXX_TESTSUITE_ALLOW_RVALREF_ALIASING
#include <algorithm>
#include <testsuite_hooks.h>
#include <testsuite_iterators.h>
#include <testsuite_rvalref.h>
using __gnu_test::test_container;
using __gnu_test::bidirectional_iterator_wrapper;
using __gnu_test::rvalstruct;
using std::move_backward;
typedef test_container<rvalstruct,
bidirectional_iterator_wrapper> container_in;
typedef test_container<rvalstruct,
bidirectional_iterator_wrapper> container_out;
void test01()
{
bool test __attribute__((unused)) = true;
int inarray[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
const int size = sizeof(inarray) / sizeof(int);
rvalstruct in[size], out[size];
std::copy(inarray, inarray + size, in);
std::fill(out, out + size, 0);
container_in incon(in, in + size);
container_out outcon(out, out + size);
move_backward(incon.begin(), incon.end(), outcon.end());
VERIFY( std::equal(out, out + size, inarray) );
for (int z = 0; z < size; ++z)
VERIFY( out[z].valid );
for (int z = 0; z < size; ++z)
VERIFY( !in[z].valid );
}
int main()
{
test01();
return 0;
}
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
// 2007-10-19 Paolo Carlini <pcarlini@suse.de>
// Copyright (C) 2007 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.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
// templates or use macros or inline functions from this file, or you compile
// this file and link it with other files to produce an executable, this
// file does not by itself cause the resulting executable to be covered by
// the GNU General Public License. This exception does not however
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
#include <algorithm>
#include <testsuite_api.h>
namespace std
{
using __gnu_test::NonDefaultConstructible;
typedef NonDefaultConstructible value_type;
typedef value_type* iterator_type;
template iterator_type move_backward(iterator_type, iterator_type,
iterator_type);
}
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
// 2007-10-19 Paolo Carlini <pcarlini@suse.de>
// Copyright (C) 2007 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.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
// templates or use macros or inline functions from this file, or you compile
// this file and link it with other files to produce an executable, this
// file does not by itself cause the resulting executable to be covered by
// the GNU General Public License. This exception does not however
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
#include <algorithm>
#include <testsuite_character.h>
namespace std
{
using __gnu_test::pod_int;
typedef pod_int value_type;
typedef value_type* iterator_type;
template iterator_type move_backward(iterator_type, iterator_type,
iterator_type);
}
......@@ -38,6 +38,7 @@
#include <testsuite_hooks.h>
#include <bits/stl_iterator_base_types.h>
#include <bits/stl_move.h>
#ifndef _TESTSUITE_ITERATORS
#define _TESTSUITE_ITERATORS
......@@ -103,6 +104,17 @@ namespace __gnu_test
SharedInfo->writtento[ptr - SharedInfo->first] = 1;
*ptr = new_val;
}
#ifdef __GXX_EXPERIMENTAL_CXX0X__
template<class U>
void
operator=(U&& new_val)
{
ITERATOR_VERIFY(SharedInfo->writtento[ptr - SharedInfo->first] == 0);
SharedInfo->writtento[ptr - SharedInfo->first] = 1;
*ptr = std::move(new_val);
}
#endif
};
/**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment