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

📄 valarray_array.h

📁 openRisc2000编译链接器等,用于i386 cygwin
💻 H
📖 第 1 页 / 共 2 页
字号:
       return __r;     }  // Compute the product of all elements in range [__f, __l)  template<typename _Tp>     inline _Tp     __valarray_product(const _Tp* __restrict__ __f,                        const _Tp* __restrict__ __l)     {       _Tp __r = _Tp(1);       while (__f != __l) __r = __r * *__f++;       return __r;     }  // Compute the min/max of an array-expression  template<typename _Ta>     inline typename _Ta::value_type     __valarray_min(const _Ta& __a)     {       size_t __s = __a.size();       typedef typename _Ta::value_type _Value_type;       _Value_type __r = __s == 0 ? _Value_type() : __a[0];       for (size_t __i = 1; __i < __s; ++__i)         {           _Value_type __t = __a[__i];           if (__t < __r)             __r = __t;         }       return __r;     }  template<typename _Ta>     inline typename _Ta::value_type     __valarray_max(const _Ta& __a)     {       size_t __s = __a.size();       typedef typename _Ta::value_type _Value_type;       _Value_type __r = __s == 0 ? _Value_type() : __a[0];       for (size_t __i = 1; __i < __s; ++__i)         {           _Value_type __t = __a[__i];           if (__t > __r)             __r = __t;         }       return __r;     }  //  // Helper class _Array, first layer of valarray abstraction.  // All operations on valarray should be forwarded to this class  // whenever possible. -- gdr  //  template<typename _Tp>     struct _Array     {       explicit _Array (size_t);       explicit _Array (_Tp* const __restrict__);       explicit _Array (const valarray<_Tp>&);       _Array (const _Tp* __restrict__, size_t);       _Tp* begin () const;       _Tp* const __restrict__ _M_data;     };  template<typename _Tp>     inline void     __valarray_fill (_Array<_Tp> __a, size_t __n, const _Tp& __t)     { std::__valarray_fill (__a._M_data, __n, __t); }  template<typename _Tp>     inline void     __valarray_fill (_Array<_Tp> __a, size_t __n, size_t __s, const _Tp& __t)     { std::__valarray_fill (__a._M_data, __n, __s, __t); }  template<typename _Tp>     inline void     __valarray_fill (_Array<_Tp> __a, _Array<size_t> __i,                      size_t __n, const _Tp& __t)     { std::__valarray_fill (__a._M_data, __i._M_data, __n, __t); }  // Copy a plain array __a[<__n>] into a play array __b[<>]  template<typename _Tp>     inline void     __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b)     { std::__valarray_copy(__a._M_data, __n, __b._M_data); }  // Copy strided array __a[<__n : __s>] in plain __b[<__n>]  template<typename _Tp>     inline void     __valarray_copy(_Array<_Tp> __a, size_t __n, size_t __s, _Array<_Tp> __b)     { std::__valarray_copy(__a._M_data, __n, __s, __b._M_data); }  // Copy a plain array  __a[<__n>] into a strided array __b[<__n : __s>]  template<typename _Tp>     inline void     __valarray_copy(_Array<_Tp> __a, _Array<_Tp> __b, size_t __n, size_t __s)     { __valarray_copy(__a._M_data, __b._M_data, __n, __s); }  // Copy strided array __src[<__n : __s1>] into another  // strided array __dst[< : __s2>].  Their sizes must match.  template<typename _Tp>     inline void     __valarray_copy(_Array<_Tp> __a, size_t __n, size_t __s1,                     _Array<_Tp> __b, size_t __s2)     { std::__valarray_copy(__a._M_data, __n, __s1, __b._M_data, __s2); }  // Copy an indexed array __a[__i[<__n>]] in plain array __b[<__n>]  template<typename _Tp>     inline void     __valarray_copy(_Array<_Tp> __a, _Array<size_t> __i,                      _Array<_Tp> __b, size_t __n)     { std::__valarray_copy(__a._M_data, __i._M_data, __b._M_data, __n); }  // Copy a plain array __a[<__n>] in an indexed array __b[__i[<__n>]]  template<typename _Tp>     inline void     __valarray_copy(_Array<_Tp> __a, size_t __n, _Array<_Tp> __b,                      _Array<size_t> __i)     { std::__valarray_copy(__a._M_data, __n, __b._M_data, __i._M_data); }  // Copy the __n first elements of an indexed array __src[<__i>] into  // another indexed array __dst[<__j>].  template<typename _Tp>     inline void     __valarray_copy(_Array<_Tp> __src, size_t __n, _Array<size_t> __i,                     _Array<_Tp> __dst, _Array<size_t> __j)     {       std::__valarray_copy(__src._M_data, __n, __i._M_data,			    __dst._M_data, __j._M_data);     }  template<typename _Tp>     inline     _Array<_Tp>::_Array (size_t __n)       : _M_data(__valarray_get_storage<_Tp>(__n))     { std::__valarray_default_construct(_M_data, _M_data + __n); }  template<typename _Tp>     inline     _Array<_Tp>::_Array (_Tp* const __restrict__ __p) : _M_data (__p) {}  template<typename _Tp>     inline _Array<_Tp>::_Array (const valarray<_Tp>& __v)         : _M_data (__v._M_data) {}  template<typename _Tp>     inline     _Array<_Tp>::_Array (const _Tp* __restrict__ __b, size_t __s)       : _M_data(__valarray_get_storage<_Tp>(__s))     { std::__valarray_copy_construct(__b, __s, _M_data); }  template<typename _Tp>     inline _Tp*     _Array<_Tp>::begin () const     { return _M_data; }#define _DEFINE_ARRAY_FUNCTION(_Op, _Name)				\template<typename _Tp>							\inline void								\_Array_augmented_##_Name (_Array<_Tp> __a, size_t __n, const _Tp& __t)	\{									\  for (_Tp* __p=__a._M_data; __p<__a._M_data+__n; ++__p)		\    *__p _Op##= __t;							\}									\									\template<typename _Tp>							\inline void								\_Array_augmented_##_Name (_Array<_Tp> __a, size_t __n, _Array<_Tp> __b)	\{									\  _Tp* __p = __a._M_data;						\  for (_Tp* __q=__b._M_data; __q<__b._M_data+__n; ++__p, ++__q)		\    *__p _Op##= *__q;							\}									\									\template<typename _Tp, class _Dom>					\void									\_Array_augmented_##_Name (_Array<_Tp> __a,				\                         const _Expr<_Dom,_Tp>& __e, size_t __n)	\{									\    _Tp* __p (__a._M_data);						\    for (size_t __i=0; __i<__n; ++__i, ++__p) *__p _Op##= __e[__i];	\}									\									\template<typename _Tp>							\inline void								\_Array_augmented_##_Name (_Array<_Tp> __a, size_t __n, size_t __s,	\			 _Array<_Tp> __b)				\{									\    _Tp* __q (__b._M_data);						\    for (_Tp* __p=__a._M_data; __p<__a._M_data+__s*__n; __p+=__s, ++__q) \      *__p _Op##= *__q;							\}									\									\template<typename _Tp>							\inline void								\_Array_augmented_##_Name (_Array<_Tp> __a, _Array<_Tp> __b,		\			 size_t __n, size_t __s)			\{									\    _Tp* __q (__b._M_data);						\    for (_Tp* __p=__a._M_data; __p<__a._M_data+__n; ++__p, __q+=__s)	\      *__p _Op##= *__q;							\}									\									\template<typename _Tp, class _Dom>					\void									\_Array_augmented_##_Name (_Array<_Tp> __a, size_t __s,			\                          const _Expr<_Dom,_Tp>& __e, size_t __n)	\{									\    _Tp* __p (__a._M_data);						\    for (size_t __i=0; __i<__n; ++__i, __p+=__s) *__p _Op##= __e[__i];	\}									\									\template<typename _Tp>							\inline void								\_Array_augmented_##_Name (_Array<_Tp> __a, _Array<size_t> __i,		\                          _Array<_Tp> __b, size_t __n)			\{									\    _Tp* __q (__b._M_data);						\    for (size_t* __j=__i._M_data; __j<__i._M_data+__n; ++__j, ++__q)	\        __a._M_data[*__j] _Op##= *__q;					\}									\									\template<typename _Tp>							\inline void								\_Array_augmented_##_Name (_Array<_Tp> __a, size_t __n,			\                          _Array<_Tp> __b, _Array<size_t> __i)		\{									\    _Tp* __p (__a._M_data);						\    for (size_t* __j=__i._M_data; __j<__i._M_data+__n; ++__j, ++__p)	\        *__p _Op##= __b._M_data[*__j];					\}									\									\template<typename _Tp, class _Dom>					\void									\_Array_augmented_##_Name (_Array<_Tp> __a, _Array<size_t> __i,		\                          const _Expr<_Dom, _Tp>& __e, size_t __n)	\{									\    size_t* __j (__i._M_data);						\    for (size_t __k=0; __k<__n; ++__k, ++__j)				\      __a._M_data[*__j] _Op##= __e[__k];				\}									\									\template<typename _Tp>							\void									\_Array_augmented_##_Name (_Array<_Tp> __a, _Array<bool> __m,		\                          _Array<_Tp> __b, size_t __n)			\{									\    bool* ok (__m._M_data);						\    _Tp* __p (__a._M_data);						\    for (_Tp* __q=__b._M_data; __q<__b._M_data+__n; ++__q, ++ok, ++__p) { \        while (! *ok) {							\            ++ok;							\            ++__p;							\        }								\        *__p _Op##= *__q;						\    }									\}									\									\template<typename _Tp>							\void									\_Array_augmented_##_Name (_Array<_Tp> __a, size_t __n,			\                         _Array<_Tp> __b, _Array<bool> __m)		\{									\    bool* ok (__m._M_data);						\    _Tp* __q (__b._M_data);						\    for (_Tp* __p=__a._M_data; __p<__a._M_data+__n; ++__p, ++ok, ++__q) { \        while (! *ok) {							\            ++ok;							\            ++__q;							\        }								\        *__p _Op##= *__q;						\    }									\}									\									\template<typename _Tp, class _Dom>					\void									\_Array_augmented_##_Name (_Array<_Tp> __a, _Array<bool> __m,		\                          const _Expr<_Dom, _Tp>& __e, size_t __n)	\{									\    bool* ok(__m._M_data);						\    _Tp* __p (__a._M_data);						\    for (size_t __i=0; __i<__n; ++__i, ++ok, ++__p) {			\        while (! *ok) {							\            ++ok;							\            ++__p;							\        }								\        *__p _Op##= __e[__i];						\    }									\}   _DEFINE_ARRAY_FUNCTION(+, __plus)   _DEFINE_ARRAY_FUNCTION(-, __minus)   _DEFINE_ARRAY_FUNCTION(*, __multiplies)   _DEFINE_ARRAY_FUNCTION(/, __divides)   _DEFINE_ARRAY_FUNCTION(%, __modulus)   _DEFINE_ARRAY_FUNCTION(^, __bitwise_xor)   _DEFINE_ARRAY_FUNCTION(|, __bitwise_or)   _DEFINE_ARRAY_FUNCTION(&, __bitwise_and)   _DEFINE_ARRAY_FUNCTION(<<, __shift_left)   _DEFINE_ARRAY_FUNCTION(>>, __shift_right)#undef _DEFINE_VALARRAY_FUNCTION} // namespace std#ifndef _GLIBCXX_EXPORT_TEMPLATE# include <bits/valarray_array.tcc>#endif#endif /* _ARRAY_H */

⌨️ 快捷键说明

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