diff options
author | Gabriel Dos Reis <gdr@codesourcery.com> | 2000-08-18 11:01:22 +0000 |
---|---|---|
committer | Gabriel Dos Reis <gdr@gcc.gnu.org> | 2000-08-18 11:01:22 +0000 |
commit | e825bf4aa7870d98c32f49ac69a502cc2f3276dd (patch) | |
tree | a2efecd400051bf4fb44cb182275ed01228ba218 | |
parent | 2ae7bada94874ae1a4c6f0b4d3c1027c38e00aea (diff) | |
download | gcc-e825bf4aa7870d98c32f49ac69a502cc2f3276dd.zip gcc-e825bf4aa7870d98c32f49ac69a502cc2f3276dd.tar.gz gcc-e825bf4aa7870d98c32f49ac69a502cc2f3276dd.tar.bz2 |
valarray_meta.h (_Expr<>::shift, [...]): Implement.
* bits/valarray_meta.h (_Expr<>::shift, _Expr::cshift,
_Expr<>::apply): Implement.
From-SVN: r35785
-rw-r--r-- | libstdc++-v3/ChangeLog | 5 | ||||
-rw-r--r-- | libstdc++-v3/bits/valarray_meta.h | 27 |
2 files changed, 28 insertions, 4 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 829722b..273a0ab 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,10 @@ 2000-08-18 Gabriel Dos Reis <gdr@codesourcery.com> + * bits/valarray_meta.h (_Expr<>::shift, _Expr::cshift, + _Expr<>::apply): Implement. + +2000-08-18 Gabriel Dos Reis <gdr@codesourcery.com> + * bits/valarray_meta.h (_Expr<>::min, _Expr<>::max): Implement. * bits/valarray_array.h (__valarray_min, __valarray_max): New diff --git a/libstdc++-v3/bits/valarray_meta.h b/libstdc++-v3/bits/valarray_meta.h index f52ddbf..df637d0 100644 --- a/libstdc++-v3/bits/valarray_meta.h +++ b/libstdc++-v3/bits/valarray_meta.h @@ -672,10 +672,9 @@ namespace std { value_type min() const; value_type max() const; -// _Meta<_ApplyFunctionWithValue<_Expr>, value_type> -// apply (value_type _M_func (value_type)) const; -// _Meta<_ApplyFunctionWithConstRef<_Expr>, value_type> -// apply (value_type _M_func (const value_type&)) const; + + valarray<value_type> apply(value_type (*) (const value_type&)) const; + valarray<value_type> apply(value_type (*) (value_type)) const; private: const _Clos _M_closure; @@ -718,7 +717,27 @@ namespace std { template<class _Clos, typename _Tp> inline size_t _Expr<_Clos,_Tp>::size () const { return _M_closure.size (); } + + template<class _Clos, typename _Tp> + inline valarray<_Tp> + _Expr<_Clos, _Tp>::shift(int __n) const + { return valarray<_Tp>(_M_closure).shift(__n); } + + template<class _Clos, typename _Tp> + inline valarray<_Tp> + _Expr<_Clos, _Tp>::cshift(int __n) const + { return valarray<_Tp>(_M_closure).cshift(__n); } + + ttemplate<class _Clos, typename _Tp> + inline valarray<_Tp> + _Expr<_Clos, _Tp>::apply(_Tp __f(const _Tp&)) const + { return valarray<_Tp>(_M_closure).apply(__f); } + ttemplate<class _Clos, typename _Tp> + inline valarray<_Tp> + _Expr<_Clos, _Tp>::apply(_Tp __f(_Tp)) const + { return valarray<_Tp>(_M_closure).apply(__f); } + // XXX: replace this with a more robust summation algorithm. template<class _Clos, typename _Tp> inline _Tp |