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

📄 valarray_meta.h

📁 gcc-2.95.3 Linux下最常用的C编译器
💻 H
📖 第 1 页 / 共 3 页
字号:
template<class _Clos, typename _Tp>inline valarray<_Tp>_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{        _Tp __s(_Tp());        size_t __n (_M_closure.size ());        for (size_t __i=0; __i<__n; ++__i) __s += _M_closure[__i];        return __s;}template<class _Dom, typename _Tp>inline _Tpmin (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 _Tpmax (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(tanh)    _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#endif // _CPP_VALARRAY_META_H // Local Variables:// mode:c++// End:

⌨️ 快捷键说明

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