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

📄 std_valarray.h

📁 linux下的gcc编译器
💻 H
📖 第 1 页 / 共 2 页
字号:
    {      __valarray_copy(__ga._M_array, _Array<size_t>(__ga._M_index),		      _Array<_Tp>(_M_data), _M_size);      return *this;    }  template<typename _Tp>    inline valarray<_Tp>&    valarray<_Tp>::operator=(const mask_array<_Tp>& __ma)    {      __valarray_copy(__ma._M_array, __ma._M_mask,		      _Array<_Tp>(_M_data), _M_size);      return *this;    }  template<typename _Tp>    inline valarray<_Tp>&    valarray<_Tp>::operator=(const indirect_array<_Tp>& __ia)    {      __valarray_copy(__ia._M_array, __ia._M_index,		       _Array<_Tp>(_M_data), _M_size);      return *this;    }  template<typename _Tp> template<class _Dom>    inline valarray<_Tp>&    valarray<_Tp>::operator=(const _Expr<_Dom, _Tp>& __e)    {      __valarray_copy(__e, _M_size, _Array<_Tp>(_M_data));	return *this;    }  template<typename _Tp>    inline _Expr<_SClos<_ValArray,_Tp>, _Tp>    valarray<_Tp>::operator[](slice __s) const    {      typedef _SClos<_ValArray,_Tp> _Closure;      return _Expr<_Closure, _Tp>(_Closure (_Array<_Tp>(_M_data), __s));    }  template<typename _Tp>    inline slice_array<_Tp>    valarray<_Tp>::operator[](slice __s)    {      return slice_array<_Tp>(_Array<_Tp>(_M_data), __s);    }  template<typename _Tp>    inline _Expr<_GClos<_ValArray,_Tp>, _Tp>    valarray<_Tp>::operator[](const gslice& __gs) const    {      typedef _GClos<_ValArray,_Tp> _Closure;      return _Expr<_Closure, _Tp>	(_Closure(_Array<_Tp>(_M_data), __gs._M_index->_M_index));    }  template<typename _Tp>    inline gslice_array<_Tp>    valarray<_Tp>::operator[](const gslice& __gs)    {      return gslice_array<_Tp>	(_Array<_Tp>(_M_data), __gs._M_index->_M_index);    }  template<typename _Tp>    inline valarray<_Tp>    valarray<_Tp>::operator[](const valarray<bool>& __m) const    {      size_t __s = 0;      size_t __e = __m.size();      for (size_t __i=0; __i<__e; ++__i)	if (__m[__i]) ++__s;      return valarray<_Tp>(mask_array<_Tp>(_Array<_Tp>(_M_data), __s,					   _Array<bool> (__m)));    }  template<typename _Tp>    inline mask_array<_Tp>    valarray<_Tp>::operator[](const valarray<bool>& __m)    {      size_t __s = 0;      size_t __e = __m.size();      for (size_t __i=0; __i<__e; ++__i)	if (__m[__i]) ++__s;      return mask_array<_Tp>(_Array<_Tp>(_M_data), __s, _Array<bool>(__m));    }  template<typename _Tp>    inline _Expr<_IClos<_ValArray,_Tp>, _Tp>    valarray<_Tp>::operator[](const valarray<size_t>& __i) const    {      typedef _IClos<_ValArray,_Tp> _Closure;      return _Expr<_Closure, _Tp>(_Closure(*this, __i));    }  template<typename _Tp>    inline indirect_array<_Tp>    valarray<_Tp>::operator[](const valarray<size_t>& __i)    {      return indirect_array<_Tp>(_Array<_Tp>(_M_data), __i.size(),				 _Array<size_t>(__i));    }  template<class _Tp>    inline size_t     valarray<_Tp>::size() const    { return _M_size; }  template<class _Tp>    inline _Tp    valarray<_Tp>::sum() const    {      return __valarray_sum(_M_data, _M_data + _M_size);    }//   template<typename _Tp>//   inline _Tp//   valarray<_Tp>::product () const//   {//       return __valarray_product(_M_data, _M_data + _M_size);//   }  template <class _Tp>     inline valarray<_Tp>     valarray<_Tp>::shift(int __n) const     {       _Tp* const __a = static_cast<_Tp*>         (__builtin_alloca(sizeof(_Tp) * _M_size));       if (__n == 0)                          // no shift         __valarray_copy_construct(_M_data, _M_data + _M_size, __a);       else if (__n > 0)         // __n > 0: shift left         {                            if (size_t(__n) > _M_size)             __valarray_default_construct(__a, __a + __n);           else             {               __valarray_copy_construct(_M_data+__n, _M_data + _M_size, __a);               __valarray_default_construct(__a+_M_size-__n, __a + _M_size);             }         }       else                        // __n < 0: shift right         {                                     __valarray_copy_construct (_M_data, _M_data+_M_size+__n, __a-__n);           __valarray_default_construct(__a, __a - __n);         }       return valarray<_Tp> (__a, _M_size);     }  template <class _Tp>     inline valarray<_Tp>     valarray<_Tp>::cshift (int __n) const     {       _Tp* const __a = static_cast<_Tp*>         (__builtin_alloca (sizeof(_Tp) * _M_size));       if (__n == 0)               // no cshift         __valarray_copy_construct(_M_data, _M_data + _M_size, __a);       else if (__n > 0)           // cshift left         {                          __valarray_copy_construct(_M_data, _M_data+__n, __a+_M_size-__n);           __valarray_copy_construct(_M_data+__n, _M_data + _M_size, __a);         }       else                        // cshift right         {                                  __valarray_copy_construct             (_M_data + _M_size+__n, _M_data + _M_size, __a);           __valarray_copy_construct             (_M_data, _M_data + _M_size+__n, __a - __n);         }       return valarray<_Tp>(__a, _M_size);     }  template <class _Tp>    inline void    valarray<_Tp>::resize (size_t __n, _Tp __c)    {      // This complication is so to make valarray<valarray<T> > work      // even though it is not required by the standard.  Nobody should      // be saying valarray<valarray<T> > anyway.  See the specs.      __valarray_destroy_elements(_M_data, _M_data + _M_size);      if (_M_size != __n)	{	  __valarray_release_memory(_M_data);	  _M_size = __n;	  _M_data = __valarray_get_storage<_Tp>(__n);	}      __valarray_fill_construct(_M_data, _M_data + __n, __c);    }      template<typename _Tp>    inline _Tp    valarray<_Tp>::min() const    {      return *min_element (_M_data, _M_data+_M_size);    }  template<typename _Tp>    inline _Tp    valarray<_Tp>::max() const    {      return *max_element (_M_data, _M_data+_M_size);    }    template<class _Tp>    inline _Expr<_ValFunClos<_ValArray,_Tp>,_Tp>    valarray<_Tp>::apply(_Tp func(_Tp)) const    {      typedef _ValFunClos<_ValArray,_Tp> _Closure;      return _Expr<_Closure,_Tp>(_Closure(*this, func));    }  template<class _Tp>    inline _Expr<_RefFunClos<_ValArray,_Tp>,_Tp>    valarray<_Tp>::apply(_Tp func(const _Tp &)) const    {      typedef _RefFunClos<_ValArray,_Tp> _Closure;      return _Expr<_Closure,_Tp>(_Closure(*this, func));    }#define _DEFINE_VALARRAY_UNARY_OPERATOR(_Op, _Name)                     \  template<typename _Tp>						\  inline typename valarray<_Tp>::template _UnaryOp<_Name>::_Rt         	\  valarray<_Tp>::operator _Op() const					\  {									\    typedef _UnClos<_Name,_ValArray,_Tp> _Closure;	                \    typedef typename __fun<_Name, _Tp>::result_type _Rt;                \    return _Expr<_Closure, _Rt>(_Closure(*this));			\  }    _DEFINE_VALARRAY_UNARY_OPERATOR(+, __unary_plus)    _DEFINE_VALARRAY_UNARY_OPERATOR(-, __negate)    _DEFINE_VALARRAY_UNARY_OPERATOR(~, __bitwise_not)    _DEFINE_VALARRAY_UNARY_OPERATOR (!, __logical_not)#undef _DEFINE_VALARRAY_UNARY_OPERATOR#define _DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(_Op, _Name)               \  template<class _Tp>							\    inline valarray<_Tp>&						\    valarray<_Tp>::operator _Op##=(const _Tp &__t)			\    {									\      _Array_augmented_##_Name(_Array<_Tp>(_M_data), _M_size, __t);	\      return *this;							\    }									\									\  template<class _Tp>							\    inline valarray<_Tp>&						\    valarray<_Tp>::operator _Op##=(const valarray<_Tp> &__v)		\    {									\      _Array_augmented_##_Name(_Array<_Tp>(_M_data), _M_size, 		\			       _Array<_Tp>(__v._M_data));		\      return *this;							\    }_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(+, __plus)_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(-, __minus)_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(*, __multiplies)_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(/, __divides)_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(%, __modulus)_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(^, __bitwise_xor)_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(&, __bitwise_and)_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(|, __bitwise_or)_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(<<, __shift_left)_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(>>, __shift_right)#undef _DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT#define _DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(_Op, _Name)          \  template<class _Tp> template<class _Dom>				\    inline valarray<_Tp>&						\    valarray<_Tp>::operator _Op##=(const _Expr<_Dom,_Tp>& __e)		\    {									\      _Array_augmented_##_Name(_Array<_Tp>(_M_data), __e, _M_size);	\      return *this;							\    }_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(+, __plus)_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(-, __minus)_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(*, __multiplies)_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(/, __divides)_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(%, __modulus)_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(^, __bitwise_xor)_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(&, __bitwise_and)_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(|, __bitwise_or)_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(<<, __shift_left)_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(>>, __shift_right)#undef _DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT    #define _DEFINE_BINARY_OPERATOR(_Op, _Name)				\  template<typename _Tp>						\    inline _Expr<_BinClos<_Name,_ValArray,_ValArray,_Tp,_Tp>,           \                 typename __fun<_Name, _Tp>::result_type>               \    operator _Op(const valarray<_Tp>& __v, const valarray<_Tp>& __w)	\    {									\      typedef _BinClos<_Name,_ValArray,_ValArray,_Tp,_Tp> _Closure;     \      typedef typename __fun<_Name, _Tp>::result_type _Rt;              \      return _Expr<_Closure, _Rt>(_Closure(__v, __w));                  \    }									\									\  template<typename _Tp>						\  inline _Expr<_BinClos<_Name,_ValArray,_Constant,_Tp,_Tp>,             \               typename __fun<_Name, _Tp>::result_type>                 \  operator _Op(const valarray<_Tp>& __v, const _Tp& __t)		\  {									\    typedef _BinClos<_Name,_ValArray,_Constant,_Tp,_Tp> _Closure;	\    typedef typename __fun<_Name, _Tp>::result_type _Rt;                \    return _Expr<_Closure, _Rt>(_Closure(__v, __t));	                \  }									\									\  template<typename _Tp>						\  inline _Expr<_BinClos<_Name,_Constant,_ValArray,_Tp,_Tp>,             \               typename __fun<_Name, _Tp>::result_type>                 \  operator _Op(const _Tp& __t, const valarray<_Tp>& __v)		\  {									\    typedef _BinClos<_Name,_Constant,_ValArray,_Tp,_Tp> _Closure;       \    typedef typename __fun<_Name, _Tp>::result_type _Rt;                \    return _Expr<_Closure, _Tp>(_Closure(__t, __v));        	        \  }_DEFINE_BINARY_OPERATOR(+, __plus)_DEFINE_BINARY_OPERATOR(-, __minus)_DEFINE_BINARY_OPERATOR(*, __multiplies)_DEFINE_BINARY_OPERATOR(/, __divides)_DEFINE_BINARY_OPERATOR(%, __modulus)_DEFINE_BINARY_OPERATOR(^, __bitwise_xor)_DEFINE_BINARY_OPERATOR(&, __bitwise_and)_DEFINE_BINARY_OPERATOR(|, __bitwise_or)_DEFINE_BINARY_OPERATOR(<<, __shift_left)_DEFINE_BINARY_OPERATOR(>>, __shift_right)_DEFINE_BINARY_OPERATOR(&&, __logical_and)_DEFINE_BINARY_OPERATOR(||, __logical_or)_DEFINE_BINARY_OPERATOR(==, __equal_to)_DEFINE_BINARY_OPERATOR(!=, __not_equal_to)_DEFINE_BINARY_OPERATOR(<, __less)_DEFINE_BINARY_OPERATOR(>, __greater)_DEFINE_BINARY_OPERATOR(<=, __less_equal)_DEFINE_BINARY_OPERATOR(>=, __greater_equal)} // namespace std#endif // _CPP_VALARRAY// Local Variables:// mode:c++// End:

⌨️ 快捷键说明

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