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

📄 valarray_meta.h

📁 俄罗斯高人Mamaich的Pocket gcc编译器(运行在PocketPC上)的全部源代码。
💻 H
📖 第 1 页 / 共 3 页
字号:
    };    template<typename _Tp>    struct _IClos<_ValArray,_Tp>  : _IBase<valarray<_Tp> > {        typedef _IBase<valarray<_Tp> > _Base;        typedef _Tp value_type;        _IClos (const valarray<_Tp>& __a, const valarray<size_t>& __i)                : _Base (__a, __i) {}    };  //  // class _Expr  //        template<class _Clos, typename _Tp>     class _Expr    {    public:      typedef _Tp value_type;            _Expr(const _Clos&);            const _Clos& operator()() const;              value_type operator[](size_t) const;      valarray<value_type> operator[](slice) const;      valarray<value_type> operator[](const gslice&) const;      valarray<value_type> operator[](const valarray<bool>&) const;      valarray<value_type> operator[](const valarray<size_t>&) const;          _Expr<_UnClos<__unary_plus,std::_Expr,_Clos>, value_type>        operator+() const;      _Expr<_UnClos<__negate,std::_Expr,_Clos>, value_type>        operator-() const;      _Expr<_UnClos<__bitwise_not,std::_Expr,_Clos>, value_type>        operator~() const;      _Expr<_UnClos<__logical_not,std::_Expr,_Clos>, bool>        operator!() const;      size_t size() const;      value_type sum() const;              valarray<value_type> shift(int) const;      valarray<value_type> cshift(int) const;      value_type min() const;      value_type max() 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;    };      template<class _Clos, typename _Tp>    inline    _Expr<_Clos,_Tp>::_Expr(const _Clos& __c) : _M_closure(__c) {}      template<class _Clos, typename _Tp>    inline const _Clos&    _Expr<_Clos,_Tp>::operator()() const    { return _M_closure; }  template<class _Clos, typename _Tp>    inline _Tp    _Expr<_Clos,_Tp>::operator[](size_t __i) const    { return _M_closure[__i]; }  template<class _Clos, typename _Tp>    inline valarray<_Tp>    _Expr<_Clos,_Tp>::operator[](slice __s) const    { return _M_closure[__s]; }      template<class _Clos, typename _Tp>    inline valarray<_Tp>    _Expr<_Clos,_Tp>::operator[](const gslice& __gs) const    { return _M_closure[__gs]; }      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 (); }  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); }  template<class _Clos, typename _Tp>    inline valarray<_Tp>    _Expr<_Clos, _Tp>::apply(_Tp __f(const _Tp&)) const    { return valarray<_Tp>(_M_closure).apply(__f); }      template<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    _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 _Clos, typename _Tp>    inline _Tp    _Expr<_Clos, _Tp>::min() const    { return __valarray_min(_M_closure); }  template<class _Clos, typename _Tp>    inline _Tp    _Expr<_Clos, _Tp>::max() const    { return __valarray_max(_M_closure); }      template<class _Dom, typename _Tp>    inline _Expr<_UnClos<__logical_not,_Expr,_Dom>, bool>    _Expr<_Dom,_Tp>::operator!() const    {      typedef _UnClos<__logical_not,std::_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,std::_Expr,_Dom>,_Tp>                      \    _Expr<_Dom,_Tp>::operator _Op() const                                 \    {                                                                     \      typedef _UnClos<_Name,std::_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 __fun<_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 __fun<_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 __fun<_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 __fun<_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 __fun<_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 __fun<_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 __fun<_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 __fun<_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 __fun<_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 __fun<_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)    _DEFINE_EXPR_BINARY_OPERATOR(&&, __logical_and)    _DEFINE_EXPR_BINARY_OPERATOR(||, __logical_or)    _DEFINE_EXPR_BINARY_OPERATOR(==, __equal_to)    _DEFINE_EXPR_BINARY_OPERATOR(!=, __not_equal_to)    _DEFINE_EXPR_BINARY_OPERATOR(<, __less)    _DEFINE_EXPR_BINARY_OPERATOR(>, __greater)    _DEFINE_EXPR_BINARY_OPERATOR(<=, __less_equal)    _DEFINE_EXPR_BINARY_OPERATOR(>=, __greater_equal)#undef _DEFINE_EXPR_BINARY_OPERATOR#define _DEFINE_EXPR_UNARY_FUNCTION(_Name)                               \  template<class _Dom>                                                   \    inline _Expr<_UnClos<__##_Name,_Expr,_Dom>,typename _Dom::value_type>\    _Name(const _Expr<_Dom,typename _Dom::value_type>& __e)              \    {                                                                    \      typedef typename _Dom::value_type _Tp;                             \      typedef _UnClos<__##_Name,_Expr,_Dom> _Closure;                    \      return _Expr<_Closure,_Tp>(_Closure(__e()));                       \    }                                                                    \                                                                         \  template<typename _Tp>                                                 \    inline _Expr<_UnClos<__##_Name,_ValArray,_Tp>,_Tp>                   \    _Name(const valarray<_Tp>& __v)                                      \    {                                                                    \      typedef _UnClos<__##_Name,_ValArray,_Tp> _Closure;                 \      return _Expr<_Closure,_Tp>(_Closure(__v));                         \    }    _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(_Fun)                             \  template<class _Dom1, class _Dom2>                                   \    inline _Expr<_BinClos<__##_Fun,_Expr,_Expr,_Dom1,_Dom2>,           \		 typename _Dom1::value_type>                           \    _Fun(const _Expr<_Dom1,typename _Dom1::value_type>& __e1,          \	  const _Expr<_Dom2,typename _Dom2::value_type>& __e2)         \    {                                                                  \      typedef typename _Dom1::value_type _Tp;                          \      typedef _BinClos<__##_Fun,_Expr,_Expr,_Dom1,_Dom2> _Closure;     \      return _Expr<_Closure,_Tp>(_Closure(__e1(), __e2()));            \    }                                                                  \                                                                       \  template<class _Dom>                                                 \    inline _Expr<_BinClos<__##_Fun, _Expr, _ValArray, _Dom,            \			  typename _Dom::value_type>,                  \		 typename _Dom::value_type>                            \    _Fun(const _Expr<_Dom,typename _Dom::value_type>& __e,             \	 const valarray<typename _Dom::value_type>& __v)               \    {                                                                  \      typedef typename _Dom::value_type _Tp;                           \      typedef _BinClos<__##_Fun, _Expr, _ValArray, _Dom, _Tp> _Closure;\      return _Expr<_Closure,_Tp>(_Closure(__e(), __v));                \    }                                                                  \                                                                       \  template<class _Dom>                                                 \    inline _Expr<_BinClos<__##_Fun, _ValArray, _Expr,                  \			  typename _Dom::value_type,_Dom>,             \		 typename _Dom::value_type>                            \    _Fun(const valarray<typename _Dom::valarray>& __v,                 \	 const _Expr<_Dom,typename _Dom::value_type>& __e)             \    {                                                                  \      typedef typename _Dom::value_type _Tp;                           \      typedef _BinClos<__##_Fun,_ValArray,_Expr,_Tp,_Dom> _Closure;    \      return _Expr<_Closure,_Tp>(_Closure(__v, __e()));                \    }                                                                  \                                                                       \  template<class _Dom>                                                 \    inline _Expr<_BinClos<__##_Fun,_Expr,_Constant,_Dom,               \			  typename _Dom::value_type>,                  \		 typename _Dom::value_type>                            \    _Fun(const _Expr<_Dom, typename _Dom::value_type>& __e,            \	 const typename _Dom::value_type& __t)                         \    {                                                                  \      typedef typename _Dom::value_type _Tp;                           \      typedef _BinClos<__##_Fun,_Expr,_Constant,_Dom,_Tp> _Closure;    \      return _Expr<_Closure,_Tp>(_Closure(__e(), __t));                \    }                                                                  \                                                                       \  template<class _Dom>                                                 \    inline _Expr<_BinClos<__##_Fun,_Constant,_Expr,                    \			  typename _Dom::value_type,_Dom>,             \		 typename _Dom::value_type>                            \    _Fun(const typename _Dom::value_type& __t,                         \	 const _Expr<_Dom,typename _Dom::value_type>& __e)             \    {                                                                  \      typedef typename _Dom::value_type _Tp;                           \      typedef _BinClos<__##_Fun, _Constant,_Expr,_Tp,_Dom> _Closure;   \      return _Expr<_Closure,_Tp>(_Closure(__t, __e()));                \    }                                                                  \                                                                       \  template<typename _Tp>                                               \    inline _Expr<_BinClos<__##_Fun,_ValArray,_ValArray,_Tp,_Tp>, _Tp>  \    _Fun(const valarray<_Tp>& __v, const valarray<_Tp>& __w)           \    {                                                                  \      typedef _BinClos<__##_Fun,_ValArray,_ValArray,_Tp,_Tp> _Closure; \      return _Expr<_Closure,_Tp>(_Closure(__v, __w));                  \    }                                                                  \                                                                       \  template<typename _Tp>                                               \    inline _Expr<_BinClos<__##_Fun,_ValArray,_Constant,_Tp,_Tp>,_Tp>   \    _Fun(const valarray<_Tp>& __v, const _Tp& __t)                     \    {                                                                  \      typedef _BinClos<__##_Fun,_ValArray,_Constant,_Tp,_Tp> _Closure; \      return _Expr<_Closure,_Tp>(_Closure(__v, __t));                  \    }                                                                  \								       \  template<typename _Tp>                                               \    inline _Expr<_BinClos<__##_Fun,_Constant,_ValArray,_Tp,_Tp>,_Tp>   \    _Fun(const _Tp& __t, const valarray<_Tp>& __v)                     \    {                                                                  \      typedef _BinClos<__##_Fun,_Constant,_ValArray,_Tp,_Tp> _Closure; \      return _Expr<_Closure,_Tp>(_Closure(__t, __v));                  \    }_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 + -