re PR libstdc++/48848 ([C++0x] std::valarray<T> functions missing)
2011-05-03 Paolo Carlini <paolo.carlini@oracle.com> PR libstdc++/48848 * include/std/valarray (valarray<>::valarray(valarray&&), valarray<>::operator=(valarray&&), valarray<>::swap): Add. * doc/xml/manual/status_cxx200x.xml: Update. * testsuite/26_numerics/valarray/moveable.cc: New. * testsuite/26_numerics/valarray/swap.cc: Likewise. From-SVN: r173344
This commit is contained in:
parent
f437d56e2f
commit
8a3cabe30f
@ -1,3 +1,12 @@
|
||||
2011-05-03 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR libstdc++/48848
|
||||
* include/std/valarray (valarray<>::valarray(valarray&&),
|
||||
valarray<>::operator=(valarray&&), valarray<>::swap): Add.
|
||||
* doc/xml/manual/status_cxx200x.xml: Update.
|
||||
* testsuite/26_numerics/valarray/moveable.cc: New.
|
||||
* testsuite/26_numerics/valarray/swap.cc: Likewise.
|
||||
|
||||
2011-05-03 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR libstdc++/48750
|
||||
|
@ -1960,11 +1960,10 @@ particular release.
|
||||
<entry/>
|
||||
</row>
|
||||
<row>
|
||||
<?dbhtml bgcolor="#B0B0B0" ?>
|
||||
<entry>26.6.2</entry>
|
||||
<entry>Class template <code>valarray</code></entry>
|
||||
<entry>Partial</entry>
|
||||
<entry>Missing move and swap operations</entry>
|
||||
<entry>Y</entry>
|
||||
<entry/>
|
||||
</row>
|
||||
<row>
|
||||
<entry>26.6.3</entry>
|
||||
|
@ -1,7 +1,7 @@
|
||||
// The template and inlines for the -*- C++ -*- valarray class.
|
||||
|
||||
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||
// 2006, 2007, 2008, 2009, 2010
|
||||
// 2006, 2007, 2008, 2009, 2010, 2011
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
@ -140,6 +140,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
/// Copy constructor.
|
||||
valarray(const valarray&);
|
||||
|
||||
#ifdef __GXX_EXPERIMENTAL_CXX0X__
|
||||
/// Move constructor.
|
||||
valarray(valarray&&) noexcept;
|
||||
#endif
|
||||
|
||||
/// Construct an array with the same size and values in @a sa.
|
||||
valarray(const slice_array<_Tp>&);
|
||||
|
||||
@ -166,13 +171,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
/**
|
||||
* @brief Assign elements to an array.
|
||||
*
|
||||
* Assign elements of array to values in @a v. Results are undefined
|
||||
* if @a v does not have the same size as this array.
|
||||
* Assign elements of array to values in @a v.
|
||||
*
|
||||
* @param v Valarray to get values from.
|
||||
*/
|
||||
valarray<_Tp>& operator=(const valarray<_Tp>&);
|
||||
|
||||
#ifdef __GXX_EXPERIMENTAL_CXX0X__
|
||||
/**
|
||||
* @brief Move assign elements to an array.
|
||||
*
|
||||
* Move assign elements of array to values in @a v.
|
||||
*
|
||||
* @param v Valarray to get values from.
|
||||
*/
|
||||
valarray<_Tp>& operator=(valarray<_Tp>&&) noexcept;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Assign elements to a value.
|
||||
*
|
||||
@ -450,6 +465,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
valarray<_Tp>& operator>>=(const _Expr<_Dom, _Tp>&);
|
||||
|
||||
// _lib.valarray.members_ member functions:
|
||||
#ifdef __GXX_EXPERIMENTAL_CXX0X__
|
||||
/// Swap.
|
||||
void swap(valarray<_Tp>& __v) noexcept;
|
||||
#endif
|
||||
|
||||
/// Return the number of elements in array.
|
||||
size_t size() const;
|
||||
|
||||
@ -612,6 +632,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
{ std::__valarray_copy_construct(__v._M_data, __v._M_data + _M_size,
|
||||
_M_data); }
|
||||
|
||||
#ifdef __GXX_EXPERIMENTAL_CXX0X__
|
||||
template<typename _Tp>
|
||||
inline
|
||||
valarray<_Tp>::valarray(valarray<_Tp>&& __v) noexcept
|
||||
: _M_size(__v._M_size), _M_data(__v._M_data)
|
||||
{
|
||||
__v._M_size = 0;
|
||||
__v._M_data = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
template<typename _Tp>
|
||||
inline
|
||||
valarray<_Tp>::valarray(const slice_array<_Tp>& __sa)
|
||||
@ -655,7 +686,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
inline
|
||||
valarray<_Tp>::valarray(initializer_list<_Tp> __l)
|
||||
: _M_size(__l.size()), _M_data(__valarray_get_storage<_Tp>(__l.size()))
|
||||
{ std::__valarray_copy_construct (__l.begin(), __l.end(), _M_data); }
|
||||
{ std::__valarray_copy_construct(__l.begin(), __l.end(), _M_data); }
|
||||
#endif
|
||||
|
||||
template<typename _Tp> template<class _Dom>
|
||||
@ -696,6 +727,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
}
|
||||
|
||||
#ifdef __GXX_EXPERIMENTAL_CXX0X__
|
||||
template<typename _Tp>
|
||||
inline valarray<_Tp>&
|
||||
valarray<_Tp>::operator=(valarray<_Tp>&& __v) noexcept
|
||||
{
|
||||
if (_M_data)
|
||||
{
|
||||
std::__valarray_destroy_elements(_M_data, _M_data + _M_size);
|
||||
std::__valarray_release_memory(_M_data);
|
||||
}
|
||||
_M_size = __v._M_size;
|
||||
_M_data = __v._M_data;
|
||||
__v._M_size = 0;
|
||||
__v._M_data = 0;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename _Tp>
|
||||
inline valarray<_Tp>&
|
||||
valarray<_Tp>::operator=(initializer_list<_Tp> __l)
|
||||
@ -846,6 +893,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
_Array<size_t>(__i));
|
||||
}
|
||||
|
||||
#ifdef __GXX_EXPERIMENTAL_CXX0X__
|
||||
template<class _Tp>
|
||||
inline void
|
||||
valarray<_Tp>::swap(valarray<_Tp>& __v) noexcept
|
||||
{
|
||||
std::swap(_M_size, __v._M_size);
|
||||
std::swap(_M_data, __v._M_data);
|
||||
}
|
||||
#endif
|
||||
|
||||
template<class _Tp>
|
||||
inline size_t
|
||||
valarray<_Tp>::size() const
|
||||
|
40
libstdc++-v3/testsuite/26_numerics/valarray/moveable.cc
Normal file
40
libstdc++-v3/testsuite/26_numerics/valarray/moveable.cc
Normal file
@ -0,0 +1,40 @@
|
||||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// Copyright (C) 2011 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 3, 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 COPYING3. If not see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <valarray>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
std::valarray<int> a(1, 1), b(-1, 2);
|
||||
b = std::move(a);
|
||||
VERIFY( b.size() == 1 && b[0] == 1 && a.size() == 0 );
|
||||
|
||||
std::valarray<int> c(std::move(b));
|
||||
VERIFY( c.size() == 1 && c[0] == 1 );
|
||||
VERIFY( b.size() == 0 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
37
libstdc++-v3/testsuite/26_numerics/valarray/swap.cc
Normal file
37
libstdc++-v3/testsuite/26_numerics/valarray/swap.cc
Normal file
@ -0,0 +1,37 @@
|
||||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// Copyright (C) 2011 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 3, 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 COPYING3. If not see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <valarray>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
std::valarray<int> a(1, 1), b(-1, 2);
|
||||
b.swap(a);
|
||||
VERIFY( b.size() == 1 && b[0] == 1
|
||||
&& a.size() == 2 && a[0] == -1 && a[1] == -1 );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user