diff options
author | Paolo Carlini <pcarlini@suse.de> | 2006-01-15 18:04:31 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2006-01-15 18:04:31 +0000 |
commit | 6085dc49ba779eaa3979c34935e1392bf1ce5fad (patch) | |
tree | 6223d1c6cedf99f9f5ee1f7ebabda89d9e9b89b0 | |
parent | fd22159fe7d37e7b709c36eb264b54c7ca81e182 (diff) | |
download | gcc-6085dc49ba779eaa3979c34935e1392bf1ce5fad.zip gcc-6085dc49ba779eaa3979c34935e1392bf1ce5fad.tar.gz gcc-6085dc49ba779eaa3979c34935e1392bf1ce5fad.tar.bz2 |
re PR libstdc++/25626 (Valarray vs non-POD)
2006-01-15 Paolo Carlini <pcarlini@suse.de>
Gabriel Dos Reis <gdr@integrable-solutions.net>
PR libstdc++/25626
* include/std/std_valarray.h (valarray(const slice_array<>&),
valarray(const gslice_array<>&), valarray(const mask_array<>&),
valarray(const indirect_array<>&), valarray(const _Expr<>&)):
Forward to __valarray_copy_construct, not __valarray_copy.
* include/bits/valarray_array.h
(__valarray_copy_construct(_Array<>, _Array<>, _Array<>, size_t),
__valarray_copy_construct(_Array<>, size_t, size_t, _Array<>)):
New.
Co-Authored-By: Gabriel Dos Reis <gdr@integrable-solutions.net>
From-SVN: r109726
-rw-r--r-- | libstdc++-v3/ChangeLog | 13 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/valarray_array.h | 18 | ||||
-rw-r--r-- | libstdc++-v3/include/std/std_valarray.h | 12 |
3 files changed, 36 insertions, 7 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 93b2e0a..285e045 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,4 +1,17 @@ 2006-01-15 Paolo Carlini <pcarlini@suse.de> + Gabriel Dos Reis <gdr@integrable-solutions.net> + + PR libstdc++/25626 + * include/std/std_valarray.h (valarray(const slice_array<>&), + valarray(const gslice_array<>&), valarray(const mask_array<>&), + valarray(const indirect_array<>&), valarray(const _Expr<>&)): + Forward to __valarray_copy_construct, not __valarray_copy. + * include/bits/valarray_array.h + (__valarray_copy_construct(_Array<>, _Array<>, _Array<>, size_t), + __valarray_copy_construct(_Array<>, size_t, size_t, _Array<>)): + New. + +2006-01-15 Paolo Carlini <pcarlini@suse.de> * testsuite/tr1/8_c_compatibility/complex/overloads_int.cc: Fix norm test, use casts everywhere. diff --git a/libstdc++-v3/include/bits/valarray_array.h b/libstdc++-v3/include/bits/valarray_array.h index 490384f..06924fe 100644 --- a/libstdc++-v3/include/bits/valarray_array.h +++ b/libstdc++-v3/include/bits/valarray_array.h @@ -1,6 +1,6 @@ // The template and inlines for the -*- C++ -*- internal _Array helper class. -// Copyright (C) 1997, 1998, 1999, 2000, 2003, 2004, 2005 +// Copyright (C) 1997, 1998, 1999, 2000, 2003, 2004, 2005, 2006 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -428,6 +428,22 @@ _GLIBCXX_BEGIN_NAMESPACE(std) _Tp* const __restrict__ _M_data; }; + + // Copy-construct plain array __b[<__n>] from indexed array __a[__i[<__n>]] + template<typename _Tp> + inline void + __valarray_copy_construct(_Array<_Tp> __a, _Array<size_t> __i, + _Array<_Tp> __b, size_t __n) + { std::__valarray_copy_construct(__a._M_data, __i._M_data, + __b._M_data, __n); } + + // Copy-construct plain array __b[<__n>] from strided array __a[<__n : __s>] + template<typename _Tp> + inline void + __valarray_copy_construct(_Array<_Tp> __a, size_t __n, size_t __s, + _Array<_Tp> __b) + { std::__valarray_copy_construct(__a._M_data, __n, __s, __b._M_data); } + template<typename _Tp> inline void __valarray_fill (_Array<_Tp> __a, size_t __n, const _Tp& __t) diff --git a/libstdc++-v3/include/std/std_valarray.h b/libstdc++-v3/include/std/std_valarray.h index 82b2fb8..ada7aea4 100644 --- a/libstdc++-v3/include/std/std_valarray.h +++ b/libstdc++-v3/include/std/std_valarray.h @@ -1,6 +1,6 @@ // The template and inlines for the -*- C++ -*- valarray class. -// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005 +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -583,7 +583,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) valarray<_Tp>::valarray(const slice_array<_Tp>& __sa) : _M_size(__sa._M_sz), _M_data(__valarray_get_storage<_Tp>(__sa._M_sz)) { - std::__valarray_copy + std::__valarray_copy_construct (__sa._M_array, __sa._M_sz, __sa._M_stride, _Array<_Tp>(_M_data)); } @@ -593,7 +593,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) : _M_size(__ga._M_index.size()), _M_data(__valarray_get_storage<_Tp>(_M_size)) { - std::__valarray_copy + std::__valarray_copy_construct (__ga._M_array, _Array<size_t>(__ga._M_index), _Array<_Tp>(_M_data), _M_size); } @@ -603,7 +603,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) valarray<_Tp>::valarray(const mask_array<_Tp>& __ma) : _M_size(__ma._M_sz), _M_data(__valarray_get_storage<_Tp>(__ma._M_sz)) { - std::__valarray_copy + std::__valarray_copy_construct (__ma._M_array, __ma._M_mask, _Array<_Tp>(_M_data), _M_size); } @@ -612,7 +612,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) valarray<_Tp>::valarray(const indirect_array<_Tp>& __ia) : _M_size(__ia._M_sz), _M_data(__valarray_get_storage<_Tp>(__ia._M_sz)) { - std::__valarray_copy + std::__valarray_copy_construct (__ia._M_array, __ia._M_index, _Array<_Tp>(_M_data), _M_size); } @@ -620,7 +620,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) inline valarray<_Tp>::valarray(const _Expr<_Dom, _Tp>& __e) : _M_size(__e.size()), _M_data(__valarray_get_storage<_Tp>(_M_size)) - { std::__valarray_copy(__e, _M_size, _Array<_Tp>(_M_data)); } + { std::__valarray_copy_construct(__e, _M_size, _Array<_Tp>(_M_data)); } template<typename _Tp> inline |