aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Dos Reis <gdr@codesourcery.com>2000-08-18 11:01:22 +0000
committerGabriel Dos Reis <gdr@gcc.gnu.org>2000-08-18 11:01:22 +0000
commite825bf4aa7870d98c32f49ac69a502cc2f3276dd (patch)
treea2efecd400051bf4fb44cb182275ed01228ba218
parent2ae7bada94874ae1a4c6f0b4d3c1027c38e00aea (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--libstdc++-v3/bits/valarray_meta.h27
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