diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2022-07-03 14:10:23 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2022-07-03 14:10:23 +0000 |
| commit | 145449b1e420787bb99721a429341fa6be3adfb6 (patch) | |
| tree | 1d56ae694a6de602e348dd80165cf881a36600ed /libcxx/include/valarray | |
| parent | ecbca9f5fb7d7613d2b94982c4825eb0d33d6842 (diff) | |
Diffstat (limited to 'libcxx/include/valarray')
| -rw-r--r-- | libcxx/include/valarray | 122 |
1 files changed, 60 insertions, 62 deletions
diff --git a/libcxx/include/valarray b/libcxx/include/valarray index a55d921872ba..6f8a3b84197b 100644 --- a/libcxx/include/valarray +++ b/libcxx/include/valarray @@ -341,17 +341,35 @@ template <class T> unspecified2 end(const valarray<T>& v); */ +#include <__algorithm/copy.h> +#include <__algorithm/count.h> +#include <__algorithm/fill.h> +#include <__algorithm/max_element.h> +#include <__algorithm/min.h> +#include <__algorithm/min_element.h> +#include <__algorithm/unwrap_iter.h> +#include <__assert> // all public C++ headers provide the assertion handler #include <__config> -#include <algorithm> +#include <__functional/operations.h> +#include <__memory/allocator.h> +#include <__memory/uninitialized_algorithms.h> +#include <__utility/move.h> +#include <__utility/swap.h> #include <cmath> #include <cstddef> -#include <functional> -#include <initializer_list> #include <new> #include <version> +#ifndef _LIBCPP_REMOVE_TRANSITIVE_INCLUDES +# include <algorithm> +# include <functional> +#endif + +// standard-mandated includes +#include <initializer_list> + #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header +# pragma GCC system_header #endif _LIBCPP_PUSH_MACROS @@ -912,10 +930,14 @@ public: #endif // _LIBCPP_CXX03_LANG // unary operators: - valarray operator+() const; - valarray operator-() const; - valarray operator~() const; - valarray<bool> operator!() const; + _LIBCPP_INLINE_VISIBILITY + __val_expr<_UnaryOp<__unary_plus<_Tp>, const valarray&> > operator+() const; + _LIBCPP_INLINE_VISIBILITY + __val_expr<_UnaryOp<negate<_Tp>, const valarray&> > operator-() const; + _LIBCPP_INLINE_VISIBILITY + __val_expr<_UnaryOp<__bit_not<_Tp>, const valarray&> > operator~() const; + _LIBCPP_INLINE_VISIBILITY + __val_expr<_UnaryOp<logical_not<_Tp>, const valarray&> > operator!() const; // computed assignment: _LIBCPP_INLINE_VISIBILITY @@ -1089,7 +1111,7 @@ template<class _Tp, size_t _Size> valarray(const _Tp(&)[_Size], size_t) -> valarray<_Tp>; #endif -_LIBCPP_EXTERN_TEMPLATE(_LIBCPP_FUNC_VIS void valarray<size_t>::resize(size_t, size_t)) +extern template _LIBCPP_FUNC_VIS void valarray<size_t>::resize(size_t, size_t); template <class _Op, class _Tp> struct _UnaryOp<_Op, valarray<_Tp> > @@ -1530,21 +1552,21 @@ public: gslice(size_t __start, const valarray<size_t>& __size, valarray<size_t>&& __stride) : __size_(__size), - __stride_(move(__stride)) + __stride_(std::move(__stride)) {__init(__start);} _LIBCPP_INLINE_VISIBILITY gslice(size_t __start, valarray<size_t>&& __size, const valarray<size_t>& __stride) - : __size_(move(__size)), + : __size_(std::move(__size)), __stride_(__stride) {__init(__start);} _LIBCPP_INLINE_VISIBILITY gslice(size_t __start, valarray<size_t>&& __size, valarray<size_t>&& __stride) - : __size_(move(__size)), - __stride_(move(__stride)) + : __size_(std::move(__size)), + __stride_(std::move(__stride)) {__init(__start);} #endif // _LIBCPP_CXX03_LANG @@ -1695,7 +1717,7 @@ private: #ifndef _LIBCPP_CXX03_LANG gslice_array(gslice&& __gs, const valarray<value_type>& __v) : __vp_(const_cast<value_type*>(__v.__begin_)), - __1d_(move(__gs.__1d_)) + __1d_(std::move(__gs.__1d_)) {} #endif // _LIBCPP_CXX03_LANG @@ -2389,7 +2411,7 @@ private: _LIBCPP_INLINE_VISIBILITY indirect_array(valarray<size_t>&& __ia, const valarray<value_type>& __v) : __vp_(const_cast<value_type*>(__v.__begin_)), - __1d_(move(__ia)) + __1d_(std::move(__ia)) {} #endif // _LIBCPP_CXX03_LANG @@ -2608,7 +2630,7 @@ private: _LIBCPP_INLINE_VISIBILITY __indirect_expr(valarray<size_t>&& __ia, const _RmExpr& __e) : __expr_(__e), - __1d_(move(__ia)) + __1d_(std::move(__ia)) {} #endif // _LIBCPP_CXX03_LANG @@ -3203,7 +3225,7 @@ inline __val_expr<__indirect_expr<const valarray<_Tp>&> > valarray<_Tp>::operator[](gslice&& __gs) const { - return __val_expr<__indirect_expr<const valarray&> >(__indirect_expr<const valarray&>(move(__gs.__1d_), *this)); + return __val_expr<__indirect_expr<const valarray&> >(__indirect_expr<const valarray&>(std::move(__gs.__1d_), *this)); } template <class _Tp> @@ -3211,7 +3233,7 @@ inline gslice_array<_Tp> valarray<_Tp>::operator[](gslice&& __gs) { - return gslice_array<value_type>(move(__gs), *this); + return gslice_array<value_type>(std::move(__gs), *this); } #endif // _LIBCPP_CXX03_LANG @@ -3239,7 +3261,7 @@ inline __val_expr<__mask_expr<const valarray<_Tp>&> > valarray<_Tp>::operator[](valarray<bool>&& __vb) const { - return __val_expr<__mask_expr<const valarray&> >(__mask_expr<const valarray&>(move(__vb), *this)); + return __val_expr<__mask_expr<const valarray&> >(__mask_expr<const valarray&>(std::move(__vb), *this)); } template <class _Tp> @@ -3247,7 +3269,7 @@ inline mask_array<_Tp> valarray<_Tp>::operator[](valarray<bool>&& __vb) { - return mask_array<value_type>(move(__vb), *this); + return mask_array<value_type>(std::move(__vb), *this); } #endif // _LIBCPP_CXX03_LANG @@ -3275,7 +3297,7 @@ inline __val_expr<__indirect_expr<const valarray<_Tp>&> > valarray<_Tp>::operator[](valarray<size_t>&& __vs) const { - return __val_expr<__indirect_expr<const valarray&> >(__indirect_expr<const valarray&>(move(__vs), *this)); + return __val_expr<__indirect_expr<const valarray&> >(__indirect_expr<const valarray&>(std::move(__vs), *this)); } template <class _Tp> @@ -3283,69 +3305,45 @@ inline indirect_array<_Tp> valarray<_Tp>::operator[](valarray<size_t>&& __vs) { - return indirect_array<value_type>(move(__vs), *this); + return indirect_array<value_type>(std::move(__vs), *this); } #endif // _LIBCPP_CXX03_LANG template <class _Tp> -valarray<_Tp> +inline +__val_expr<_UnaryOp<__unary_plus<_Tp>, const valarray<_Tp>&> > valarray<_Tp>::operator+() const { - valarray<value_type> __r; - size_t __n = size(); - if (__n) - { - __r.__begin_ = __r.__end_ = allocator<value_type>().allocate(__n); - for (const value_type* __p = __begin_; __n; ++__r.__end_, ++__p, --__n) - ::new ((void*)__r.__end_) value_type(+*__p); - } - return __r; + using _Op = _UnaryOp<__unary_plus<_Tp>, const valarray<_Tp>&>; + return __val_expr<_Op>(_Op(__unary_plus<_Tp>(), *this)); } template <class _Tp> -valarray<_Tp> +inline +__val_expr<_UnaryOp<negate<_Tp>, const valarray<_Tp>&> > valarray<_Tp>::operator-() const { - valarray<value_type> __r; - size_t __n = size(); - if (__n) - { - __r.__begin_ = __r.__end_ = allocator<value_type>().allocate(__n); - for (const value_type* __p = __begin_; __n; ++__r.__end_, ++__p, --__n) - ::new ((void*)__r.__end_) value_type(-*__p); - } - return __r; + using _Op = _UnaryOp<negate<_Tp>, const valarray<_Tp>&>; + return __val_expr<_Op>(_Op(negate<_Tp>(), *this)); } template <class _Tp> -valarray<_Tp> +inline +__val_expr<_UnaryOp<__bit_not<_Tp>, const valarray<_Tp>&> > valarray<_Tp>::operator~() const { - valarray<value_type> __r; - size_t __n = size(); - if (__n) - { - __r.__begin_ = __r.__end_ = allocator<value_type>().allocate(__n); - for (const value_type* __p = __begin_; __n; ++__r.__end_, ++__p, --__n) - ::new ((void*)__r.__end_) value_type(~*__p); - } - return __r; + using _Op = _UnaryOp<__bit_not<_Tp>, const valarray<_Tp>&>; + return __val_expr<_Op>(_Op(__bit_not<_Tp>(), *this)); } template <class _Tp> -valarray<bool> +inline +__val_expr<_UnaryOp<logical_not<_Tp>, const valarray<_Tp>&> > valarray<_Tp>::operator!() const { - valarray<bool> __r; - size_t __n = size(); - if (__n) - { - __r.__begin_ = __r.__end_ = allocator<bool>().allocate(__n); - for (const value_type* __p = __begin_; __n; ++__r.__end_, ++__p, --__n) - ::new ((void*)__r.__end_) bool(!*__p); - } - return __r; + using _Op = _UnaryOp<logical_not<_Tp>, const valarray<_Tp>&>; + return __val_expr<_Op>(_Op(logical_not<_Tp>(), *this)); } template <class _Tp> |
