⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 valarray_meta.h

📁 c++编程宝典源码及Quincy99编译器 是《标准C++编程宝典》电子工业出版社的光盘
💻 H
📖 第 1 页 / 共 3 页
字号:
    _Expr<_Clos,_Tp>::operator[] (const valarray<bool>& __m) const    { return _M_closure[__m]; }        template<class _Clos, typename _Tp>    inline valarray<_Tp>    _Expr<_Clos,_Tp>::operator[] (const valarray<size_t>& __i) const    { return _M_closure[__i]; }        template<class _Clos, typename _Tp>    inline size_t    _Expr<_Clos,_Tp>::size () const  { return _M_closure.size (); }        // XXX: replace this with a more robust summation algorithm.    template<class _Clos, typename _Tp>    inline _Tp    _Expr<_Clos,_Tp>::sum () const    {        size_t __n = _M_closure.size();        if (__n == 0) return _Tp();        else {            _Tp __s = _M_closure[--__n];            while (__n != 0) __s += _M_closure[--__n];            return __s;        }    }        template<class _Dom, typename _Tp>    inline _Tp    min (const _Expr<_Dom,_Tp>& __e)    {        size_t __s = __e.size ();        _Tp  __m = __e[0];        for (size_t __i=1; __i<__s; ++__i)            if (__m > __e[__i]) __m = __e[__i];        return __m;    }        template<class _Dom, typename _Tp>    inline _Tp    max (const _Expr<_Dom,_Tp>& __e)    {        size_t __s = __e.size();        _Tp __m = __e[0];        for (size_t __i=1; __i<__s; ++__i)            if (__m < __e[__i]) __m = __e[__i];        return __m;    }        template<class _Dom, typename _Tp>    inline _Expr<_UnClos<logical_not,_Expr,_Dom>, bool>    _Expr<_Dom,_Tp>::operator! () const    {        typedef _UnClos<logical_not,_Expr,_Dom> _Closure;        return _Expr<_Closure,_Tp> (_Closure(this->_M_closure));    }#define _DEFINE_EXPR_UNARY_OPERATOR(_Op, _Name)                         \template<class _Dom, typename _Tp>                                      \inline _Expr<_UnClos<_Name,_Expr,_Dom>,_Tp>                             \_Expr<_Dom,_Tp>::operator##_Op () const                                 \{                                                                       \    typedef _UnClos<_Name,_Expr,_Dom> _Closure;                         \    return _Expr<_Closure,_Tp> (_Closure (this->_M_closure));           \}    _DEFINE_EXPR_UNARY_OPERATOR(+, _Unary_plus)    _DEFINE_EXPR_UNARY_OPERATOR(-, negate)    _DEFINE_EXPR_UNARY_OPERATOR(~, _Bitwise_not)#undef _DEFINE_EXPR_UNARY_OPERATOR#define _DEFINE_EXPR_BINARY_OPERATOR(_Op, _Name)                        \template<class _Dom1, class _Dom2>					\inline _Expr<_BinClos<_Name,_Expr,_Expr,_Dom1,_Dom2>,                   \             typename _Name<typename _Dom1::value_type>::result_type>   \operator##_Op (const _Expr<_Dom1,typename _Dom1::value_type>& __v,      \              const _Expr<_Dom2,typename _Dom2::value_type>& __w)       \{                                                                       \    typedef typename _Dom1::value_type _Arg;                            \    typedef typename _Name<_Arg>::result_type _Value;                   \    typedef _BinClos<_Name,_Expr,_Expr,_Dom1,_Dom2> _Closure;           \    return _Expr<_Closure,_Value> (_Closure (__v (), __w ()));          \}                                                                       \                                                                        \template<class _Dom>                                                    \inline _Expr<_BinClos<_Name,_Expr,_Constant,_Dom,typename _Dom::value_type>, \             typename _Name<typename _Dom::value_type>::result_type>    \operator##_Op (const _Expr<_Dom,typename _Dom::value_type>& __v,        \              const typename _Dom::value_type& __t)                     \{                                                                       \    typedef typename _Dom::value_type _Arg;                             \    typedef typename _Name<_Arg>::result_type _Value;                   \    typedef _BinClos<_Name,_Expr,_Constant,_Dom,_Arg> _Closure;         \    return _Expr<_Closure,_Value> (_Closure (__v (), __t));             \}                                                                       \                                                                        \template<class _Dom>                                                    \inline _Expr<_BinClos<_Name,_Constant,_Expr,typename _Dom::value_type,_Dom>, \             typename _Name<typename _Dom::value_type>::result_type>    \operator##_Op (const typename _Dom::value_type& __t,                    \               const _Expr<_Dom,typename _Dom::value_type>& __v)        \{                                                                       \    typedef typename _Dom::value_type _Arg;                             \    typedef typename _Name<_Arg>::result_type _Value;                   \    typedef _BinClos<_Name,_Constant,_Expr,_Arg,_Dom> _Closure;         \    return _Expr<_Closure,_Value> (_Closure (__t, __v ()));             \}                                                                       \                                                                        \template<class _Dom>                                                    \inline _Expr<_BinClos<_Name,_Expr,_ValArray,_Dom,typename _Dom::value_type>, \             typename _Name<typename _Dom::value_type>::result_type>    \operator##_Op (const _Expr<_Dom,typename _Dom::value_type>& __e,        \               const valarray<typename _Dom::value_type>& __v)          \{                                                                       \    typedef typename _Dom::value_type _Arg;                             \    typedef typename _Name<_Arg>::result_type _Value;                   \    typedef _BinClos<_Name,_Expr,_ValArray,_Dom,_Arg> _Closure;         \    return  _Expr<_Closure,_Value> (_Closure (__e (), __v));            \}                                                                       \                                                                        \template<class _Dom>                                                    \inline _Expr<_BinClos<_Name,_ValArray,_Expr,typename _Dom::value_type,_Dom>, \             typename _Name<typename _Dom::value_type>::result_type>    \operator##_Op (const valarray<typename _Dom::value_type>& __v,          \               const _Expr<_Dom,typename _Dom::value_type>& __e)        \{                                                                       \    typedef typename _Dom::value_type _Tp;                              \    typedef typename _Name<_Tp>::result_type _Value;                    \    typedef _BinClos<_Name,_ValArray,_Expr,_Tp,_Dom> _Closure;          \    return _Expr<_Closure,_Value> (_Closure (__v, __e ()));             \}    _DEFINE_EXPR_BINARY_OPERATOR(+, plus)    _DEFINE_EXPR_BINARY_OPERATOR(-, minus)    _DEFINE_EXPR_BINARY_OPERATOR(*, multiplies)    _DEFINE_EXPR_BINARY_OPERATOR(/, divides)    _DEFINE_EXPR_BINARY_OPERATOR(%, modulus)    _DEFINE_EXPR_BINARY_OPERATOR(^, _Bitwise_xor)    _DEFINE_EXPR_BINARY_OPERATOR(&, _Bitwise_and)    _DEFINE_EXPR_BINARY_OPERATOR(|, _Bitwise_or)    _DEFINE_EXPR_BINARY_OPERATOR(<<, _Shift_left)    _DEFINE_EXPR_BINARY_OPERATOR(>>, _Shift_right)#undef _DEFINE_EXPR_BINARY_OPERATOR    #define _DEFINE_EXPR_RELATIONAL_OPERATOR(_Op, _Name)                    \template<class _Dom1, class _Dom2>					\inline _Expr<_BinClos<_Name,_Expr,_Expr,_Dom1,_Dom2>, bool>             \operator##_Op (const _Expr<_Dom1,typename _Dom1::value_type>& __v,      \              const _Expr<_Dom2,typename _Dom2::value_type>& __w)       \{                                                                       \    typedef typename _Dom1::value_type _Arg;                            \    typedef _BinClos<_Name,_Expr,_Expr,_Dom1,_Dom2> _Closure;           \    return _Expr<_Closure,bool> (_Closure (__v (), __w ()));            \}                                                                       \                                                                        \template<class _Dom>                                                    \inline _Expr<_BinClos<_Name,_Expr,_Constant,_Dom,typename _Dom::value_type>, \             bool>                                                      \operator##_Op (const _Expr<_Dom,typename _Dom::value_type>& __v,        \              const typename _Dom::value_type& __t)                     \{                                                                       \    typedef typename _Dom::value_type _Arg;                             \    typedef _BinClos<_Name,_Expr,_Constant,_Dom,_Arg> _Closure;         \    return _Expr<_Closure,bool> (_Closure (__v (), __t));               \}                                                                       \                                                                        \template<class _Dom>                                                    \inline _Expr<_BinClos<_Name,_Constant,_Expr,typename _Dom::value_type,_Dom>, \             bool>                                                      \operator##_Op (const typename _Dom::value_type& __t,                    \               const _Expr<_Dom,typename _Dom::value_type>& __v)        \{                                                                       \    typedef typename _Dom::value_type _Arg;                             \    typedef _BinClos<_Name,_Constant,_Expr,_Arg,_Dom> _Closure;         \    return _Expr<_Closure,bool> (_Closure (__t, __v ()));               \}                                                                       \                                                                        \template<class _Dom>                                                    \inline _Expr<_BinClos<_Name,_Expr,_ValArray,_Dom,typename _Dom::value_type>, \             bool>                                                      \operator##_Op (const _Expr<_Dom,typename _Dom::value_type>& __e,        \               const valarray<typename _Dom::value_type>& __v)          \{                                                                       \    typedef typename _Dom::value_type _Tp;                              \    typedef _BinClos<_Name,_Expr,_ValArray,_Dom,_Tp> _Closure;          \    return  _Expr<_Closure,bool> (_Closure (__e (), __v));              \}                                                                       \                                                                        \template<class _Dom>                                                    \inline _Expr<_BinClos<_Name,_ValArray,_Expr,typename _Dom::value_type,_Dom>, \             bool>                                                      \operator##_Op (const valarray<typename _Dom::value_type>& __v,          \               const _Expr<_Dom,typename _Dom::value_type>& __e)        \{                                                                       \    typedef typename _Dom::value_type _Tp;                              \    typedef _BinClos<_Name,_ValArray,_Expr,_Tp,_Dom> _Closure;          \    return _Expr<_Closure,bool> (_Closure (__v, __e ()));               \}    _DEFINE_EXPR_RELATIONAL_OPERATOR(&&, logical_and)    _DEFINE_EXPR_RELATIONAL_OPERATOR(||, logical_or)    _DEFINE_EXPR_RELATIONAL_OPERATOR(==, equal_to)    _DEFINE_EXPR_RELATIONAL_OPERATOR(!=, not_equal_to)    _DEFINE_EXPR_RELATIONAL_OPERATOR(<, less)    _DEFINE_EXPR_RELATIONAL_OPERATOR(>, greater)    _DEFINE_EXPR_RELATIONAL_OPERATOR(<=, less_equal)    _DEFINE_EXPR_RELATIONAL_OPERATOR(>=, greater_equal)#undef _DEFINE_EXPR_RELATIONAL_OPERATOR#define _DEFINE_EXPR_UNARY_FUNCTION(_Name)                              \template<class _Dom>                                                    \inline _Expr<_UnFunClos<_Expr,_Dom>,typename _Dom::value_type>          \_Name(const _Expr<_Dom,typename _Dom::value_type>& __e)                 \{                                                                       \    typedef typename _Dom::value_type _Tp;                              \    typedef _UnFunClos<_Expr,_Dom> _Closure;                            \    return _Expr<_Closure,_Tp>(_Closure(__e(), (_Tp(*)(_Tp))(&_Name))); \}                                                                       \                                                                        \template<typename _Tp>                                                  \inline _Expr<_UnFunClos<_ValArray,_Tp>,_Tp>                             \_Name(const valarray<_Tp>& __v)                                         \{                                                                       \    typedef _UnFunClos<_ValArray,_Tp> _Closure;                         \    return _Expr<_Closure,_Tp> (_Closure (__v, (_Tp(*)(_Tp))(&_Name))); \}    _DEFINE_EXPR_UNARY_FUNCTION(abs)    _DEFINE_EXPR_UNARY_FUNCTION(cos)    _DEFINE_EXPR_UNARY_FUNCTION(acos)    _DEFINE_EXPR_UNARY_FUNCTION(cosh)        _DEFINE_EXPR_UNARY_FUNCTION(sin)    _DEFINE_EXPR_UNARY_FUNCTION(asin)    _DEFINE_EXPR_UNARY_FUNCTION(sinh)        _DEFINE_EXPR_UNARY_FUNCTION(tan)        _DEFINE_EXPR_UNARY_FUNCTION(atan)    _DEFINE_EXPR_UNARY_FUNCTION(exp)        _DEFINE_EXPR_UNARY_FUNCTION(log)    _DEFINE_EXPR_UNARY_FUNCTION(log10)    _DEFINE_EXPR_UNARY_FUNCTION(sqrt)#undef _DEFINE_EXPR_UNARY_FUNCTION#define _DEFINE_EXPR_BINARY_FUNCTION(_Name)                             \template<class _Dom1, class _Dom2>                                      \inline _Expr<_BinFunClos<_Expr,_Expr,_Dom1,_Dom2>,typename _Dom1::value_type>\_Name (const _Expr<_Dom1,typename _Dom1::value_type>& __e1,             \       const _Expr<_Dom2,typename _Dom2::value_type>& __e2)             \{                                                                       \    typedef typename _Dom1::value_type _Tp;                             \    typedef _BinFunClos<_Expr,_Expr,_Dom1,_Dom2> _Closure;              \    return _Expr<_Closure,_Tp>                                          \        (_Closure (__e1 (), __e2 (), (_Tp(*)(_Tp, _Tp))(&_Name)));      \}                                                                       \                                                                        \template<class _Dom>                                                    \inline _Expr<_BinFunClos<_Expr,_ValArray,_Dom,typename _Dom::value_type>, \             typename _Dom::value_type>                                 \_Name (const _Expr<_Dom,typename _Dom::value_type>& __e,                \       const valarray<typename _Dom::value_type>& __v)                  \{                                                                       \    typedef typename _Dom::value_type _Tp;                              \    typedef _BinFunClos<_Expr,_ValArray,_Dom,_Tp> _Closure;             \    return _Expr<_Closure,_Tp>                                          \        (_Closure (__e (), __v, (_Tp(*)(_Tp, _Tp))(&_Name)));           \}                                                                       \                                                                        \template<class _Dom>                                                    \inline _Expr<_BinFunClos<_ValArray,_Expr,typename _Dom::value_type,_Dom>, \             typename _Dom::value_type>                                 \_Name (const valarray<typename _Dom::valarray>& __v,                    \       const _Expr<_Dom,typename _Dom::value_type>& __e)                \{                                                                       \    typedef typename _Dom::value_type _Tp;                              \    typedef _BinFunClos<_ValArray,_Expr,_Tp,_Dom> _Closure;             \    return _Expr<_Closure,_Tp>                                          \        (_Closure (__v, __e (), (_Tp(*)(_Tp, _Tp))(&_Name)));           \}                                                                       \                                                                        \template<class _Dom>                                                    \inline _Expr<_BinFunClos<_Expr,_Constant,_Dom,typename _Dom::value_type>, \             typename _Dom::value_type>                                 \_Name (const _Expr<_Dom, typename _Dom::value_type>& __e,               \       const typename _Dom::value_type& __t)                            \{                                                                       \    typedef typename _Dom::value_type _Tp;                              \    typedef _BinFunClos<_Expr,_Constant,_Dom,_Tp> _Closure;             \    return _Expr<_Closure,_Tp>                                          \        (_Closure (__e (), __t, (_Tp(*)(_Tp, _Tp))(&_Name)));           \}                                                                       \                                                                        \template<class _Dom>                                                    \inline _Expr<_BinFunClos<_Constant,_Expr,typename _Dom::value_type,_Dom>, \             typename _Dom::value_type>                                 \_Name (const typename _Dom::value_type& __t,                            \       const _Expr<_Dom,typename _Dom::value_type>& __e)                \{                                                                       \    typedef typename _Dom::value_type _Tp;                              \    typedef _BinFunClos<_Constant,_Expr,_Tp,_Dom> _Closure;             \    return _Expr<_Closure,_Tp>                                          \        (_Closure (__t, __e (), (_Tp(*)(_Tp, _Tp))(&_Name)));           \}                                                                       \                                                                        \template<typename _Tp>                                                  \inline _Expr<_BinFunClos<_ValArray,_ValArray,_Tp,_Tp>, _Tp>             \_Name (const valarray<_Tp>& __v, const valarray<_Tp>& __w)              \{                                                                       \    typedef _BinFunClos<_ValArray,_ValArray,_Tp,_Tp> _Closure;          \    return _Expr<_Closure,_Tp>                                          \        (_Closure (__v, __w, (_Tp(*)(_Tp,_Tp))(&_Name)));               \}                                                                       \                                                                        \template<typename _Tp>                                                  \inline _Expr<_BinFunClos<_ValArray,_Constant,_Tp,_Tp>,_Tp>              \_Name (const valarray<_Tp>& __v, const _Tp& __t)                        \{                                                                       \    typedef _BinFunClos<_ValArray,_Constant,_Tp,_Tp> _Closure;          \    return _Expr<_Closure,_Tp>                                          \        (_Closure (__v, __t, (_Tp(*)(_Tp,_Tp))(&_Name)));               \}                                                                       \                                                                        \template<typename _Tp>                                                  \inline _Expr<_BinFunClos<_Constant,_ValArray,_Tp,_Tp>,_Tp>              \_Name (const _Tp& __t, const valarray<_Tp>& __v)                        \{                                                                       \    typedef _BinFunClos<_Constant,_ValArray,_Tp,_Tp> _Closure;          \    return _Expr<_Closure,_Tp>                                          \        (_Closure (__t, __v, (_Tp(*)(_Tp,_Tp))(&_Name)));               \}_DEFINE_EXPR_BINARY_FUNCTION(atan2)_DEFINE_EXPR_BINARY_FUNCTION(pow)#undef _DEFINE_EXPR_BINARY_FUNCTION} // std::#endif /* _CPP_VALARRAY_META_H */// Local Variables:// mode:c++// End:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -