146035553Spatrick// -*- C++ -*- 2*4bdff4beSrobert//===----------------------------------------------------------------------===// 346035553Spatrick// 446035553Spatrick// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 546035553Spatrick// See https://llvm.org/LICENSE.txt for license information. 646035553Spatrick// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 746035553Spatrick// 846035553Spatrick//===----------------------------------------------------------------------===// 946035553Spatrick 1046035553Spatrick#ifndef _LIBCPP_VALARRAY 1146035553Spatrick#define _LIBCPP_VALARRAY 1246035553Spatrick 1346035553Spatrick/* 1446035553Spatrick valarray synopsis 1546035553Spatrick 1646035553Spatricknamespace std 1746035553Spatrick{ 1846035553Spatrick 1946035553Spatricktemplate<class T> 2046035553Spatrickclass valarray 2146035553Spatrick{ 2246035553Spatrickpublic: 2346035553Spatrick typedef T value_type; 2446035553Spatrick 2546035553Spatrick // construct/destroy: 2646035553Spatrick valarray(); 2746035553Spatrick explicit valarray(size_t n); 2846035553Spatrick valarray(const value_type& x, size_t n); 2946035553Spatrick valarray(const value_type* px, size_t n); 3046035553Spatrick valarray(const valarray& v); 3146035553Spatrick valarray(valarray&& v) noexcept; 3246035553Spatrick valarray(const slice_array<value_type>& sa); 3346035553Spatrick valarray(const gslice_array<value_type>& ga); 3446035553Spatrick valarray(const mask_array<value_type>& ma); 3546035553Spatrick valarray(const indirect_array<value_type>& ia); 3646035553Spatrick valarray(initializer_list<value_type> il); 3746035553Spatrick ~valarray(); 3846035553Spatrick 3946035553Spatrick // assignment: 4046035553Spatrick valarray& operator=(const valarray& v); 4146035553Spatrick valarray& operator=(valarray&& v) noexcept; 4246035553Spatrick valarray& operator=(initializer_list<value_type> il); 4346035553Spatrick valarray& operator=(const value_type& x); 4446035553Spatrick valarray& operator=(const slice_array<value_type>& sa); 4546035553Spatrick valarray& operator=(const gslice_array<value_type>& ga); 4646035553Spatrick valarray& operator=(const mask_array<value_type>& ma); 4746035553Spatrick valarray& operator=(const indirect_array<value_type>& ia); 4846035553Spatrick 4946035553Spatrick // element access: 5046035553Spatrick const value_type& operator[](size_t i) const; 5146035553Spatrick value_type& operator[](size_t i); 5246035553Spatrick 5346035553Spatrick // subset operations: 5446035553Spatrick valarray operator[](slice s) const; 5546035553Spatrick slice_array<value_type> operator[](slice s); 5646035553Spatrick valarray operator[](const gslice& gs) const; 5746035553Spatrick gslice_array<value_type> operator[](const gslice& gs); 5846035553Spatrick valarray operator[](const valarray<bool>& vb) const; 5946035553Spatrick mask_array<value_type> operator[](const valarray<bool>& vb); 6046035553Spatrick valarray operator[](const valarray<size_t>& vs) const; 6146035553Spatrick indirect_array<value_type> operator[](const valarray<size_t>& vs); 6246035553Spatrick 6346035553Spatrick // unary operators: 6446035553Spatrick valarray operator+() const; 6546035553Spatrick valarray operator-() const; 6646035553Spatrick valarray operator~() const; 6746035553Spatrick valarray<bool> operator!() const; 6846035553Spatrick 6946035553Spatrick // computed assignment: 7046035553Spatrick valarray& operator*= (const value_type& x); 7146035553Spatrick valarray& operator/= (const value_type& x); 7246035553Spatrick valarray& operator%= (const value_type& x); 7346035553Spatrick valarray& operator+= (const value_type& x); 7446035553Spatrick valarray& operator-= (const value_type& x); 7546035553Spatrick valarray& operator^= (const value_type& x); 7646035553Spatrick valarray& operator&= (const value_type& x); 7746035553Spatrick valarray& operator|= (const value_type& x); 7846035553Spatrick valarray& operator<<=(const value_type& x); 7946035553Spatrick valarray& operator>>=(const value_type& x); 8046035553Spatrick 8146035553Spatrick valarray& operator*= (const valarray& v); 8246035553Spatrick valarray& operator/= (const valarray& v); 8346035553Spatrick valarray& operator%= (const valarray& v); 8446035553Spatrick valarray& operator+= (const valarray& v); 8546035553Spatrick valarray& operator-= (const valarray& v); 8646035553Spatrick valarray& operator^= (const valarray& v); 8746035553Spatrick valarray& operator|= (const valarray& v); 8846035553Spatrick valarray& operator&= (const valarray& v); 8946035553Spatrick valarray& operator<<=(const valarray& v); 9046035553Spatrick valarray& operator>>=(const valarray& v); 9146035553Spatrick 9246035553Spatrick // member functions: 9346035553Spatrick void swap(valarray& v) noexcept; 9446035553Spatrick 9546035553Spatrick size_t size() const; 9646035553Spatrick 9746035553Spatrick value_type sum() const; 9846035553Spatrick value_type min() const; 9946035553Spatrick value_type max() const; 10046035553Spatrick 10146035553Spatrick valarray shift (int i) const; 10246035553Spatrick valarray cshift(int i) const; 10346035553Spatrick valarray apply(value_type f(value_type)) const; 10446035553Spatrick valarray apply(value_type f(const value_type&)) const; 10546035553Spatrick void resize(size_t n, value_type x = value_type()); 10646035553Spatrick}; 10746035553Spatrick 108*4bdff4beSroberttemplate<class T, size_t cnt> valarray(const T(&)[cnt], size_t) -> valarray<T>; 109*4bdff4beSrobert 11046035553Spatrickclass slice 11146035553Spatrick{ 11246035553Spatrickpublic: 11346035553Spatrick slice(); 11446035553Spatrick slice(size_t start, size_t size, size_t stride); 11546035553Spatrick 11646035553Spatrick size_t start() const; 11746035553Spatrick size_t size() const; 11846035553Spatrick size_t stride() const; 11946035553Spatrick}; 12046035553Spatrick 12146035553Spatricktemplate <class T> 12246035553Spatrickclass slice_array 12346035553Spatrick{ 12446035553Spatrickpublic: 12546035553Spatrick typedef T value_type; 12646035553Spatrick 12746035553Spatrick const slice_array& operator=(const slice_array& sa) const; 12846035553Spatrick void operator= (const valarray<value_type>& v) const; 12946035553Spatrick void operator*= (const valarray<value_type>& v) const; 13046035553Spatrick void operator/= (const valarray<value_type>& v) const; 13146035553Spatrick void operator%= (const valarray<value_type>& v) const; 13246035553Spatrick void operator+= (const valarray<value_type>& v) const; 13346035553Spatrick void operator-= (const valarray<value_type>& v) const; 13446035553Spatrick void operator^= (const valarray<value_type>& v) const; 13546035553Spatrick void operator&= (const valarray<value_type>& v) const; 13646035553Spatrick void operator|= (const valarray<value_type>& v) const; 13746035553Spatrick void operator<<=(const valarray<value_type>& v) const; 13846035553Spatrick void operator>>=(const valarray<value_type>& v) const; 13946035553Spatrick 14046035553Spatrick void operator=(const value_type& x) const; 14176d0caaeSpatrick void operator=(const valarray<T>& val_arr) const; 14246035553Spatrick 14346035553Spatrick slice_array() = delete; 14446035553Spatrick}; 14546035553Spatrick 14646035553Spatrickclass gslice 14746035553Spatrick{ 14846035553Spatrickpublic: 14946035553Spatrick gslice(); 15046035553Spatrick gslice(size_t start, const valarray<size_t>& size, 15146035553Spatrick const valarray<size_t>& stride); 15246035553Spatrick 15346035553Spatrick size_t start() const; 15446035553Spatrick valarray<size_t> size() const; 15546035553Spatrick valarray<size_t> stride() const; 15646035553Spatrick}; 15746035553Spatrick 15846035553Spatricktemplate <class T> 15946035553Spatrickclass gslice_array 16046035553Spatrick{ 16146035553Spatrickpublic: 16246035553Spatrick typedef T value_type; 16346035553Spatrick 16446035553Spatrick void operator= (const valarray<value_type>& v) const; 16546035553Spatrick void operator*= (const valarray<value_type>& v) const; 16646035553Spatrick void operator/= (const valarray<value_type>& v) const; 16746035553Spatrick void operator%= (const valarray<value_type>& v) const; 16846035553Spatrick void operator+= (const valarray<value_type>& v) const; 16946035553Spatrick void operator-= (const valarray<value_type>& v) const; 17046035553Spatrick void operator^= (const valarray<value_type>& v) const; 17146035553Spatrick void operator&= (const valarray<value_type>& v) const; 17246035553Spatrick void operator|= (const valarray<value_type>& v) const; 17346035553Spatrick void operator<<=(const valarray<value_type>& v) const; 17446035553Spatrick void operator>>=(const valarray<value_type>& v) const; 17546035553Spatrick 17646035553Spatrick gslice_array(const gslice_array& ga); 17746035553Spatrick ~gslice_array(); 17846035553Spatrick const gslice_array& operator=(const gslice_array& ga) const; 17946035553Spatrick void operator=(const value_type& x) const; 18046035553Spatrick 18146035553Spatrick gslice_array() = delete; 18246035553Spatrick}; 18346035553Spatrick 18446035553Spatricktemplate <class T> 18546035553Spatrickclass mask_array 18646035553Spatrick{ 18746035553Spatrickpublic: 18846035553Spatrick typedef T value_type; 18946035553Spatrick 19046035553Spatrick void operator= (const valarray<value_type>& v) const; 19146035553Spatrick void operator*= (const valarray<value_type>& v) const; 19246035553Spatrick void operator/= (const valarray<value_type>& v) const; 19346035553Spatrick void operator%= (const valarray<value_type>& v) const; 19446035553Spatrick void operator+= (const valarray<value_type>& v) const; 19546035553Spatrick void operator-= (const valarray<value_type>& v) const; 19646035553Spatrick void operator^= (const valarray<value_type>& v) const; 19746035553Spatrick void operator&= (const valarray<value_type>& v) const; 19846035553Spatrick void operator|= (const valarray<value_type>& v) const; 19946035553Spatrick void operator<<=(const valarray<value_type>& v) const; 20046035553Spatrick void operator>>=(const valarray<value_type>& v) const; 20146035553Spatrick 20246035553Spatrick mask_array(const mask_array& ma); 20346035553Spatrick ~mask_array(); 20446035553Spatrick const mask_array& operator=(const mask_array& ma) const; 20546035553Spatrick void operator=(const value_type& x) const; 20646035553Spatrick 20746035553Spatrick mask_array() = delete; 20846035553Spatrick}; 20946035553Spatrick 21046035553Spatricktemplate <class T> 21146035553Spatrickclass indirect_array 21246035553Spatrick{ 21346035553Spatrickpublic: 21446035553Spatrick typedef T value_type; 21546035553Spatrick 21646035553Spatrick void operator= (const valarray<value_type>& v) const; 21746035553Spatrick void operator*= (const valarray<value_type>& v) const; 21846035553Spatrick void operator/= (const valarray<value_type>& v) const; 21946035553Spatrick void operator%= (const valarray<value_type>& v) const; 22046035553Spatrick void operator+= (const valarray<value_type>& v) const; 22146035553Spatrick void operator-= (const valarray<value_type>& v) const; 22246035553Spatrick void operator^= (const valarray<value_type>& v) const; 22346035553Spatrick void operator&= (const valarray<value_type>& v) const; 22446035553Spatrick void operator|= (const valarray<value_type>& v) const; 22546035553Spatrick void operator<<=(const valarray<value_type>& v) const; 22646035553Spatrick void operator>>=(const valarray<value_type>& v) const; 22746035553Spatrick 22846035553Spatrick indirect_array(const indirect_array& ia); 22946035553Spatrick ~indirect_array(); 23046035553Spatrick const indirect_array& operator=(const indirect_array& ia) const; 23146035553Spatrick void operator=(const value_type& x) const; 23246035553Spatrick 23346035553Spatrick indirect_array() = delete; 23446035553Spatrick}; 23546035553Spatrick 23646035553Spatricktemplate<class T> void swap(valarray<T>& x, valarray<T>& y) noexcept; 23746035553Spatrick 23846035553Spatricktemplate<class T> valarray<T> operator* (const valarray<T>& x, const valarray<T>& y); 23946035553Spatricktemplate<class T> valarray<T> operator* (const valarray<T>& x, const T& y); 24046035553Spatricktemplate<class T> valarray<T> operator* (const T& x, const valarray<T>& y); 24146035553Spatrick 24246035553Spatricktemplate<class T> valarray<T> operator/ (const valarray<T>& x, const valarray<T>& y); 24346035553Spatricktemplate<class T> valarray<T> operator/ (const valarray<T>& x, const T& y); 24446035553Spatricktemplate<class T> valarray<T> operator/ (const T& x, const valarray<T>& y); 24546035553Spatrick 24646035553Spatricktemplate<class T> valarray<T> operator% (const valarray<T>& x, const valarray<T>& y); 24746035553Spatricktemplate<class T> valarray<T> operator% (const valarray<T>& x, const T& y); 24846035553Spatricktemplate<class T> valarray<T> operator% (const T& x, const valarray<T>& y); 24946035553Spatrick 25046035553Spatricktemplate<class T> valarray<T> operator+ (const valarray<T>& x, const valarray<T>& y); 25146035553Spatricktemplate<class T> valarray<T> operator+ (const valarray<T>& x, const T& y); 25246035553Spatricktemplate<class T> valarray<T> operator+ (const T& x, const valarray<T>& y); 25346035553Spatrick 25446035553Spatricktemplate<class T> valarray<T> operator- (const valarray<T>& x, const valarray<T>& y); 25546035553Spatricktemplate<class T> valarray<T> operator- (const valarray<T>& x, const T& y); 25646035553Spatricktemplate<class T> valarray<T> operator- (const T& x, const valarray<T>& y); 25746035553Spatrick 25846035553Spatricktemplate<class T> valarray<T> operator^ (const valarray<T>& x, const valarray<T>& y); 25946035553Spatricktemplate<class T> valarray<T> operator^ (const valarray<T>& x, const T& y); 26046035553Spatricktemplate<class T> valarray<T> operator^ (const T& x, const valarray<T>& y); 26146035553Spatrick 26246035553Spatricktemplate<class T> valarray<T> operator& (const valarray<T>& x, const valarray<T>& y); 26346035553Spatricktemplate<class T> valarray<T> operator& (const valarray<T>& x, const T& y); 26446035553Spatricktemplate<class T> valarray<T> operator& (const T& x, const valarray<T>& y); 26546035553Spatrick 26646035553Spatricktemplate<class T> valarray<T> operator| (const valarray<T>& x, const valarray<T>& y); 26746035553Spatricktemplate<class T> valarray<T> operator| (const valarray<T>& x, const T& y); 26846035553Spatricktemplate<class T> valarray<T> operator| (const T& x, const valarray<T>& y); 26946035553Spatrick 27046035553Spatricktemplate<class T> valarray<T> operator<<(const valarray<T>& x, const valarray<T>& y); 27146035553Spatricktemplate<class T> valarray<T> operator<<(const valarray<T>& x, const T& y); 27246035553Spatricktemplate<class T> valarray<T> operator<<(const T& x, const valarray<T>& y); 27346035553Spatrick 27446035553Spatricktemplate<class T> valarray<T> operator>>(const valarray<T>& x, const valarray<T>& y); 27546035553Spatricktemplate<class T> valarray<T> operator>>(const valarray<T>& x, const T& y); 27646035553Spatricktemplate<class T> valarray<T> operator>>(const T& x, const valarray<T>& y); 27746035553Spatrick 27846035553Spatricktemplate<class T> valarray<bool> operator&&(const valarray<T>& x, const valarray<T>& y); 27946035553Spatricktemplate<class T> valarray<bool> operator&&(const valarray<T>& x, const T& y); 28046035553Spatricktemplate<class T> valarray<bool> operator&&(const T& x, const valarray<T>& y); 28146035553Spatrick 28246035553Spatricktemplate<class T> valarray<bool> operator||(const valarray<T>& x, const valarray<T>& y); 28346035553Spatricktemplate<class T> valarray<bool> operator||(const valarray<T>& x, const T& y); 28446035553Spatricktemplate<class T> valarray<bool> operator||(const T& x, const valarray<T>& y); 28546035553Spatrick 28646035553Spatricktemplate<class T> valarray<bool> operator==(const valarray<T>& x, const valarray<T>& y); 28746035553Spatricktemplate<class T> valarray<bool> operator==(const valarray<T>& x, const T& y); 28846035553Spatricktemplate<class T> valarray<bool> operator==(const T& x, const valarray<T>& y); 28946035553Spatrick 29046035553Spatricktemplate<class T> valarray<bool> operator!=(const valarray<T>& x, const valarray<T>& y); 29146035553Spatricktemplate<class T> valarray<bool> operator!=(const valarray<T>& x, const T& y); 29246035553Spatricktemplate<class T> valarray<bool> operator!=(const T& x, const valarray<T>& y); 29346035553Spatrick 29446035553Spatricktemplate<class T> valarray<bool> operator< (const valarray<T>& x, const valarray<T>& y); 29546035553Spatricktemplate<class T> valarray<bool> operator< (const valarray<T>& x, const T& y); 29646035553Spatricktemplate<class T> valarray<bool> operator< (const T& x, const valarray<T>& y); 29746035553Spatrick 29846035553Spatricktemplate<class T> valarray<bool> operator> (const valarray<T>& x, const valarray<T>& y); 29946035553Spatricktemplate<class T> valarray<bool> operator> (const valarray<T>& x, const T& y); 30046035553Spatricktemplate<class T> valarray<bool> operator> (const T& x, const valarray<T>& y); 30146035553Spatrick 30246035553Spatricktemplate<class T> valarray<bool> operator<=(const valarray<T>& x, const valarray<T>& y); 30346035553Spatricktemplate<class T> valarray<bool> operator<=(const valarray<T>& x, const T& y); 30446035553Spatricktemplate<class T> valarray<bool> operator<=(const T& x, const valarray<T>& y); 30546035553Spatrick 30646035553Spatricktemplate<class T> valarray<bool> operator>=(const valarray<T>& x, const valarray<T>& y); 30746035553Spatricktemplate<class T> valarray<bool> operator>=(const valarray<T>& x, const T& y); 30846035553Spatricktemplate<class T> valarray<bool> operator>=(const T& x, const valarray<T>& y); 30946035553Spatrick 31046035553Spatricktemplate<class T> valarray<T> abs (const valarray<T>& x); 31146035553Spatricktemplate<class T> valarray<T> acos (const valarray<T>& x); 31246035553Spatricktemplate<class T> valarray<T> asin (const valarray<T>& x); 31346035553Spatricktemplate<class T> valarray<T> atan (const valarray<T>& x); 31446035553Spatrick 31546035553Spatricktemplate<class T> valarray<T> atan2(const valarray<T>& x, const valarray<T>& y); 31646035553Spatricktemplate<class T> valarray<T> atan2(const valarray<T>& x, const T& y); 31746035553Spatricktemplate<class T> valarray<T> atan2(const T& x, const valarray<T>& y); 31846035553Spatrick 31946035553Spatricktemplate<class T> valarray<T> cos (const valarray<T>& x); 32046035553Spatricktemplate<class T> valarray<T> cosh (const valarray<T>& x); 32146035553Spatricktemplate<class T> valarray<T> exp (const valarray<T>& x); 32246035553Spatricktemplate<class T> valarray<T> log (const valarray<T>& x); 32346035553Spatricktemplate<class T> valarray<T> log10(const valarray<T>& x); 32446035553Spatrick 32546035553Spatricktemplate<class T> valarray<T> pow(const valarray<T>& x, const valarray<T>& y); 32646035553Spatricktemplate<class T> valarray<T> pow(const valarray<T>& x, const T& y); 32746035553Spatricktemplate<class T> valarray<T> pow(const T& x, const valarray<T>& y); 32846035553Spatrick 32946035553Spatricktemplate<class T> valarray<T> sin (const valarray<T>& x); 33046035553Spatricktemplate<class T> valarray<T> sinh (const valarray<T>& x); 33146035553Spatricktemplate<class T> valarray<T> sqrt (const valarray<T>& x); 33246035553Spatricktemplate<class T> valarray<T> tan (const valarray<T>& x); 33346035553Spatricktemplate<class T> valarray<T> tanh (const valarray<T>& x); 33446035553Spatrick 33546035553Spatricktemplate <class T> unspecified1 begin(valarray<T>& v); 33646035553Spatricktemplate <class T> unspecified2 begin(const valarray<T>& v); 33746035553Spatricktemplate <class T> unspecified1 end(valarray<T>& v); 33846035553Spatricktemplate <class T> unspecified2 end(const valarray<T>& v); 33946035553Spatrick 34046035553Spatrick} // std 34146035553Spatrick 34246035553Spatrick*/ 34346035553Spatrick 344*4bdff4beSrobert#include <__algorithm/copy.h> 345*4bdff4beSrobert#include <__algorithm/count.h> 346*4bdff4beSrobert#include <__algorithm/fill.h> 347*4bdff4beSrobert#include <__algorithm/max_element.h> 348*4bdff4beSrobert#include <__algorithm/min.h> 349*4bdff4beSrobert#include <__algorithm/min_element.h> 350*4bdff4beSrobert#include <__algorithm/unwrap_iter.h> 351*4bdff4beSrobert#include <__assert> // all public C++ headers provide the assertion handler 35246035553Spatrick#include <__config> 353*4bdff4beSrobert#include <__functional/operations.h> 354*4bdff4beSrobert#include <__memory/allocator.h> 355*4bdff4beSrobert#include <__memory/uninitialized_algorithms.h> 356*4bdff4beSrobert#include <__type_traits/remove_reference.h> 357*4bdff4beSrobert#include <__utility/move.h> 358*4bdff4beSrobert#include <__utility/swap.h> 35976d0caaeSpatrick#include <cmath> 36076d0caaeSpatrick#include <cstddef> 36146035553Spatrick#include <new> 362*4bdff4beSrobert#include <version> 363*4bdff4beSrobert 364*4bdff4beSrobert// standard-mandated includes 365*4bdff4beSrobert 366*4bdff4beSrobert// [valarray.syn] 367*4bdff4beSrobert#include <initializer_list> 36846035553Spatrick 36946035553Spatrick#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 37046035553Spatrick# pragma GCC system_header 37146035553Spatrick#endif 37246035553Spatrick 37346035553Spatrick_LIBCPP_PUSH_MACROS 37446035553Spatrick#include <__undef_macros> 37546035553Spatrick 37646035553Spatrick_LIBCPP_BEGIN_NAMESPACE_STD 37746035553Spatrick 37846035553Spatricktemplate<class _Tp> class _LIBCPP_TEMPLATE_VIS valarray; 37946035553Spatrick 38046035553Spatrickclass _LIBCPP_TEMPLATE_VIS slice 38146035553Spatrick{ 38246035553Spatrick size_t __start_; 38346035553Spatrick size_t __size_; 38446035553Spatrick size_t __stride_; 38546035553Spatrickpublic: 38646035553Spatrick _LIBCPP_INLINE_VISIBILITY 38746035553Spatrick slice() 38846035553Spatrick : __start_(0), 38946035553Spatrick __size_(0), 39046035553Spatrick __stride_(0) 39146035553Spatrick {} 39246035553Spatrick 39346035553Spatrick _LIBCPP_INLINE_VISIBILITY 39446035553Spatrick slice(size_t __start, size_t __size, size_t __stride) 39546035553Spatrick : __start_(__start), 39646035553Spatrick __size_(__size), 39746035553Spatrick __stride_(__stride) 39846035553Spatrick {} 39946035553Spatrick 40046035553Spatrick _LIBCPP_INLINE_VISIBILITY size_t start() const {return __start_;} 40146035553Spatrick _LIBCPP_INLINE_VISIBILITY size_t size() const {return __size_;} 40246035553Spatrick _LIBCPP_INLINE_VISIBILITY size_t stride() const {return __stride_;} 40346035553Spatrick}; 40446035553Spatrick 40546035553Spatricktemplate <class _Tp> class _LIBCPP_TEMPLATE_VIS slice_array; 40646035553Spatrickclass _LIBCPP_TYPE_VIS gslice; 40746035553Spatricktemplate <class _Tp> class _LIBCPP_TEMPLATE_VIS gslice_array; 40846035553Spatricktemplate <class _Tp> class _LIBCPP_TEMPLATE_VIS mask_array; 40946035553Spatricktemplate <class _Tp> class _LIBCPP_TEMPLATE_VIS indirect_array; 41046035553Spatrick 41146035553Spatricktemplate <class _Tp> 41246035553Spatrick_LIBCPP_INLINE_VISIBILITY 41346035553Spatrick_Tp* 41446035553Spatrickbegin(valarray<_Tp>& __v); 41546035553Spatrick 41646035553Spatricktemplate <class _Tp> 41746035553Spatrick_LIBCPP_INLINE_VISIBILITY 41846035553Spatrickconst _Tp* 41946035553Spatrickbegin(const valarray<_Tp>& __v); 42046035553Spatrick 42146035553Spatricktemplate <class _Tp> 42246035553Spatrick_LIBCPP_INLINE_VISIBILITY 42346035553Spatrick_Tp* 42446035553Spatrickend(valarray<_Tp>& __v); 42546035553Spatrick 42646035553Spatricktemplate <class _Tp> 42746035553Spatrick_LIBCPP_INLINE_VISIBILITY 42846035553Spatrickconst _Tp* 42946035553Spatrickend(const valarray<_Tp>& __v); 43046035553Spatrick 43146035553Spatricktemplate <class _Op, class _A0> 43246035553Spatrickstruct _UnaryOp 43346035553Spatrick{ 43476d0caaeSpatrick typedef typename _Op::__result_type __result_type; 43576d0caaeSpatrick typedef typename decay<__result_type>::type value_type; 43646035553Spatrick 43746035553Spatrick _Op __op_; 43846035553Spatrick _A0 __a0_; 43946035553Spatrick 44046035553Spatrick _LIBCPP_INLINE_VISIBILITY 44146035553Spatrick _UnaryOp(const _Op& __op, const _A0& __a0) : __op_(__op), __a0_(__a0) {} 44246035553Spatrick 44346035553Spatrick _LIBCPP_INLINE_VISIBILITY 44476d0caaeSpatrick __result_type operator[](size_t __i) const {return __op_(__a0_[__i]);} 44546035553Spatrick 44646035553Spatrick _LIBCPP_INLINE_VISIBILITY 44746035553Spatrick size_t size() const {return __a0_.size();} 44846035553Spatrick}; 44946035553Spatrick 45046035553Spatricktemplate <class _Op, class _A0, class _A1> 45146035553Spatrickstruct _BinaryOp 45246035553Spatrick{ 45376d0caaeSpatrick typedef typename _Op::__result_type __result_type; 45476d0caaeSpatrick typedef typename decay<__result_type>::type value_type; 45546035553Spatrick 45646035553Spatrick _Op __op_; 45746035553Spatrick _A0 __a0_; 45846035553Spatrick _A1 __a1_; 45946035553Spatrick 46046035553Spatrick _LIBCPP_INLINE_VISIBILITY 46146035553Spatrick _BinaryOp(const _Op& __op, const _A0& __a0, const _A1& __a1) 46246035553Spatrick : __op_(__op), __a0_(__a0), __a1_(__a1) {} 46346035553Spatrick 46446035553Spatrick _LIBCPP_INLINE_VISIBILITY 46576d0caaeSpatrick __result_type operator[](size_t __i) const {return __op_(__a0_[__i], __a1_[__i]);} 46646035553Spatrick 46746035553Spatrick _LIBCPP_INLINE_VISIBILITY 46846035553Spatrick size_t size() const {return __a0_.size();} 46946035553Spatrick}; 47046035553Spatrick 47146035553Spatricktemplate <class _Tp> 47246035553Spatrickclass __scalar_expr 47346035553Spatrick{ 47446035553Spatrickpublic: 47546035553Spatrick typedef _Tp value_type; 47676d0caaeSpatrick typedef const _Tp& __result_type; 47746035553Spatrickprivate: 47846035553Spatrick const value_type& __t_; 47946035553Spatrick size_t __s_; 48046035553Spatrickpublic: 48146035553Spatrick _LIBCPP_INLINE_VISIBILITY 48246035553Spatrick explicit __scalar_expr(const value_type& __t, size_t __s) : __t_(__t), __s_(__s) {} 48346035553Spatrick 48446035553Spatrick _LIBCPP_INLINE_VISIBILITY 48576d0caaeSpatrick __result_type operator[](size_t) const {return __t_;} 48646035553Spatrick 48746035553Spatrick _LIBCPP_INLINE_VISIBILITY 48846035553Spatrick size_t size() const {return __s_;} 48946035553Spatrick}; 49046035553Spatrick 49146035553Spatricktemplate <class _Tp> 49276d0caaeSpatrickstruct __unary_plus 49346035553Spatrick{ 49476d0caaeSpatrick typedef _Tp __result_type; 49546035553Spatrick _LIBCPP_INLINE_VISIBILITY 49646035553Spatrick _Tp operator()(const _Tp& __x) const 49746035553Spatrick {return +__x;} 49846035553Spatrick}; 49946035553Spatrick 50046035553Spatricktemplate <class _Tp> 50176d0caaeSpatrickstruct __bit_not 50246035553Spatrick{ 50376d0caaeSpatrick typedef _Tp __result_type; 50446035553Spatrick _LIBCPP_INLINE_VISIBILITY 50546035553Spatrick _Tp operator()(const _Tp& __x) const 50646035553Spatrick {return ~__x;} 50746035553Spatrick}; 50846035553Spatrick 50946035553Spatricktemplate <class _Tp> 51076d0caaeSpatrickstruct __bit_shift_left 51146035553Spatrick{ 51276d0caaeSpatrick typedef _Tp __result_type; 51346035553Spatrick _LIBCPP_INLINE_VISIBILITY 51446035553Spatrick _Tp operator()(const _Tp& __x, const _Tp& __y) const 51546035553Spatrick {return __x << __y;} 51646035553Spatrick}; 51746035553Spatrick 51846035553Spatricktemplate <class _Tp> 51976d0caaeSpatrickstruct __bit_shift_right 52046035553Spatrick{ 52176d0caaeSpatrick typedef _Tp __result_type; 52246035553Spatrick _LIBCPP_INLINE_VISIBILITY 52346035553Spatrick _Tp operator()(const _Tp& __x, const _Tp& __y) const 52446035553Spatrick {return __x >> __y;} 52546035553Spatrick}; 52646035553Spatrick 52746035553Spatricktemplate <class _Tp, class _Fp> 52876d0caaeSpatrickstruct __apply_expr 52946035553Spatrick{ 53046035553Spatrickprivate: 53146035553Spatrick _Fp __f_; 53246035553Spatrickpublic: 53376d0caaeSpatrick typedef _Tp __result_type; 53476d0caaeSpatrick 53546035553Spatrick _LIBCPP_INLINE_VISIBILITY 53646035553Spatrick explicit __apply_expr(_Fp __f) : __f_(__f) {} 53746035553Spatrick 53846035553Spatrick _LIBCPP_INLINE_VISIBILITY 53946035553Spatrick _Tp operator()(const _Tp& __x) const 54046035553Spatrick {return __f_(__x);} 54146035553Spatrick}; 54246035553Spatrick 54346035553Spatricktemplate <class _Tp> 54476d0caaeSpatrickstruct __abs_expr 54546035553Spatrick{ 54676d0caaeSpatrick typedef _Tp __result_type; 54746035553Spatrick _LIBCPP_INLINE_VISIBILITY 54846035553Spatrick _Tp operator()(const _Tp& __x) const 549*4bdff4beSrobert {return std::abs(__x);} 55046035553Spatrick}; 55146035553Spatrick 55246035553Spatricktemplate <class _Tp> 55376d0caaeSpatrickstruct __acos_expr 55446035553Spatrick{ 55576d0caaeSpatrick typedef _Tp __result_type; 55646035553Spatrick _LIBCPP_INLINE_VISIBILITY 55746035553Spatrick _Tp operator()(const _Tp& __x) const 558*4bdff4beSrobert {return std::acos(__x);} 55946035553Spatrick}; 56046035553Spatrick 56146035553Spatricktemplate <class _Tp> 56276d0caaeSpatrickstruct __asin_expr 56346035553Spatrick{ 56476d0caaeSpatrick typedef _Tp __result_type; 56546035553Spatrick _LIBCPP_INLINE_VISIBILITY 56646035553Spatrick _Tp operator()(const _Tp& __x) const 567*4bdff4beSrobert {return std::asin(__x);} 56846035553Spatrick}; 56946035553Spatrick 57046035553Spatricktemplate <class _Tp> 57176d0caaeSpatrickstruct __atan_expr 57246035553Spatrick{ 57376d0caaeSpatrick typedef _Tp __result_type; 57446035553Spatrick _LIBCPP_INLINE_VISIBILITY 57546035553Spatrick _Tp operator()(const _Tp& __x) const 576*4bdff4beSrobert {return std::atan(__x);} 57746035553Spatrick}; 57846035553Spatrick 57946035553Spatricktemplate <class _Tp> 58076d0caaeSpatrickstruct __atan2_expr 58146035553Spatrick{ 58276d0caaeSpatrick typedef _Tp __result_type; 58346035553Spatrick _LIBCPP_INLINE_VISIBILITY 58446035553Spatrick _Tp operator()(const _Tp& __x, const _Tp& __y) const 585*4bdff4beSrobert {return std::atan2(__x, __y);} 58646035553Spatrick}; 58746035553Spatrick 58846035553Spatricktemplate <class _Tp> 58976d0caaeSpatrickstruct __cos_expr 59046035553Spatrick{ 59176d0caaeSpatrick typedef _Tp __result_type; 59246035553Spatrick _LIBCPP_INLINE_VISIBILITY 59346035553Spatrick _Tp operator()(const _Tp& __x) const 594*4bdff4beSrobert {return std::cos(__x);} 59546035553Spatrick}; 59646035553Spatrick 59746035553Spatricktemplate <class _Tp> 59876d0caaeSpatrickstruct __cosh_expr 59946035553Spatrick{ 60076d0caaeSpatrick typedef _Tp __result_type; 60146035553Spatrick _LIBCPP_INLINE_VISIBILITY 60246035553Spatrick _Tp operator()(const _Tp& __x) const 603*4bdff4beSrobert {return std::cosh(__x);} 60446035553Spatrick}; 60546035553Spatrick 60646035553Spatricktemplate <class _Tp> 60776d0caaeSpatrickstruct __exp_expr 60846035553Spatrick{ 60976d0caaeSpatrick typedef _Tp __result_type; 61046035553Spatrick _LIBCPP_INLINE_VISIBILITY 61146035553Spatrick _Tp operator()(const _Tp& __x) const 612*4bdff4beSrobert {return std::exp(__x);} 61346035553Spatrick}; 61446035553Spatrick 61546035553Spatricktemplate <class _Tp> 61676d0caaeSpatrickstruct __log_expr 61746035553Spatrick{ 61876d0caaeSpatrick typedef _Tp __result_type; 61946035553Spatrick _LIBCPP_INLINE_VISIBILITY 62046035553Spatrick _Tp operator()(const _Tp& __x) const 621*4bdff4beSrobert {return std::log(__x);} 62246035553Spatrick}; 62346035553Spatrick 62446035553Spatricktemplate <class _Tp> 62576d0caaeSpatrickstruct __log10_expr 62646035553Spatrick{ 62776d0caaeSpatrick typedef _Tp __result_type; 62846035553Spatrick _LIBCPP_INLINE_VISIBILITY 62946035553Spatrick _Tp operator()(const _Tp& __x) const 630*4bdff4beSrobert {return std::log10(__x);} 63146035553Spatrick}; 63246035553Spatrick 63346035553Spatricktemplate <class _Tp> 63476d0caaeSpatrickstruct __pow_expr 63546035553Spatrick{ 63676d0caaeSpatrick typedef _Tp __result_type; 63746035553Spatrick _LIBCPP_INLINE_VISIBILITY 63846035553Spatrick _Tp operator()(const _Tp& __x, const _Tp& __y) const 639*4bdff4beSrobert {return std::pow(__x, __y);} 64046035553Spatrick}; 64146035553Spatrick 64246035553Spatricktemplate <class _Tp> 64376d0caaeSpatrickstruct __sin_expr 64446035553Spatrick{ 64576d0caaeSpatrick typedef _Tp __result_type; 64646035553Spatrick _LIBCPP_INLINE_VISIBILITY 64746035553Spatrick _Tp operator()(const _Tp& __x) const 648*4bdff4beSrobert {return std::sin(__x);} 64946035553Spatrick}; 65046035553Spatrick 65146035553Spatricktemplate <class _Tp> 65276d0caaeSpatrickstruct __sinh_expr 65346035553Spatrick{ 65476d0caaeSpatrick typedef _Tp __result_type; 65546035553Spatrick _LIBCPP_INLINE_VISIBILITY 65646035553Spatrick _Tp operator()(const _Tp& __x) const 657*4bdff4beSrobert {return std::sinh(__x);} 65846035553Spatrick}; 65946035553Spatrick 66046035553Spatricktemplate <class _Tp> 66176d0caaeSpatrickstruct __sqrt_expr 66246035553Spatrick{ 66376d0caaeSpatrick typedef _Tp __result_type; 66446035553Spatrick _LIBCPP_INLINE_VISIBILITY 66546035553Spatrick _Tp operator()(const _Tp& __x) const 666*4bdff4beSrobert {return std::sqrt(__x);} 66746035553Spatrick}; 66846035553Spatrick 66946035553Spatricktemplate <class _Tp> 67076d0caaeSpatrickstruct __tan_expr 67146035553Spatrick{ 67276d0caaeSpatrick typedef _Tp __result_type; 67346035553Spatrick _LIBCPP_INLINE_VISIBILITY 67446035553Spatrick _Tp operator()(const _Tp& __x) const 675*4bdff4beSrobert {return std::tan(__x);} 67646035553Spatrick}; 67746035553Spatrick 67846035553Spatricktemplate <class _Tp> 67976d0caaeSpatrickstruct __tanh_expr 68046035553Spatrick{ 68176d0caaeSpatrick typedef _Tp __result_type; 68246035553Spatrick _LIBCPP_INLINE_VISIBILITY 68346035553Spatrick _Tp operator()(const _Tp& __x) const 684*4bdff4beSrobert {return std::tanh(__x);} 68546035553Spatrick}; 68646035553Spatrick 68746035553Spatricktemplate <class _ValExpr> 68846035553Spatrickclass __slice_expr 68946035553Spatrick{ 690*4bdff4beSrobert typedef __libcpp_remove_reference_t<_ValExpr> _RmExpr; 69146035553Spatrickpublic: 69246035553Spatrick typedef typename _RmExpr::value_type value_type; 69376d0caaeSpatrick typedef value_type __result_type; 69446035553Spatrick 69546035553Spatrickprivate: 69646035553Spatrick _ValExpr __expr_; 69746035553Spatrick size_t __start_; 69846035553Spatrick size_t __size_; 69946035553Spatrick size_t __stride_; 70046035553Spatrick 70146035553Spatrick _LIBCPP_INLINE_VISIBILITY 70246035553Spatrick __slice_expr(const slice& __sl, const _RmExpr& __e) 70346035553Spatrick : __expr_(__e), 70446035553Spatrick __start_(__sl.start()), 70546035553Spatrick __size_(__sl.size()), 70646035553Spatrick __stride_(__sl.stride()) 70746035553Spatrick {} 70846035553Spatrickpublic: 70946035553Spatrick 71046035553Spatrick _LIBCPP_INLINE_VISIBILITY 71176d0caaeSpatrick __result_type operator[](size_t __i) const 71246035553Spatrick {return __expr_[__start_ + __i * __stride_];} 71346035553Spatrick 71446035553Spatrick _LIBCPP_INLINE_VISIBILITY 71546035553Spatrick size_t size() const {return __size_;} 71646035553Spatrick 71746035553Spatrick template <class> friend class __val_expr; 71846035553Spatrick template <class> friend class _LIBCPP_TEMPLATE_VIS valarray; 71946035553Spatrick}; 72046035553Spatrick 72146035553Spatricktemplate <class _ValExpr> 72246035553Spatrickclass __mask_expr; 72346035553Spatrick 72446035553Spatricktemplate <class _ValExpr> 72546035553Spatrickclass __indirect_expr; 72646035553Spatrick 72746035553Spatricktemplate <class _ValExpr> 72846035553Spatrickclass __shift_expr 72946035553Spatrick{ 730*4bdff4beSrobert typedef __libcpp_remove_reference_t<_ValExpr> _RmExpr; 73146035553Spatrickpublic: 73246035553Spatrick typedef typename _RmExpr::value_type value_type; 73376d0caaeSpatrick typedef value_type __result_type; 73446035553Spatrick 73546035553Spatrickprivate: 73646035553Spatrick _ValExpr __expr_; 73746035553Spatrick size_t __size_; 73846035553Spatrick ptrdiff_t __ul_; 73946035553Spatrick ptrdiff_t __sn_; 74046035553Spatrick ptrdiff_t __n_; 74146035553Spatrick static const ptrdiff_t _Np = static_cast<ptrdiff_t>( 74246035553Spatrick sizeof(ptrdiff_t) * __CHAR_BIT__ - 1); 74346035553Spatrick 74446035553Spatrick _LIBCPP_INLINE_VISIBILITY 74546035553Spatrick __shift_expr(int __n, const _RmExpr& __e) 74646035553Spatrick : __expr_(__e), 74746035553Spatrick __size_(__e.size()), 74846035553Spatrick __n_(__n) 74946035553Spatrick { 75046035553Spatrick ptrdiff_t __neg_n = static_cast<ptrdiff_t>(__n_ >> _Np); 75146035553Spatrick __sn_ = __neg_n | static_cast<ptrdiff_t>(static_cast<size_t>(-__n_) >> _Np); 75246035553Spatrick __ul_ = ((__size_ - __n_) & ~__neg_n) | ((__n_ + 1) & __neg_n); 75346035553Spatrick } 75446035553Spatrickpublic: 75546035553Spatrick 75646035553Spatrick _LIBCPP_INLINE_VISIBILITY 75776d0caaeSpatrick __result_type operator[](size_t __j) const 75846035553Spatrick { 75946035553Spatrick ptrdiff_t __i = static_cast<ptrdiff_t>(__j); 76046035553Spatrick ptrdiff_t __m = (__sn_ * __i - __ul_) >> _Np; 76146035553Spatrick return (__expr_[(__i + __n_) & __m] & __m) | (value_type() & ~__m); 76246035553Spatrick } 76346035553Spatrick 76446035553Spatrick _LIBCPP_INLINE_VISIBILITY 76546035553Spatrick size_t size() const {return __size_;} 76646035553Spatrick 76746035553Spatrick template <class> friend class __val_expr; 76846035553Spatrick}; 76946035553Spatrick 77046035553Spatricktemplate <class _ValExpr> 77146035553Spatrickclass __cshift_expr 77246035553Spatrick{ 773*4bdff4beSrobert typedef __libcpp_remove_reference_t<_ValExpr> _RmExpr; 77446035553Spatrickpublic: 77546035553Spatrick typedef typename _RmExpr::value_type value_type; 77676d0caaeSpatrick typedef value_type __result_type; 77746035553Spatrick 77846035553Spatrickprivate: 77946035553Spatrick _ValExpr __expr_; 78046035553Spatrick size_t __size_; 78146035553Spatrick size_t __m_; 78246035553Spatrick size_t __o1_; 78346035553Spatrick size_t __o2_; 78446035553Spatrick 78546035553Spatrick _LIBCPP_INLINE_VISIBILITY 78646035553Spatrick __cshift_expr(int __n, const _RmExpr& __e) 78746035553Spatrick : __expr_(__e), 78846035553Spatrick __size_(__e.size()) 78946035553Spatrick { 79046035553Spatrick __n %= static_cast<int>(__size_); 79146035553Spatrick if (__n >= 0) 79246035553Spatrick { 79346035553Spatrick __m_ = __size_ - __n; 79446035553Spatrick __o1_ = __n; 79546035553Spatrick __o2_ = __n - __size_; 79646035553Spatrick } 79746035553Spatrick else 79846035553Spatrick { 79946035553Spatrick __m_ = -__n; 80046035553Spatrick __o1_ = __n + __size_; 80146035553Spatrick __o2_ = __n; 80246035553Spatrick } 80346035553Spatrick } 80446035553Spatrickpublic: 80546035553Spatrick 80646035553Spatrick _LIBCPP_INLINE_VISIBILITY 80776d0caaeSpatrick __result_type operator[](size_t __i) const 80846035553Spatrick { 80946035553Spatrick if (__i < __m_) 81046035553Spatrick return __expr_[__i + __o1_]; 81146035553Spatrick return __expr_[__i + __o2_]; 81246035553Spatrick } 81346035553Spatrick 81446035553Spatrick _LIBCPP_INLINE_VISIBILITY 81546035553Spatrick size_t size() const {return __size_;} 81646035553Spatrick 81746035553Spatrick template <class> friend class __val_expr; 81846035553Spatrick}; 81946035553Spatrick 82046035553Spatricktemplate<class _ValExpr> 82146035553Spatrickclass __val_expr; 82246035553Spatrick 82346035553Spatricktemplate<class _ValExpr> 82446035553Spatrickstruct __is_val_expr : false_type {}; 82546035553Spatrick 82646035553Spatricktemplate<class _ValExpr> 82746035553Spatrickstruct __is_val_expr<__val_expr<_ValExpr> > : true_type {}; 82846035553Spatrick 82946035553Spatricktemplate<class _Tp> 83046035553Spatrickstruct __is_val_expr<valarray<_Tp> > : true_type {}; 83146035553Spatrick 83246035553Spatricktemplate<class _Tp> 83346035553Spatrickclass _LIBCPP_TEMPLATE_VIS valarray 83446035553Spatrick{ 83546035553Spatrickpublic: 83646035553Spatrick typedef _Tp value_type; 83776d0caaeSpatrick typedef _Tp __result_type; 83846035553Spatrick 83946035553Spatrickprivate: 84046035553Spatrick value_type* __begin_; 84146035553Spatrick value_type* __end_; 84246035553Spatrick 84346035553Spatrickpublic: 84446035553Spatrick // construct/destroy: 84546035553Spatrick _LIBCPP_INLINE_VISIBILITY 84676d0caaeSpatrick valarray() : __begin_(nullptr), __end_(nullptr) {} 84746035553Spatrick inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 84846035553Spatrick explicit valarray(size_t __n); 84946035553Spatrick _LIBCPP_INLINE_VISIBILITY 85046035553Spatrick valarray(const value_type& __x, size_t __n); 85146035553Spatrick valarray(const value_type* __p, size_t __n); 85246035553Spatrick valarray(const valarray& __v); 85346035553Spatrick#ifndef _LIBCPP_CXX03_LANG 85446035553Spatrick _LIBCPP_INLINE_VISIBILITY 85546035553Spatrick valarray(valarray&& __v) _NOEXCEPT; 85646035553Spatrick valarray(initializer_list<value_type> __il); 85746035553Spatrick#endif // _LIBCPP_CXX03_LANG 85846035553Spatrick valarray(const slice_array<value_type>& __sa); 85946035553Spatrick valarray(const gslice_array<value_type>& __ga); 86046035553Spatrick valarray(const mask_array<value_type>& __ma); 86146035553Spatrick valarray(const indirect_array<value_type>& __ia); 86246035553Spatrick inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 86346035553Spatrick ~valarray(); 86446035553Spatrick 86546035553Spatrick // assignment: 86646035553Spatrick valarray& operator=(const valarray& __v); 86746035553Spatrick#ifndef _LIBCPP_CXX03_LANG 86846035553Spatrick _LIBCPP_INLINE_VISIBILITY 86946035553Spatrick valarray& operator=(valarray&& __v) _NOEXCEPT; 87046035553Spatrick _LIBCPP_INLINE_VISIBILITY 87146035553Spatrick valarray& operator=(initializer_list<value_type>); 87246035553Spatrick#endif // _LIBCPP_CXX03_LANG 87346035553Spatrick _LIBCPP_INLINE_VISIBILITY 87446035553Spatrick valarray& operator=(const value_type& __x); 87546035553Spatrick _LIBCPP_INLINE_VISIBILITY 87646035553Spatrick valarray& operator=(const slice_array<value_type>& __sa); 87746035553Spatrick _LIBCPP_INLINE_VISIBILITY 87846035553Spatrick valarray& operator=(const gslice_array<value_type>& __ga); 87946035553Spatrick _LIBCPP_INLINE_VISIBILITY 88046035553Spatrick valarray& operator=(const mask_array<value_type>& __ma); 88146035553Spatrick _LIBCPP_INLINE_VISIBILITY 88246035553Spatrick valarray& operator=(const indirect_array<value_type>& __ia); 88346035553Spatrick template <class _ValExpr> 88446035553Spatrick _LIBCPP_INLINE_VISIBILITY 88546035553Spatrick valarray& operator=(const __val_expr<_ValExpr>& __v); 88646035553Spatrick 88746035553Spatrick // element access: 88846035553Spatrick _LIBCPP_INLINE_VISIBILITY 88946035553Spatrick const value_type& operator[](size_t __i) const {return __begin_[__i];} 89046035553Spatrick 89146035553Spatrick _LIBCPP_INLINE_VISIBILITY 89246035553Spatrick value_type& operator[](size_t __i) {return __begin_[__i];} 89346035553Spatrick 89446035553Spatrick // subset operations: 89546035553Spatrick _LIBCPP_INLINE_VISIBILITY 89646035553Spatrick __val_expr<__slice_expr<const valarray&> > operator[](slice __s) const; 89746035553Spatrick _LIBCPP_INLINE_VISIBILITY 89846035553Spatrick slice_array<value_type> operator[](slice __s); 89946035553Spatrick _LIBCPP_INLINE_VISIBILITY 90046035553Spatrick __val_expr<__indirect_expr<const valarray&> > operator[](const gslice& __gs) const; 90146035553Spatrick _LIBCPP_INLINE_VISIBILITY 90246035553Spatrick gslice_array<value_type> operator[](const gslice& __gs); 90346035553Spatrick#ifndef _LIBCPP_CXX03_LANG 90446035553Spatrick _LIBCPP_INLINE_VISIBILITY 90546035553Spatrick __val_expr<__indirect_expr<const valarray&> > operator[](gslice&& __gs) const; 90646035553Spatrick _LIBCPP_INLINE_VISIBILITY 90746035553Spatrick gslice_array<value_type> operator[](gslice&& __gs); 90846035553Spatrick#endif // _LIBCPP_CXX03_LANG 90946035553Spatrick _LIBCPP_INLINE_VISIBILITY 91046035553Spatrick __val_expr<__mask_expr<const valarray&> > operator[](const valarray<bool>& __vb) const; 91146035553Spatrick _LIBCPP_INLINE_VISIBILITY 91246035553Spatrick mask_array<value_type> operator[](const valarray<bool>& __vb); 91346035553Spatrick#ifndef _LIBCPP_CXX03_LANG 91446035553Spatrick _LIBCPP_INLINE_VISIBILITY 91546035553Spatrick __val_expr<__mask_expr<const valarray&> > operator[](valarray<bool>&& __vb) const; 91646035553Spatrick _LIBCPP_INLINE_VISIBILITY 91746035553Spatrick mask_array<value_type> operator[](valarray<bool>&& __vb); 91846035553Spatrick#endif // _LIBCPP_CXX03_LANG 91946035553Spatrick _LIBCPP_INLINE_VISIBILITY 92046035553Spatrick __val_expr<__indirect_expr<const valarray&> > operator[](const valarray<size_t>& __vs) const; 92146035553Spatrick _LIBCPP_INLINE_VISIBILITY 92246035553Spatrick indirect_array<value_type> operator[](const valarray<size_t>& __vs); 92346035553Spatrick#ifndef _LIBCPP_CXX03_LANG 92446035553Spatrick _LIBCPP_INLINE_VISIBILITY 92546035553Spatrick __val_expr<__indirect_expr<const valarray&> > operator[](valarray<size_t>&& __vs) const; 92646035553Spatrick _LIBCPP_INLINE_VISIBILITY 92746035553Spatrick indirect_array<value_type> operator[](valarray<size_t>&& __vs); 92846035553Spatrick#endif // _LIBCPP_CXX03_LANG 92946035553Spatrick 93046035553Spatrick // unary operators: 931*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY 932*4bdff4beSrobert __val_expr<_UnaryOp<__unary_plus<_Tp>, const valarray&> > operator+() const; 933*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY 934*4bdff4beSrobert __val_expr<_UnaryOp<negate<_Tp>, const valarray&> > operator-() const; 935*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY 936*4bdff4beSrobert __val_expr<_UnaryOp<__bit_not<_Tp>, const valarray&> > operator~() const; 937*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY 938*4bdff4beSrobert __val_expr<_UnaryOp<logical_not<_Tp>, const valarray&> > operator!() const; 93946035553Spatrick 94046035553Spatrick // computed assignment: 94146035553Spatrick _LIBCPP_INLINE_VISIBILITY 94246035553Spatrick valarray& operator*= (const value_type& __x); 94346035553Spatrick _LIBCPP_INLINE_VISIBILITY 94446035553Spatrick valarray& operator/= (const value_type& __x); 94546035553Spatrick _LIBCPP_INLINE_VISIBILITY 94646035553Spatrick valarray& operator%= (const value_type& __x); 94746035553Spatrick _LIBCPP_INLINE_VISIBILITY 94846035553Spatrick valarray& operator+= (const value_type& __x); 94946035553Spatrick _LIBCPP_INLINE_VISIBILITY 95046035553Spatrick valarray& operator-= (const value_type& __x); 95146035553Spatrick _LIBCPP_INLINE_VISIBILITY 95246035553Spatrick valarray& operator^= (const value_type& __x); 95346035553Spatrick _LIBCPP_INLINE_VISIBILITY 95446035553Spatrick valarray& operator&= (const value_type& __x); 95546035553Spatrick _LIBCPP_INLINE_VISIBILITY 95646035553Spatrick valarray& operator|= (const value_type& __x); 95746035553Spatrick _LIBCPP_INLINE_VISIBILITY 95846035553Spatrick valarray& operator<<=(const value_type& __x); 95946035553Spatrick _LIBCPP_INLINE_VISIBILITY 96046035553Spatrick valarray& operator>>=(const value_type& __x); 96146035553Spatrick 96246035553Spatrick template <class _Expr> 96346035553Spatrick typename enable_if 96446035553Spatrick < 96546035553Spatrick __is_val_expr<_Expr>::value, 96646035553Spatrick valarray& 96746035553Spatrick >::type 96846035553Spatrick _LIBCPP_INLINE_VISIBILITY 96946035553Spatrick operator*= (const _Expr& __v); 97046035553Spatrick 97146035553Spatrick template <class _Expr> 97246035553Spatrick typename enable_if 97346035553Spatrick < 97446035553Spatrick __is_val_expr<_Expr>::value, 97546035553Spatrick valarray& 97646035553Spatrick >::type 97746035553Spatrick _LIBCPP_INLINE_VISIBILITY 97846035553Spatrick operator/= (const _Expr& __v); 97946035553Spatrick 98046035553Spatrick template <class _Expr> 98146035553Spatrick typename enable_if 98246035553Spatrick < 98346035553Spatrick __is_val_expr<_Expr>::value, 98446035553Spatrick valarray& 98546035553Spatrick >::type 98646035553Spatrick _LIBCPP_INLINE_VISIBILITY 98746035553Spatrick operator%= (const _Expr& __v); 98846035553Spatrick 98946035553Spatrick template <class _Expr> 99046035553Spatrick typename enable_if 99146035553Spatrick < 99246035553Spatrick __is_val_expr<_Expr>::value, 99346035553Spatrick valarray& 99446035553Spatrick >::type 99546035553Spatrick _LIBCPP_INLINE_VISIBILITY 99646035553Spatrick operator+= (const _Expr& __v); 99746035553Spatrick 99846035553Spatrick template <class _Expr> 99946035553Spatrick typename enable_if 100046035553Spatrick < 100146035553Spatrick __is_val_expr<_Expr>::value, 100246035553Spatrick valarray& 100346035553Spatrick >::type 100446035553Spatrick _LIBCPP_INLINE_VISIBILITY 100546035553Spatrick operator-= (const _Expr& __v); 100646035553Spatrick 100746035553Spatrick template <class _Expr> 100846035553Spatrick typename enable_if 100946035553Spatrick < 101046035553Spatrick __is_val_expr<_Expr>::value, 101146035553Spatrick valarray& 101246035553Spatrick >::type 101346035553Spatrick _LIBCPP_INLINE_VISIBILITY 101446035553Spatrick operator^= (const _Expr& __v); 101546035553Spatrick 101646035553Spatrick template <class _Expr> 101746035553Spatrick typename enable_if 101846035553Spatrick < 101946035553Spatrick __is_val_expr<_Expr>::value, 102046035553Spatrick valarray& 102146035553Spatrick >::type 102246035553Spatrick _LIBCPP_INLINE_VISIBILITY 102346035553Spatrick operator|= (const _Expr& __v); 102446035553Spatrick 102546035553Spatrick template <class _Expr> 102646035553Spatrick typename enable_if 102746035553Spatrick < 102846035553Spatrick __is_val_expr<_Expr>::value, 102946035553Spatrick valarray& 103046035553Spatrick >::type 103146035553Spatrick _LIBCPP_INLINE_VISIBILITY 103246035553Spatrick operator&= (const _Expr& __v); 103346035553Spatrick 103446035553Spatrick template <class _Expr> 103546035553Spatrick typename enable_if 103646035553Spatrick < 103746035553Spatrick __is_val_expr<_Expr>::value, 103846035553Spatrick valarray& 103946035553Spatrick >::type 104046035553Spatrick _LIBCPP_INLINE_VISIBILITY 104146035553Spatrick operator<<= (const _Expr& __v); 104246035553Spatrick 104346035553Spatrick template <class _Expr> 104446035553Spatrick typename enable_if 104546035553Spatrick < 104646035553Spatrick __is_val_expr<_Expr>::value, 104746035553Spatrick valarray& 104846035553Spatrick >::type 104946035553Spatrick _LIBCPP_INLINE_VISIBILITY 105046035553Spatrick operator>>= (const _Expr& __v); 105146035553Spatrick 105246035553Spatrick // member functions: 105346035553Spatrick _LIBCPP_INLINE_VISIBILITY 105446035553Spatrick void swap(valarray& __v) _NOEXCEPT; 105546035553Spatrick 105646035553Spatrick _LIBCPP_INLINE_VISIBILITY 105746035553Spatrick size_t size() const {return static_cast<size_t>(__end_ - __begin_);} 105846035553Spatrick 105946035553Spatrick _LIBCPP_INLINE_VISIBILITY 106046035553Spatrick value_type sum() const; 106146035553Spatrick _LIBCPP_INLINE_VISIBILITY 106246035553Spatrick value_type min() const; 106346035553Spatrick _LIBCPP_INLINE_VISIBILITY 106446035553Spatrick value_type max() const; 106546035553Spatrick 106646035553Spatrick valarray shift (int __i) const; 106746035553Spatrick valarray cshift(int __i) const; 106846035553Spatrick valarray apply(value_type __f(value_type)) const; 106946035553Spatrick valarray apply(value_type __f(const value_type&)) const; 107046035553Spatrick void resize(size_t __n, value_type __x = value_type()); 107146035553Spatrick 107246035553Spatrickprivate: 107346035553Spatrick template <class> friend class _LIBCPP_TEMPLATE_VIS valarray; 107446035553Spatrick template <class> friend class _LIBCPP_TEMPLATE_VIS slice_array; 107546035553Spatrick template <class> friend class _LIBCPP_TEMPLATE_VIS gslice_array; 107646035553Spatrick template <class> friend class _LIBCPP_TEMPLATE_VIS mask_array; 107746035553Spatrick template <class> friend class __mask_expr; 107846035553Spatrick template <class> friend class _LIBCPP_TEMPLATE_VIS indirect_array; 107946035553Spatrick template <class> friend class __indirect_expr; 108046035553Spatrick template <class> friend class __val_expr; 108146035553Spatrick 108246035553Spatrick template <class _Up> 108346035553Spatrick friend 108446035553Spatrick _Up* 108546035553Spatrick begin(valarray<_Up>& __v); 108646035553Spatrick 108746035553Spatrick template <class _Up> 108846035553Spatrick friend 108946035553Spatrick const _Up* 109046035553Spatrick begin(const valarray<_Up>& __v); 109146035553Spatrick 109246035553Spatrick template <class _Up> 109346035553Spatrick friend 109446035553Spatrick _Up* 109546035553Spatrick end(valarray<_Up>& __v); 109646035553Spatrick 109746035553Spatrick template <class _Up> 109846035553Spatrick friend 109946035553Spatrick const _Up* 110046035553Spatrick end(const valarray<_Up>& __v); 110146035553Spatrick 110246035553Spatrick _LIBCPP_INLINE_VISIBILITY 110346035553Spatrick void __clear(size_t __capacity); 110446035553Spatrick valarray& __assign_range(const value_type* __f, const value_type* __l); 110546035553Spatrick}; 110646035553Spatrick 1107*4bdff4beSrobert#if _LIBCPP_STD_VER > 14 1108*4bdff4beSroberttemplate<class _Tp, size_t _Size> 1109*4bdff4beSrobertvalarray(const _Tp(&)[_Size], size_t) -> valarray<_Tp>; 1110*4bdff4beSrobert#endif 1111*4bdff4beSrobert 1112*4bdff4beSrobertextern template _LIBCPP_FUNC_VIS void valarray<size_t>::resize(size_t, size_t); 111346035553Spatrick 111446035553Spatricktemplate <class _Op, class _Tp> 111546035553Spatrickstruct _UnaryOp<_Op, valarray<_Tp> > 111646035553Spatrick{ 111776d0caaeSpatrick typedef typename _Op::__result_type __result_type; 111876d0caaeSpatrick typedef typename decay<__result_type>::type value_type; 111946035553Spatrick 112046035553Spatrick _Op __op_; 112146035553Spatrick const valarray<_Tp>& __a0_; 112246035553Spatrick 112346035553Spatrick _LIBCPP_INLINE_VISIBILITY 112446035553Spatrick _UnaryOp(const _Op& __op, const valarray<_Tp>& __a0) : __op_(__op), __a0_(__a0) {} 112546035553Spatrick 112646035553Spatrick _LIBCPP_INLINE_VISIBILITY 112776d0caaeSpatrick __result_type operator[](size_t __i) const {return __op_(__a0_[__i]);} 112846035553Spatrick 112946035553Spatrick _LIBCPP_INLINE_VISIBILITY 113046035553Spatrick size_t size() const {return __a0_.size();} 113146035553Spatrick}; 113246035553Spatrick 113346035553Spatricktemplate <class _Op, class _Tp, class _A1> 113446035553Spatrickstruct _BinaryOp<_Op, valarray<_Tp>, _A1> 113546035553Spatrick{ 113676d0caaeSpatrick typedef typename _Op::__result_type __result_type; 113776d0caaeSpatrick typedef typename decay<__result_type>::type value_type; 113846035553Spatrick 113946035553Spatrick _Op __op_; 114046035553Spatrick const valarray<_Tp>& __a0_; 114146035553Spatrick _A1 __a1_; 114246035553Spatrick 114346035553Spatrick _LIBCPP_INLINE_VISIBILITY 114446035553Spatrick _BinaryOp(const _Op& __op, const valarray<_Tp>& __a0, const _A1& __a1) 114546035553Spatrick : __op_(__op), __a0_(__a0), __a1_(__a1) {} 114646035553Spatrick 114746035553Spatrick _LIBCPP_INLINE_VISIBILITY 114876d0caaeSpatrick __result_type operator[](size_t __i) const {return __op_(__a0_[__i], __a1_[__i]);} 114946035553Spatrick 115046035553Spatrick _LIBCPP_INLINE_VISIBILITY 115146035553Spatrick size_t size() const {return __a0_.size();} 115246035553Spatrick}; 115346035553Spatrick 115446035553Spatricktemplate <class _Op, class _A0, class _Tp> 115546035553Spatrickstruct _BinaryOp<_Op, _A0, valarray<_Tp> > 115646035553Spatrick{ 115776d0caaeSpatrick typedef typename _Op::__result_type __result_type; 115876d0caaeSpatrick typedef typename decay<__result_type>::type value_type; 115946035553Spatrick 116046035553Spatrick _Op __op_; 116146035553Spatrick _A0 __a0_; 116246035553Spatrick const valarray<_Tp>& __a1_; 116346035553Spatrick 116446035553Spatrick _LIBCPP_INLINE_VISIBILITY 116546035553Spatrick _BinaryOp(const _Op& __op, const _A0& __a0, const valarray<_Tp>& __a1) 116646035553Spatrick : __op_(__op), __a0_(__a0), __a1_(__a1) {} 116746035553Spatrick 116846035553Spatrick _LIBCPP_INLINE_VISIBILITY 116976d0caaeSpatrick __result_type operator[](size_t __i) const {return __op_(__a0_[__i], __a1_[__i]);} 117046035553Spatrick 117146035553Spatrick _LIBCPP_INLINE_VISIBILITY 117246035553Spatrick size_t size() const {return __a0_.size();} 117346035553Spatrick}; 117446035553Spatrick 117546035553Spatricktemplate <class _Op, class _Tp> 117646035553Spatrickstruct _BinaryOp<_Op, valarray<_Tp>, valarray<_Tp> > 117746035553Spatrick{ 117876d0caaeSpatrick typedef typename _Op::__result_type __result_type; 117976d0caaeSpatrick typedef typename decay<__result_type>::type value_type; 118046035553Spatrick 118146035553Spatrick _Op __op_; 118246035553Spatrick const valarray<_Tp>& __a0_; 118346035553Spatrick const valarray<_Tp>& __a1_; 118446035553Spatrick 118546035553Spatrick _LIBCPP_INLINE_VISIBILITY 118646035553Spatrick _BinaryOp(const _Op& __op, const valarray<_Tp>& __a0, const valarray<_Tp>& __a1) 118746035553Spatrick : __op_(__op), __a0_(__a0), __a1_(__a1) {} 118846035553Spatrick 118946035553Spatrick _LIBCPP_INLINE_VISIBILITY 119076d0caaeSpatrick __result_type operator[](size_t __i) const {return __op_(__a0_[__i], __a1_[__i]);} 119146035553Spatrick 119246035553Spatrick _LIBCPP_INLINE_VISIBILITY 119346035553Spatrick size_t size() const {return __a0_.size();} 119446035553Spatrick}; 119546035553Spatrick 119646035553Spatrick// slice_array 119746035553Spatrick 119846035553Spatricktemplate <class _Tp> 119946035553Spatrickclass _LIBCPP_TEMPLATE_VIS slice_array 120046035553Spatrick{ 120146035553Spatrickpublic: 120246035553Spatrick typedef _Tp value_type; 120346035553Spatrick 120446035553Spatrickprivate: 120546035553Spatrick value_type* __vp_; 120646035553Spatrick size_t __size_; 120746035553Spatrick size_t __stride_; 120846035553Spatrick 120946035553Spatrickpublic: 121046035553Spatrick template <class _Expr> 121146035553Spatrick typename enable_if 121246035553Spatrick < 121346035553Spatrick __is_val_expr<_Expr>::value, 121446035553Spatrick void 121546035553Spatrick >::type 121646035553Spatrick _LIBCPP_INLINE_VISIBILITY 121746035553Spatrick operator=(const _Expr& __v) const; 121846035553Spatrick 121946035553Spatrick template <class _Expr> 122046035553Spatrick typename enable_if 122146035553Spatrick < 122246035553Spatrick __is_val_expr<_Expr>::value, 122346035553Spatrick void 122446035553Spatrick >::type 122546035553Spatrick _LIBCPP_INLINE_VISIBILITY 122646035553Spatrick operator*=(const _Expr& __v) const; 122746035553Spatrick 122846035553Spatrick template <class _Expr> 122946035553Spatrick typename enable_if 123046035553Spatrick < 123146035553Spatrick __is_val_expr<_Expr>::value, 123246035553Spatrick void 123346035553Spatrick >::type 123446035553Spatrick _LIBCPP_INLINE_VISIBILITY 123546035553Spatrick operator/=(const _Expr& __v) const; 123646035553Spatrick 123746035553Spatrick template <class _Expr> 123846035553Spatrick typename enable_if 123946035553Spatrick < 124046035553Spatrick __is_val_expr<_Expr>::value, 124146035553Spatrick void 124246035553Spatrick >::type 124346035553Spatrick _LIBCPP_INLINE_VISIBILITY 124446035553Spatrick operator%=(const _Expr& __v) const; 124546035553Spatrick 124646035553Spatrick template <class _Expr> 124746035553Spatrick typename enable_if 124846035553Spatrick < 124946035553Spatrick __is_val_expr<_Expr>::value, 125046035553Spatrick void 125146035553Spatrick >::type 125246035553Spatrick _LIBCPP_INLINE_VISIBILITY 125346035553Spatrick operator+=(const _Expr& __v) const; 125446035553Spatrick 125546035553Spatrick template <class _Expr> 125646035553Spatrick typename enable_if 125746035553Spatrick < 125846035553Spatrick __is_val_expr<_Expr>::value, 125946035553Spatrick void 126046035553Spatrick >::type 126146035553Spatrick _LIBCPP_INLINE_VISIBILITY 126246035553Spatrick operator-=(const _Expr& __v) const; 126346035553Spatrick 126446035553Spatrick template <class _Expr> 126546035553Spatrick typename enable_if 126646035553Spatrick < 126746035553Spatrick __is_val_expr<_Expr>::value, 126846035553Spatrick void 126946035553Spatrick >::type 127046035553Spatrick _LIBCPP_INLINE_VISIBILITY 127146035553Spatrick operator^=(const _Expr& __v) const; 127246035553Spatrick 127346035553Spatrick template <class _Expr> 127446035553Spatrick typename enable_if 127546035553Spatrick < 127646035553Spatrick __is_val_expr<_Expr>::value, 127746035553Spatrick void 127846035553Spatrick >::type 127946035553Spatrick _LIBCPP_INLINE_VISIBILITY 128046035553Spatrick operator&=(const _Expr& __v) const; 128146035553Spatrick 128246035553Spatrick template <class _Expr> 128346035553Spatrick typename enable_if 128446035553Spatrick < 128546035553Spatrick __is_val_expr<_Expr>::value, 128646035553Spatrick void 128746035553Spatrick >::type 128846035553Spatrick _LIBCPP_INLINE_VISIBILITY 128946035553Spatrick operator|=(const _Expr& __v) const; 129046035553Spatrick 129146035553Spatrick template <class _Expr> 129246035553Spatrick typename enable_if 129346035553Spatrick < 129446035553Spatrick __is_val_expr<_Expr>::value, 129546035553Spatrick void 129646035553Spatrick >::type 129746035553Spatrick _LIBCPP_INLINE_VISIBILITY 129846035553Spatrick operator<<=(const _Expr& __v) const; 129946035553Spatrick 130046035553Spatrick template <class _Expr> 130146035553Spatrick typename enable_if 130246035553Spatrick < 130346035553Spatrick __is_val_expr<_Expr>::value, 130446035553Spatrick void 130546035553Spatrick >::type 130646035553Spatrick _LIBCPP_INLINE_VISIBILITY 130746035553Spatrick operator>>=(const _Expr& __v) const; 130846035553Spatrick 130946035553Spatrick slice_array(slice_array const&) = default; 131046035553Spatrick 131146035553Spatrick _LIBCPP_INLINE_VISIBILITY 131246035553Spatrick const slice_array& operator=(const slice_array& __sa) const; 131346035553Spatrick 131446035553Spatrick _LIBCPP_INLINE_VISIBILITY 131546035553Spatrick void operator=(const value_type& __x) const; 131646035553Spatrick 131776d0caaeSpatrick _LIBCPP_INLINE_VISIBILITY 131876d0caaeSpatrick void operator=(const valarray<value_type>& __va) const; 131976d0caaeSpatrick 132046035553Spatrickprivate: 132146035553Spatrick _LIBCPP_INLINE_VISIBILITY 132246035553Spatrick slice_array(const slice& __sl, const valarray<value_type>& __v) 132346035553Spatrick : __vp_(const_cast<value_type*>(__v.__begin_ + __sl.start())), 132446035553Spatrick __size_(__sl.size()), 132546035553Spatrick __stride_(__sl.stride()) 132646035553Spatrick {} 132746035553Spatrick 132846035553Spatrick template <class> friend class valarray; 132946035553Spatrick template <class> friend class sliceExpr; 133046035553Spatrick}; 133146035553Spatrick 133246035553Spatricktemplate <class _Tp> 133346035553Spatrickinline 133446035553Spatrickconst slice_array<_Tp>& 133546035553Spatrickslice_array<_Tp>::operator=(const slice_array& __sa) const 133646035553Spatrick{ 133746035553Spatrick value_type* __t = __vp_; 133846035553Spatrick const value_type* __s = __sa.__vp_; 133946035553Spatrick for (size_t __n = __size_; __n; --__n, __t += __stride_, __s += __sa.__stride_) 134046035553Spatrick *__t = *__s; 134146035553Spatrick return *this; 134246035553Spatrick} 134346035553Spatrick 134446035553Spatricktemplate <class _Tp> 134546035553Spatricktemplate <class _Expr> 134646035553Spatrickinline 134746035553Spatricktypename enable_if 134846035553Spatrick< 134946035553Spatrick __is_val_expr<_Expr>::value, 135046035553Spatrick void 135146035553Spatrick>::type 135246035553Spatrickslice_array<_Tp>::operator=(const _Expr& __v) const 135346035553Spatrick{ 135446035553Spatrick value_type* __t = __vp_; 135546035553Spatrick for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 135646035553Spatrick *__t = __v[__i]; 135746035553Spatrick} 135846035553Spatrick 135946035553Spatricktemplate <class _Tp> 136076d0caaeSpatrickinline void 136176d0caaeSpatrickslice_array<_Tp>::operator=(const valarray<value_type>& __va) const 136276d0caaeSpatrick{ 136376d0caaeSpatrick value_type* __t = __vp_; 136476d0caaeSpatrick for (size_t __i = 0; __i < __va.size(); ++__i, __t += __stride_) 136576d0caaeSpatrick *__t = __va[__i]; 136676d0caaeSpatrick} 136776d0caaeSpatrick 136876d0caaeSpatricktemplate <class _Tp> 136946035553Spatricktemplate <class _Expr> 137046035553Spatrickinline 137146035553Spatricktypename enable_if 137246035553Spatrick< 137346035553Spatrick __is_val_expr<_Expr>::value, 137446035553Spatrick void 137546035553Spatrick>::type 137646035553Spatrickslice_array<_Tp>::operator*=(const _Expr& __v) const 137746035553Spatrick{ 137846035553Spatrick value_type* __t = __vp_; 137946035553Spatrick for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 138046035553Spatrick *__t *= __v[__i]; 138146035553Spatrick} 138246035553Spatrick 138346035553Spatricktemplate <class _Tp> 138446035553Spatricktemplate <class _Expr> 138546035553Spatrickinline 138646035553Spatricktypename enable_if 138746035553Spatrick< 138846035553Spatrick __is_val_expr<_Expr>::value, 138946035553Spatrick void 139046035553Spatrick>::type 139146035553Spatrickslice_array<_Tp>::operator/=(const _Expr& __v) const 139246035553Spatrick{ 139346035553Spatrick value_type* __t = __vp_; 139446035553Spatrick for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 139546035553Spatrick *__t /= __v[__i]; 139646035553Spatrick} 139746035553Spatrick 139846035553Spatricktemplate <class _Tp> 139946035553Spatricktemplate <class _Expr> 140046035553Spatrickinline 140146035553Spatricktypename enable_if 140246035553Spatrick< 140346035553Spatrick __is_val_expr<_Expr>::value, 140446035553Spatrick void 140546035553Spatrick>::type 140646035553Spatrickslice_array<_Tp>::operator%=(const _Expr& __v) const 140746035553Spatrick{ 140846035553Spatrick value_type* __t = __vp_; 140946035553Spatrick for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 141046035553Spatrick *__t %= __v[__i]; 141146035553Spatrick} 141246035553Spatrick 141346035553Spatricktemplate <class _Tp> 141446035553Spatricktemplate <class _Expr> 141546035553Spatrickinline 141646035553Spatricktypename enable_if 141746035553Spatrick< 141846035553Spatrick __is_val_expr<_Expr>::value, 141946035553Spatrick void 142046035553Spatrick>::type 142146035553Spatrickslice_array<_Tp>::operator+=(const _Expr& __v) const 142246035553Spatrick{ 142346035553Spatrick value_type* __t = __vp_; 142446035553Spatrick for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 142546035553Spatrick *__t += __v[__i]; 142646035553Spatrick} 142746035553Spatrick 142846035553Spatricktemplate <class _Tp> 142946035553Spatricktemplate <class _Expr> 143046035553Spatrickinline 143146035553Spatricktypename enable_if 143246035553Spatrick< 143346035553Spatrick __is_val_expr<_Expr>::value, 143446035553Spatrick void 143546035553Spatrick>::type 143646035553Spatrickslice_array<_Tp>::operator-=(const _Expr& __v) const 143746035553Spatrick{ 143846035553Spatrick value_type* __t = __vp_; 143946035553Spatrick for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 144046035553Spatrick *__t -= __v[__i]; 144146035553Spatrick} 144246035553Spatrick 144346035553Spatricktemplate <class _Tp> 144446035553Spatricktemplate <class _Expr> 144546035553Spatrickinline 144646035553Spatricktypename enable_if 144746035553Spatrick< 144846035553Spatrick __is_val_expr<_Expr>::value, 144946035553Spatrick void 145046035553Spatrick>::type 145146035553Spatrickslice_array<_Tp>::operator^=(const _Expr& __v) const 145246035553Spatrick{ 145346035553Spatrick value_type* __t = __vp_; 145446035553Spatrick for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 145546035553Spatrick *__t ^= __v[__i]; 145646035553Spatrick} 145746035553Spatrick 145846035553Spatricktemplate <class _Tp> 145946035553Spatricktemplate <class _Expr> 146046035553Spatrickinline 146146035553Spatricktypename enable_if 146246035553Spatrick< 146346035553Spatrick __is_val_expr<_Expr>::value, 146446035553Spatrick void 146546035553Spatrick>::type 146646035553Spatrickslice_array<_Tp>::operator&=(const _Expr& __v) const 146746035553Spatrick{ 146846035553Spatrick value_type* __t = __vp_; 146946035553Spatrick for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 147046035553Spatrick *__t &= __v[__i]; 147146035553Spatrick} 147246035553Spatrick 147346035553Spatricktemplate <class _Tp> 147446035553Spatricktemplate <class _Expr> 147546035553Spatrickinline 147646035553Spatricktypename enable_if 147746035553Spatrick< 147846035553Spatrick __is_val_expr<_Expr>::value, 147946035553Spatrick void 148046035553Spatrick>::type 148146035553Spatrickslice_array<_Tp>::operator|=(const _Expr& __v) const 148246035553Spatrick{ 148346035553Spatrick value_type* __t = __vp_; 148446035553Spatrick for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 148546035553Spatrick *__t |= __v[__i]; 148646035553Spatrick} 148746035553Spatrick 148846035553Spatricktemplate <class _Tp> 148946035553Spatricktemplate <class _Expr> 149046035553Spatrickinline 149146035553Spatricktypename enable_if 149246035553Spatrick< 149346035553Spatrick __is_val_expr<_Expr>::value, 149446035553Spatrick void 149546035553Spatrick>::type 149646035553Spatrickslice_array<_Tp>::operator<<=(const _Expr& __v) const 149746035553Spatrick{ 149846035553Spatrick value_type* __t = __vp_; 149946035553Spatrick for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 150046035553Spatrick *__t <<= __v[__i]; 150146035553Spatrick} 150246035553Spatrick 150346035553Spatricktemplate <class _Tp> 150446035553Spatricktemplate <class _Expr> 150546035553Spatrickinline 150646035553Spatricktypename enable_if 150746035553Spatrick< 150846035553Spatrick __is_val_expr<_Expr>::value, 150946035553Spatrick void 151046035553Spatrick>::type 151146035553Spatrickslice_array<_Tp>::operator>>=(const _Expr& __v) const 151246035553Spatrick{ 151346035553Spatrick value_type* __t = __vp_; 151446035553Spatrick for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 151546035553Spatrick *__t >>= __v[__i]; 151646035553Spatrick} 151746035553Spatrick 151846035553Spatricktemplate <class _Tp> 151946035553Spatrickinline 152046035553Spatrickvoid 152146035553Spatrickslice_array<_Tp>::operator=(const value_type& __x) const 152246035553Spatrick{ 152346035553Spatrick value_type* __t = __vp_; 152446035553Spatrick for (size_t __n = __size_; __n; --__n, __t += __stride_) 152546035553Spatrick *__t = __x; 152646035553Spatrick} 152746035553Spatrick 152846035553Spatrick// gslice 152946035553Spatrick 153046035553Spatrickclass _LIBCPP_TYPE_VIS gslice 153146035553Spatrick{ 153246035553Spatrick valarray<size_t> __size_; 153346035553Spatrick valarray<size_t> __stride_; 153446035553Spatrick valarray<size_t> __1d_; 153546035553Spatrick 153646035553Spatrickpublic: 153746035553Spatrick _LIBCPP_INLINE_VISIBILITY 153846035553Spatrick gslice() {} 153946035553Spatrick 154046035553Spatrick _LIBCPP_INLINE_VISIBILITY 154146035553Spatrick gslice(size_t __start, const valarray<size_t>& __size, 154246035553Spatrick const valarray<size_t>& __stride) 154346035553Spatrick : __size_(__size), 154446035553Spatrick __stride_(__stride) 154546035553Spatrick {__init(__start);} 154646035553Spatrick 154746035553Spatrick#ifndef _LIBCPP_CXX03_LANG 154846035553Spatrick 154946035553Spatrick _LIBCPP_INLINE_VISIBILITY 155046035553Spatrick gslice(size_t __start, const valarray<size_t>& __size, 155146035553Spatrick valarray<size_t>&& __stride) 155246035553Spatrick : __size_(__size), 1553*4bdff4beSrobert __stride_(std::move(__stride)) 155446035553Spatrick {__init(__start);} 155546035553Spatrick 155646035553Spatrick _LIBCPP_INLINE_VISIBILITY 155746035553Spatrick gslice(size_t __start, valarray<size_t>&& __size, 155846035553Spatrick const valarray<size_t>& __stride) 1559*4bdff4beSrobert : __size_(std::move(__size)), 156046035553Spatrick __stride_(__stride) 156146035553Spatrick {__init(__start);} 156246035553Spatrick 156346035553Spatrick _LIBCPP_INLINE_VISIBILITY 156446035553Spatrick gslice(size_t __start, valarray<size_t>&& __size, 156546035553Spatrick valarray<size_t>&& __stride) 1566*4bdff4beSrobert : __size_(std::move(__size)), 1567*4bdff4beSrobert __stride_(std::move(__stride)) 156846035553Spatrick {__init(__start);} 156946035553Spatrick 157046035553Spatrick#endif // _LIBCPP_CXX03_LANG 157146035553Spatrick 157246035553Spatrick _LIBCPP_INLINE_VISIBILITY 157346035553Spatrick size_t start() const {return __1d_.size() ? __1d_[0] : 0;} 157446035553Spatrick 157546035553Spatrick _LIBCPP_INLINE_VISIBILITY 157646035553Spatrick valarray<size_t> size() const {return __size_;} 157746035553Spatrick 157846035553Spatrick _LIBCPP_INLINE_VISIBILITY 157946035553Spatrick valarray<size_t> stride() const {return __stride_;} 158046035553Spatrick 158146035553Spatrickprivate: 158246035553Spatrick void __init(size_t __start); 158346035553Spatrick 158446035553Spatrick template <class> friend class gslice_array; 158546035553Spatrick template <class> friend class valarray; 158646035553Spatrick template <class> friend class __val_expr; 158746035553Spatrick}; 158846035553Spatrick 158946035553Spatrick// gslice_array 159046035553Spatrick 159146035553Spatricktemplate <class _Tp> 159246035553Spatrickclass _LIBCPP_TEMPLATE_VIS gslice_array 159346035553Spatrick{ 159446035553Spatrickpublic: 159546035553Spatrick typedef _Tp value_type; 159646035553Spatrick 159746035553Spatrickprivate: 159846035553Spatrick value_type* __vp_; 159946035553Spatrick valarray<size_t> __1d_; 160046035553Spatrick 160146035553Spatrickpublic: 160246035553Spatrick template <class _Expr> 160346035553Spatrick typename enable_if 160446035553Spatrick < 160546035553Spatrick __is_val_expr<_Expr>::value, 160646035553Spatrick void 160746035553Spatrick >::type 160846035553Spatrick _LIBCPP_INLINE_VISIBILITY 160946035553Spatrick operator=(const _Expr& __v) const; 161046035553Spatrick 161146035553Spatrick template <class _Expr> 161246035553Spatrick typename enable_if 161346035553Spatrick < 161446035553Spatrick __is_val_expr<_Expr>::value, 161546035553Spatrick void 161646035553Spatrick >::type 161746035553Spatrick _LIBCPP_INLINE_VISIBILITY 161846035553Spatrick operator*=(const _Expr& __v) const; 161946035553Spatrick 162046035553Spatrick template <class _Expr> 162146035553Spatrick typename enable_if 162246035553Spatrick < 162346035553Spatrick __is_val_expr<_Expr>::value, 162446035553Spatrick void 162546035553Spatrick >::type 162646035553Spatrick _LIBCPP_INLINE_VISIBILITY 162746035553Spatrick operator/=(const _Expr& __v) const; 162846035553Spatrick 162946035553Spatrick template <class _Expr> 163046035553Spatrick typename enable_if 163146035553Spatrick < 163246035553Spatrick __is_val_expr<_Expr>::value, 163346035553Spatrick void 163446035553Spatrick >::type 163546035553Spatrick _LIBCPP_INLINE_VISIBILITY 163646035553Spatrick operator%=(const _Expr& __v) const; 163746035553Spatrick 163846035553Spatrick template <class _Expr> 163946035553Spatrick typename enable_if 164046035553Spatrick < 164146035553Spatrick __is_val_expr<_Expr>::value, 164246035553Spatrick void 164346035553Spatrick >::type 164446035553Spatrick _LIBCPP_INLINE_VISIBILITY 164546035553Spatrick operator+=(const _Expr& __v) const; 164646035553Spatrick 164746035553Spatrick template <class _Expr> 164846035553Spatrick typename enable_if 164946035553Spatrick < 165046035553Spatrick __is_val_expr<_Expr>::value, 165146035553Spatrick void 165246035553Spatrick >::type 165346035553Spatrick _LIBCPP_INLINE_VISIBILITY 165446035553Spatrick operator-=(const _Expr& __v) const; 165546035553Spatrick 165646035553Spatrick template <class _Expr> 165746035553Spatrick typename enable_if 165846035553Spatrick < 165946035553Spatrick __is_val_expr<_Expr>::value, 166046035553Spatrick void 166146035553Spatrick >::type 166246035553Spatrick _LIBCPP_INLINE_VISIBILITY 166346035553Spatrick operator^=(const _Expr& __v) const; 166446035553Spatrick 166546035553Spatrick template <class _Expr> 166646035553Spatrick typename enable_if 166746035553Spatrick < 166846035553Spatrick __is_val_expr<_Expr>::value, 166946035553Spatrick void 167046035553Spatrick >::type 167146035553Spatrick _LIBCPP_INLINE_VISIBILITY 167246035553Spatrick operator&=(const _Expr& __v) const; 167346035553Spatrick 167446035553Spatrick template <class _Expr> 167546035553Spatrick typename enable_if 167646035553Spatrick < 167746035553Spatrick __is_val_expr<_Expr>::value, 167846035553Spatrick void 167946035553Spatrick >::type 168046035553Spatrick _LIBCPP_INLINE_VISIBILITY 168146035553Spatrick operator|=(const _Expr& __v) const; 168246035553Spatrick 168346035553Spatrick template <class _Expr> 168446035553Spatrick typename enable_if 168546035553Spatrick < 168646035553Spatrick __is_val_expr<_Expr>::value, 168746035553Spatrick void 168846035553Spatrick >::type 168946035553Spatrick _LIBCPP_INLINE_VISIBILITY 169046035553Spatrick operator<<=(const _Expr& __v) const; 169146035553Spatrick 169246035553Spatrick template <class _Expr> 169346035553Spatrick typename enable_if 169446035553Spatrick < 169546035553Spatrick __is_val_expr<_Expr>::value, 169646035553Spatrick void 169746035553Spatrick >::type 169846035553Spatrick _LIBCPP_INLINE_VISIBILITY 169946035553Spatrick operator>>=(const _Expr& __v) const; 170046035553Spatrick 170146035553Spatrick _LIBCPP_INLINE_VISIBILITY 170246035553Spatrick const gslice_array& operator=(const gslice_array& __ga) const; 170346035553Spatrick 170446035553Spatrick _LIBCPP_INLINE_VISIBILITY 170546035553Spatrick void operator=(const value_type& __x) const; 170646035553Spatrick 170746035553Spatrick gslice_array(const gslice_array&) = default; 170846035553Spatrick 170946035553Spatrickprivate: 171046035553Spatrick gslice_array(const gslice& __gs, const valarray<value_type>& __v) 171146035553Spatrick : __vp_(const_cast<value_type*>(__v.__begin_)), 171246035553Spatrick __1d_(__gs.__1d_) 171346035553Spatrick {} 171446035553Spatrick 171546035553Spatrick#ifndef _LIBCPP_CXX03_LANG 171646035553Spatrick gslice_array(gslice&& __gs, const valarray<value_type>& __v) 171746035553Spatrick : __vp_(const_cast<value_type*>(__v.__begin_)), 1718*4bdff4beSrobert __1d_(std::move(__gs.__1d_)) 171946035553Spatrick {} 172046035553Spatrick#endif // _LIBCPP_CXX03_LANG 172146035553Spatrick 172246035553Spatrick template <class> friend class valarray; 172346035553Spatrick}; 172446035553Spatrick 172546035553Spatricktemplate <class _Tp> 172646035553Spatricktemplate <class _Expr> 172746035553Spatrickinline 172846035553Spatricktypename enable_if 172946035553Spatrick< 173046035553Spatrick __is_val_expr<_Expr>::value, 173146035553Spatrick void 173246035553Spatrick>::type 173346035553Spatrickgslice_array<_Tp>::operator=(const _Expr& __v) const 173446035553Spatrick{ 173546035553Spatrick typedef const size_t* _Ip; 173646035553Spatrick size_t __j = 0; 173746035553Spatrick for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 173846035553Spatrick __vp_[*__i] = __v[__j]; 173946035553Spatrick} 174046035553Spatrick 174146035553Spatricktemplate <class _Tp> 174246035553Spatricktemplate <class _Expr> 174346035553Spatrickinline 174446035553Spatricktypename enable_if 174546035553Spatrick< 174646035553Spatrick __is_val_expr<_Expr>::value, 174746035553Spatrick void 174846035553Spatrick>::type 174946035553Spatrickgslice_array<_Tp>::operator*=(const _Expr& __v) const 175046035553Spatrick{ 175146035553Spatrick typedef const size_t* _Ip; 175246035553Spatrick size_t __j = 0; 175346035553Spatrick for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 175446035553Spatrick __vp_[*__i] *= __v[__j]; 175546035553Spatrick} 175646035553Spatrick 175746035553Spatricktemplate <class _Tp> 175846035553Spatricktemplate <class _Expr> 175946035553Spatrickinline 176046035553Spatricktypename enable_if 176146035553Spatrick< 176246035553Spatrick __is_val_expr<_Expr>::value, 176346035553Spatrick void 176446035553Spatrick>::type 176546035553Spatrickgslice_array<_Tp>::operator/=(const _Expr& __v) const 176646035553Spatrick{ 176746035553Spatrick typedef const size_t* _Ip; 176846035553Spatrick size_t __j = 0; 176946035553Spatrick for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 177046035553Spatrick __vp_[*__i] /= __v[__j]; 177146035553Spatrick} 177246035553Spatrick 177346035553Spatricktemplate <class _Tp> 177446035553Spatricktemplate <class _Expr> 177546035553Spatrickinline 177646035553Spatricktypename enable_if 177746035553Spatrick< 177846035553Spatrick __is_val_expr<_Expr>::value, 177946035553Spatrick void 178046035553Spatrick>::type 178146035553Spatrickgslice_array<_Tp>::operator%=(const _Expr& __v) const 178246035553Spatrick{ 178346035553Spatrick typedef const size_t* _Ip; 178446035553Spatrick size_t __j = 0; 178546035553Spatrick for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 178646035553Spatrick __vp_[*__i] %= __v[__j]; 178746035553Spatrick} 178846035553Spatrick 178946035553Spatricktemplate <class _Tp> 179046035553Spatricktemplate <class _Expr> 179146035553Spatrickinline 179246035553Spatricktypename enable_if 179346035553Spatrick< 179446035553Spatrick __is_val_expr<_Expr>::value, 179546035553Spatrick void 179646035553Spatrick>::type 179746035553Spatrickgslice_array<_Tp>::operator+=(const _Expr& __v) const 179846035553Spatrick{ 179946035553Spatrick typedef const size_t* _Ip; 180046035553Spatrick size_t __j = 0; 180146035553Spatrick for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 180246035553Spatrick __vp_[*__i] += __v[__j]; 180346035553Spatrick} 180446035553Spatrick 180546035553Spatricktemplate <class _Tp> 180646035553Spatricktemplate <class _Expr> 180746035553Spatrickinline 180846035553Spatricktypename enable_if 180946035553Spatrick< 181046035553Spatrick __is_val_expr<_Expr>::value, 181146035553Spatrick void 181246035553Spatrick>::type 181346035553Spatrickgslice_array<_Tp>::operator-=(const _Expr& __v) const 181446035553Spatrick{ 181546035553Spatrick typedef const size_t* _Ip; 181646035553Spatrick size_t __j = 0; 181746035553Spatrick for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 181846035553Spatrick __vp_[*__i] -= __v[__j]; 181946035553Spatrick} 182046035553Spatrick 182146035553Spatricktemplate <class _Tp> 182246035553Spatricktemplate <class _Expr> 182346035553Spatrickinline 182446035553Spatricktypename enable_if 182546035553Spatrick< 182646035553Spatrick __is_val_expr<_Expr>::value, 182746035553Spatrick void 182846035553Spatrick>::type 182946035553Spatrickgslice_array<_Tp>::operator^=(const _Expr& __v) const 183046035553Spatrick{ 183146035553Spatrick typedef const size_t* _Ip; 183246035553Spatrick size_t __j = 0; 183346035553Spatrick for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 183446035553Spatrick __vp_[*__i] ^= __v[__j]; 183546035553Spatrick} 183646035553Spatrick 183746035553Spatricktemplate <class _Tp> 183846035553Spatricktemplate <class _Expr> 183946035553Spatrickinline 184046035553Spatricktypename enable_if 184146035553Spatrick< 184246035553Spatrick __is_val_expr<_Expr>::value, 184346035553Spatrick void 184446035553Spatrick>::type 184546035553Spatrickgslice_array<_Tp>::operator&=(const _Expr& __v) const 184646035553Spatrick{ 184746035553Spatrick typedef const size_t* _Ip; 184846035553Spatrick size_t __j = 0; 184946035553Spatrick for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 185046035553Spatrick __vp_[*__i] &= __v[__j]; 185146035553Spatrick} 185246035553Spatrick 185346035553Spatricktemplate <class _Tp> 185446035553Spatricktemplate <class _Expr> 185546035553Spatrickinline 185646035553Spatricktypename enable_if 185746035553Spatrick< 185846035553Spatrick __is_val_expr<_Expr>::value, 185946035553Spatrick void 186046035553Spatrick>::type 186146035553Spatrickgslice_array<_Tp>::operator|=(const _Expr& __v) const 186246035553Spatrick{ 186346035553Spatrick typedef const size_t* _Ip; 186446035553Spatrick size_t __j = 0; 186546035553Spatrick for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 186646035553Spatrick __vp_[*__i] |= __v[__j]; 186746035553Spatrick} 186846035553Spatrick 186946035553Spatricktemplate <class _Tp> 187046035553Spatricktemplate <class _Expr> 187146035553Spatrickinline 187246035553Spatricktypename enable_if 187346035553Spatrick< 187446035553Spatrick __is_val_expr<_Expr>::value, 187546035553Spatrick void 187646035553Spatrick>::type 187746035553Spatrickgslice_array<_Tp>::operator<<=(const _Expr& __v) const 187846035553Spatrick{ 187946035553Spatrick typedef const size_t* _Ip; 188046035553Spatrick size_t __j = 0; 188146035553Spatrick for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 188246035553Spatrick __vp_[*__i] <<= __v[__j]; 188346035553Spatrick} 188446035553Spatrick 188546035553Spatricktemplate <class _Tp> 188646035553Spatricktemplate <class _Expr> 188746035553Spatrickinline 188846035553Spatricktypename enable_if 188946035553Spatrick< 189046035553Spatrick __is_val_expr<_Expr>::value, 189146035553Spatrick void 189246035553Spatrick>::type 189346035553Spatrickgslice_array<_Tp>::operator>>=(const _Expr& __v) const 189446035553Spatrick{ 189546035553Spatrick typedef const size_t* _Ip; 189646035553Spatrick size_t __j = 0; 189746035553Spatrick for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 189846035553Spatrick __vp_[*__i] >>= __v[__j]; 189946035553Spatrick} 190046035553Spatrick 190146035553Spatricktemplate <class _Tp> 190246035553Spatrickinline 190346035553Spatrickconst gslice_array<_Tp>& 190446035553Spatrickgslice_array<_Tp>::operator=(const gslice_array& __ga) const 190546035553Spatrick{ 190646035553Spatrick typedef const size_t* _Ip; 190746035553Spatrick const value_type* __s = __ga.__vp_; 190846035553Spatrick for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_, __j = __ga.__1d_.__begin_; 190946035553Spatrick __i != __e; ++__i, ++__j) 191046035553Spatrick __vp_[*__i] = __s[*__j]; 191146035553Spatrick return *this; 191246035553Spatrick} 191346035553Spatrick 191446035553Spatricktemplate <class _Tp> 191546035553Spatrickinline 191646035553Spatrickvoid 191746035553Spatrickgslice_array<_Tp>::operator=(const value_type& __x) const 191846035553Spatrick{ 191946035553Spatrick typedef const size_t* _Ip; 192046035553Spatrick for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i) 192146035553Spatrick __vp_[*__i] = __x; 192246035553Spatrick} 192346035553Spatrick 192446035553Spatrick// mask_array 192546035553Spatrick 192646035553Spatricktemplate <class _Tp> 192746035553Spatrickclass _LIBCPP_TEMPLATE_VIS mask_array 192846035553Spatrick{ 192946035553Spatrickpublic: 193046035553Spatrick typedef _Tp value_type; 193146035553Spatrick 193246035553Spatrickprivate: 193346035553Spatrick value_type* __vp_; 193446035553Spatrick valarray<size_t> __1d_; 193546035553Spatrick 193646035553Spatrickpublic: 193746035553Spatrick template <class _Expr> 193846035553Spatrick typename enable_if 193946035553Spatrick < 194046035553Spatrick __is_val_expr<_Expr>::value, 194146035553Spatrick void 194246035553Spatrick >::type 194346035553Spatrick _LIBCPP_INLINE_VISIBILITY 194446035553Spatrick operator=(const _Expr& __v) const; 194546035553Spatrick 194646035553Spatrick template <class _Expr> 194746035553Spatrick typename enable_if 194846035553Spatrick < 194946035553Spatrick __is_val_expr<_Expr>::value, 195046035553Spatrick void 195146035553Spatrick >::type 195246035553Spatrick _LIBCPP_INLINE_VISIBILITY 195346035553Spatrick operator*=(const _Expr& __v) const; 195446035553Spatrick 195546035553Spatrick template <class _Expr> 195646035553Spatrick typename enable_if 195746035553Spatrick < 195846035553Spatrick __is_val_expr<_Expr>::value, 195946035553Spatrick void 196046035553Spatrick >::type 196146035553Spatrick _LIBCPP_INLINE_VISIBILITY 196246035553Spatrick operator/=(const _Expr& __v) const; 196346035553Spatrick 196446035553Spatrick template <class _Expr> 196546035553Spatrick typename enable_if 196646035553Spatrick < 196746035553Spatrick __is_val_expr<_Expr>::value, 196846035553Spatrick void 196946035553Spatrick >::type 197046035553Spatrick _LIBCPP_INLINE_VISIBILITY 197146035553Spatrick operator%=(const _Expr& __v) const; 197246035553Spatrick 197346035553Spatrick template <class _Expr> 197446035553Spatrick typename enable_if 197546035553Spatrick < 197646035553Spatrick __is_val_expr<_Expr>::value, 197746035553Spatrick void 197846035553Spatrick >::type 197946035553Spatrick _LIBCPP_INLINE_VISIBILITY 198046035553Spatrick operator+=(const _Expr& __v) const; 198146035553Spatrick 198246035553Spatrick template <class _Expr> 198346035553Spatrick typename enable_if 198446035553Spatrick < 198546035553Spatrick __is_val_expr<_Expr>::value, 198646035553Spatrick void 198746035553Spatrick >::type 198846035553Spatrick _LIBCPP_INLINE_VISIBILITY 198946035553Spatrick operator-=(const _Expr& __v) const; 199046035553Spatrick 199146035553Spatrick template <class _Expr> 199246035553Spatrick typename enable_if 199346035553Spatrick < 199446035553Spatrick __is_val_expr<_Expr>::value, 199546035553Spatrick void 199646035553Spatrick >::type 199746035553Spatrick _LIBCPP_INLINE_VISIBILITY 199846035553Spatrick operator^=(const _Expr& __v) const; 199946035553Spatrick 200046035553Spatrick template <class _Expr> 200146035553Spatrick typename enable_if 200246035553Spatrick < 200346035553Spatrick __is_val_expr<_Expr>::value, 200446035553Spatrick void 200546035553Spatrick >::type 200646035553Spatrick _LIBCPP_INLINE_VISIBILITY 200746035553Spatrick operator&=(const _Expr& __v) const; 200846035553Spatrick 200946035553Spatrick template <class _Expr> 201046035553Spatrick typename enable_if 201146035553Spatrick < 201246035553Spatrick __is_val_expr<_Expr>::value, 201346035553Spatrick void 201446035553Spatrick >::type 201546035553Spatrick _LIBCPP_INLINE_VISIBILITY 201646035553Spatrick operator|=(const _Expr& __v) const; 201746035553Spatrick 201846035553Spatrick template <class _Expr> 201946035553Spatrick typename enable_if 202046035553Spatrick < 202146035553Spatrick __is_val_expr<_Expr>::value, 202246035553Spatrick void 202346035553Spatrick >::type 202446035553Spatrick _LIBCPP_INLINE_VISIBILITY 202546035553Spatrick operator<<=(const _Expr& __v) const; 202646035553Spatrick 202746035553Spatrick template <class _Expr> 202846035553Spatrick typename enable_if 202946035553Spatrick < 203046035553Spatrick __is_val_expr<_Expr>::value, 203146035553Spatrick void 203246035553Spatrick >::type 203346035553Spatrick _LIBCPP_INLINE_VISIBILITY 203446035553Spatrick operator>>=(const _Expr& __v) const; 203546035553Spatrick 203646035553Spatrick mask_array(const mask_array&) = default; 203746035553Spatrick 203846035553Spatrick _LIBCPP_INLINE_VISIBILITY 203946035553Spatrick const mask_array& operator=(const mask_array& __ma) const; 204046035553Spatrick 204146035553Spatrick _LIBCPP_INLINE_VISIBILITY 204246035553Spatrick void operator=(const value_type& __x) const; 204346035553Spatrick 204446035553Spatrickprivate: 204546035553Spatrick _LIBCPP_INLINE_VISIBILITY 204646035553Spatrick mask_array(const valarray<bool>& __vb, const valarray<value_type>& __v) 204746035553Spatrick : __vp_(const_cast<value_type*>(__v.__begin_)), 204846035553Spatrick __1d_(static_cast<size_t>(count(__vb.__begin_, __vb.__end_, true))) 204946035553Spatrick { 205046035553Spatrick size_t __j = 0; 205146035553Spatrick for (size_t __i = 0; __i < __vb.size(); ++__i) 205246035553Spatrick if (__vb[__i]) 205346035553Spatrick __1d_[__j++] = __i; 205446035553Spatrick } 205546035553Spatrick 205646035553Spatrick template <class> friend class valarray; 205746035553Spatrick}; 205846035553Spatrick 205946035553Spatricktemplate <class _Tp> 206046035553Spatricktemplate <class _Expr> 206146035553Spatrickinline 206246035553Spatricktypename enable_if 206346035553Spatrick< 206446035553Spatrick __is_val_expr<_Expr>::value, 206546035553Spatrick void 206646035553Spatrick>::type 206746035553Spatrickmask_array<_Tp>::operator=(const _Expr& __v) const 206846035553Spatrick{ 206946035553Spatrick size_t __n = __1d_.size(); 207046035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 207146035553Spatrick __vp_[__1d_[__i]] = __v[__i]; 207246035553Spatrick} 207346035553Spatrick 207446035553Spatricktemplate <class _Tp> 207546035553Spatricktemplate <class _Expr> 207646035553Spatrickinline 207746035553Spatricktypename enable_if 207846035553Spatrick< 207946035553Spatrick __is_val_expr<_Expr>::value, 208046035553Spatrick void 208146035553Spatrick>::type 208246035553Spatrickmask_array<_Tp>::operator*=(const _Expr& __v) const 208346035553Spatrick{ 208446035553Spatrick size_t __n = __1d_.size(); 208546035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 208646035553Spatrick __vp_[__1d_[__i]] *= __v[__i]; 208746035553Spatrick} 208846035553Spatrick 208946035553Spatricktemplate <class _Tp> 209046035553Spatricktemplate <class _Expr> 209146035553Spatrickinline 209246035553Spatricktypename enable_if 209346035553Spatrick< 209446035553Spatrick __is_val_expr<_Expr>::value, 209546035553Spatrick void 209646035553Spatrick>::type 209746035553Spatrickmask_array<_Tp>::operator/=(const _Expr& __v) const 209846035553Spatrick{ 209946035553Spatrick size_t __n = __1d_.size(); 210046035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 210146035553Spatrick __vp_[__1d_[__i]] /= __v[__i]; 210246035553Spatrick} 210346035553Spatrick 210446035553Spatricktemplate <class _Tp> 210546035553Spatricktemplate <class _Expr> 210646035553Spatrickinline 210746035553Spatricktypename enable_if 210846035553Spatrick< 210946035553Spatrick __is_val_expr<_Expr>::value, 211046035553Spatrick void 211146035553Spatrick>::type 211246035553Spatrickmask_array<_Tp>::operator%=(const _Expr& __v) const 211346035553Spatrick{ 211446035553Spatrick size_t __n = __1d_.size(); 211546035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 211646035553Spatrick __vp_[__1d_[__i]] %= __v[__i]; 211746035553Spatrick} 211846035553Spatrick 211946035553Spatricktemplate <class _Tp> 212046035553Spatricktemplate <class _Expr> 212146035553Spatrickinline 212246035553Spatricktypename enable_if 212346035553Spatrick< 212446035553Spatrick __is_val_expr<_Expr>::value, 212546035553Spatrick void 212646035553Spatrick>::type 212746035553Spatrickmask_array<_Tp>::operator+=(const _Expr& __v) const 212846035553Spatrick{ 212946035553Spatrick size_t __n = __1d_.size(); 213046035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 213146035553Spatrick __vp_[__1d_[__i]] += __v[__i]; 213246035553Spatrick} 213346035553Spatrick 213446035553Spatricktemplate <class _Tp> 213546035553Spatricktemplate <class _Expr> 213646035553Spatrickinline 213746035553Spatricktypename enable_if 213846035553Spatrick< 213946035553Spatrick __is_val_expr<_Expr>::value, 214046035553Spatrick void 214146035553Spatrick>::type 214246035553Spatrickmask_array<_Tp>::operator-=(const _Expr& __v) const 214346035553Spatrick{ 214446035553Spatrick size_t __n = __1d_.size(); 214546035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 214646035553Spatrick __vp_[__1d_[__i]] -= __v[__i]; 214746035553Spatrick} 214846035553Spatrick 214946035553Spatricktemplate <class _Tp> 215046035553Spatricktemplate <class _Expr> 215146035553Spatrickinline 215246035553Spatricktypename enable_if 215346035553Spatrick< 215446035553Spatrick __is_val_expr<_Expr>::value, 215546035553Spatrick void 215646035553Spatrick>::type 215746035553Spatrickmask_array<_Tp>::operator^=(const _Expr& __v) const 215846035553Spatrick{ 215946035553Spatrick size_t __n = __1d_.size(); 216046035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 216146035553Spatrick __vp_[__1d_[__i]] ^= __v[__i]; 216246035553Spatrick} 216346035553Spatrick 216446035553Spatricktemplate <class _Tp> 216546035553Spatricktemplate <class _Expr> 216646035553Spatrickinline 216746035553Spatricktypename enable_if 216846035553Spatrick< 216946035553Spatrick __is_val_expr<_Expr>::value, 217046035553Spatrick void 217146035553Spatrick>::type 217246035553Spatrickmask_array<_Tp>::operator&=(const _Expr& __v) const 217346035553Spatrick{ 217446035553Spatrick size_t __n = __1d_.size(); 217546035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 217646035553Spatrick __vp_[__1d_[__i]] &= __v[__i]; 217746035553Spatrick} 217846035553Spatrick 217946035553Spatricktemplate <class _Tp> 218046035553Spatricktemplate <class _Expr> 218146035553Spatrickinline 218246035553Spatricktypename enable_if 218346035553Spatrick< 218446035553Spatrick __is_val_expr<_Expr>::value, 218546035553Spatrick void 218646035553Spatrick>::type 218746035553Spatrickmask_array<_Tp>::operator|=(const _Expr& __v) const 218846035553Spatrick{ 218946035553Spatrick size_t __n = __1d_.size(); 219046035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 219146035553Spatrick __vp_[__1d_[__i]] |= __v[__i]; 219246035553Spatrick} 219346035553Spatrick 219446035553Spatricktemplate <class _Tp> 219546035553Spatricktemplate <class _Expr> 219646035553Spatrickinline 219746035553Spatricktypename enable_if 219846035553Spatrick< 219946035553Spatrick __is_val_expr<_Expr>::value, 220046035553Spatrick void 220146035553Spatrick>::type 220246035553Spatrickmask_array<_Tp>::operator<<=(const _Expr& __v) const 220346035553Spatrick{ 220446035553Spatrick size_t __n = __1d_.size(); 220546035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 220646035553Spatrick __vp_[__1d_[__i]] <<= __v[__i]; 220746035553Spatrick} 220846035553Spatrick 220946035553Spatricktemplate <class _Tp> 221046035553Spatricktemplate <class _Expr> 221146035553Spatrickinline 221246035553Spatricktypename enable_if 221346035553Spatrick< 221446035553Spatrick __is_val_expr<_Expr>::value, 221546035553Spatrick void 221646035553Spatrick>::type 221746035553Spatrickmask_array<_Tp>::operator>>=(const _Expr& __v) const 221846035553Spatrick{ 221946035553Spatrick size_t __n = __1d_.size(); 222046035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 222146035553Spatrick __vp_[__1d_[__i]] >>= __v[__i]; 222246035553Spatrick} 222346035553Spatrick 222446035553Spatricktemplate <class _Tp> 222546035553Spatrickinline 222646035553Spatrickconst mask_array<_Tp>& 222746035553Spatrickmask_array<_Tp>::operator=(const mask_array& __ma) const 222846035553Spatrick{ 222946035553Spatrick size_t __n = __1d_.size(); 223046035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 223146035553Spatrick __vp_[__1d_[__i]] = __ma.__vp_[__1d_[__i]]; 223246035553Spatrick return *this; 223346035553Spatrick} 223446035553Spatrick 223546035553Spatricktemplate <class _Tp> 223646035553Spatrickinline 223746035553Spatrickvoid 223846035553Spatrickmask_array<_Tp>::operator=(const value_type& __x) const 223946035553Spatrick{ 224046035553Spatrick size_t __n = __1d_.size(); 224146035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 224246035553Spatrick __vp_[__1d_[__i]] = __x; 224346035553Spatrick} 224446035553Spatrick 224546035553Spatricktemplate <class _ValExpr> 224646035553Spatrickclass __mask_expr 224746035553Spatrick{ 2248*4bdff4beSrobert typedef __libcpp_remove_reference_t<_ValExpr> _RmExpr; 224946035553Spatrickpublic: 225046035553Spatrick typedef typename _RmExpr::value_type value_type; 225176d0caaeSpatrick typedef value_type __result_type; 225246035553Spatrick 225346035553Spatrickprivate: 225446035553Spatrick _ValExpr __expr_; 225546035553Spatrick valarray<size_t> __1d_; 225646035553Spatrick 225746035553Spatrick _LIBCPP_INLINE_VISIBILITY 225846035553Spatrick __mask_expr(const valarray<bool>& __vb, const _RmExpr& __e) 225946035553Spatrick : __expr_(__e), 226046035553Spatrick __1d_(static_cast<size_t>(count(__vb.__begin_, __vb.__end_, true))) 226146035553Spatrick { 226246035553Spatrick size_t __j = 0; 226346035553Spatrick for (size_t __i = 0; __i < __vb.size(); ++__i) 226446035553Spatrick if (__vb[__i]) 226546035553Spatrick __1d_[__j++] = __i; 226646035553Spatrick } 226746035553Spatrick 226846035553Spatrickpublic: 226946035553Spatrick _LIBCPP_INLINE_VISIBILITY 227076d0caaeSpatrick __result_type operator[](size_t __i) const 227146035553Spatrick {return __expr_[__1d_[__i]];} 227246035553Spatrick 227346035553Spatrick _LIBCPP_INLINE_VISIBILITY 227446035553Spatrick size_t size() const {return __1d_.size();} 227546035553Spatrick 227646035553Spatrick template <class> friend class __val_expr; 227746035553Spatrick template <class> friend class valarray; 227846035553Spatrick}; 227946035553Spatrick 228046035553Spatrick// indirect_array 228146035553Spatrick 228246035553Spatricktemplate <class _Tp> 228346035553Spatrickclass _LIBCPP_TEMPLATE_VIS indirect_array 228446035553Spatrick{ 228546035553Spatrickpublic: 228646035553Spatrick typedef _Tp value_type; 228746035553Spatrick 228846035553Spatrickprivate: 228946035553Spatrick value_type* __vp_; 229046035553Spatrick valarray<size_t> __1d_; 229146035553Spatrick 229246035553Spatrickpublic: 229346035553Spatrick template <class _Expr> 229446035553Spatrick typename enable_if 229546035553Spatrick < 229646035553Spatrick __is_val_expr<_Expr>::value, 229746035553Spatrick void 229846035553Spatrick >::type 229946035553Spatrick _LIBCPP_INLINE_VISIBILITY 230046035553Spatrick operator=(const _Expr& __v) const; 230146035553Spatrick 230246035553Spatrick template <class _Expr> 230346035553Spatrick typename enable_if 230446035553Spatrick < 230546035553Spatrick __is_val_expr<_Expr>::value, 230646035553Spatrick void 230746035553Spatrick >::type 230846035553Spatrick _LIBCPP_INLINE_VISIBILITY 230946035553Spatrick operator*=(const _Expr& __v) const; 231046035553Spatrick 231146035553Spatrick template <class _Expr> 231246035553Spatrick typename enable_if 231346035553Spatrick < 231446035553Spatrick __is_val_expr<_Expr>::value, 231546035553Spatrick void 231646035553Spatrick >::type 231746035553Spatrick _LIBCPP_INLINE_VISIBILITY 231846035553Spatrick operator/=(const _Expr& __v) const; 231946035553Spatrick 232046035553Spatrick template <class _Expr> 232146035553Spatrick typename enable_if 232246035553Spatrick < 232346035553Spatrick __is_val_expr<_Expr>::value, 232446035553Spatrick void 232546035553Spatrick >::type 232646035553Spatrick _LIBCPP_INLINE_VISIBILITY 232746035553Spatrick operator%=(const _Expr& __v) const; 232846035553Spatrick 232946035553Spatrick template <class _Expr> 233046035553Spatrick typename enable_if 233146035553Spatrick < 233246035553Spatrick __is_val_expr<_Expr>::value, 233346035553Spatrick void 233446035553Spatrick >::type 233546035553Spatrick _LIBCPP_INLINE_VISIBILITY 233646035553Spatrick operator+=(const _Expr& __v) const; 233746035553Spatrick 233846035553Spatrick template <class _Expr> 233946035553Spatrick typename enable_if 234046035553Spatrick < 234146035553Spatrick __is_val_expr<_Expr>::value, 234246035553Spatrick void 234346035553Spatrick >::type 234446035553Spatrick _LIBCPP_INLINE_VISIBILITY 234546035553Spatrick operator-=(const _Expr& __v) const; 234646035553Spatrick 234746035553Spatrick template <class _Expr> 234846035553Spatrick typename enable_if 234946035553Spatrick < 235046035553Spatrick __is_val_expr<_Expr>::value, 235146035553Spatrick void 235246035553Spatrick >::type 235346035553Spatrick _LIBCPP_INLINE_VISIBILITY 235446035553Spatrick operator^=(const _Expr& __v) const; 235546035553Spatrick 235646035553Spatrick template <class _Expr> 235746035553Spatrick typename enable_if 235846035553Spatrick < 235946035553Spatrick __is_val_expr<_Expr>::value, 236046035553Spatrick void 236146035553Spatrick >::type 236246035553Spatrick _LIBCPP_INLINE_VISIBILITY 236346035553Spatrick operator&=(const _Expr& __v) const; 236446035553Spatrick 236546035553Spatrick template <class _Expr> 236646035553Spatrick typename enable_if 236746035553Spatrick < 236846035553Spatrick __is_val_expr<_Expr>::value, 236946035553Spatrick void 237046035553Spatrick >::type 237146035553Spatrick _LIBCPP_INLINE_VISIBILITY 237246035553Spatrick operator|=(const _Expr& __v) const; 237346035553Spatrick 237446035553Spatrick template <class _Expr> 237546035553Spatrick typename enable_if 237646035553Spatrick < 237746035553Spatrick __is_val_expr<_Expr>::value, 237846035553Spatrick void 237946035553Spatrick >::type 238046035553Spatrick _LIBCPP_INLINE_VISIBILITY 238146035553Spatrick operator<<=(const _Expr& __v) const; 238246035553Spatrick 238346035553Spatrick template <class _Expr> 238446035553Spatrick typename enable_if 238546035553Spatrick < 238646035553Spatrick __is_val_expr<_Expr>::value, 238746035553Spatrick void 238846035553Spatrick >::type 238946035553Spatrick _LIBCPP_INLINE_VISIBILITY 239046035553Spatrick operator>>=(const _Expr& __v) const; 239146035553Spatrick 239246035553Spatrick indirect_array(const indirect_array&) = default; 239346035553Spatrick 239446035553Spatrick _LIBCPP_INLINE_VISIBILITY 239546035553Spatrick const indirect_array& operator=(const indirect_array& __ia) const; 239646035553Spatrick 239746035553Spatrick _LIBCPP_INLINE_VISIBILITY 239846035553Spatrick void operator=(const value_type& __x) const; 239946035553Spatrick 240046035553Spatrickprivate: 240146035553Spatrick _LIBCPP_INLINE_VISIBILITY 240246035553Spatrick indirect_array(const valarray<size_t>& __ia, const valarray<value_type>& __v) 240346035553Spatrick : __vp_(const_cast<value_type*>(__v.__begin_)), 240446035553Spatrick __1d_(__ia) 240546035553Spatrick {} 240646035553Spatrick 240746035553Spatrick#ifndef _LIBCPP_CXX03_LANG 240846035553Spatrick 240946035553Spatrick _LIBCPP_INLINE_VISIBILITY 241046035553Spatrick indirect_array(valarray<size_t>&& __ia, const valarray<value_type>& __v) 241146035553Spatrick : __vp_(const_cast<value_type*>(__v.__begin_)), 2412*4bdff4beSrobert __1d_(std::move(__ia)) 241346035553Spatrick {} 241446035553Spatrick 241546035553Spatrick#endif // _LIBCPP_CXX03_LANG 241646035553Spatrick 241746035553Spatrick template <class> friend class valarray; 241846035553Spatrick}; 241946035553Spatrick 242046035553Spatricktemplate <class _Tp> 242146035553Spatricktemplate <class _Expr> 242246035553Spatrickinline 242346035553Spatricktypename enable_if 242446035553Spatrick< 242546035553Spatrick __is_val_expr<_Expr>::value, 242646035553Spatrick void 242746035553Spatrick>::type 242846035553Spatrickindirect_array<_Tp>::operator=(const _Expr& __v) const 242946035553Spatrick{ 243046035553Spatrick size_t __n = __1d_.size(); 243146035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 243246035553Spatrick __vp_[__1d_[__i]] = __v[__i]; 243346035553Spatrick} 243446035553Spatrick 243546035553Spatricktemplate <class _Tp> 243646035553Spatricktemplate <class _Expr> 243746035553Spatrickinline 243846035553Spatricktypename enable_if 243946035553Spatrick< 244046035553Spatrick __is_val_expr<_Expr>::value, 244146035553Spatrick void 244246035553Spatrick>::type 244346035553Spatrickindirect_array<_Tp>::operator*=(const _Expr& __v) const 244446035553Spatrick{ 244546035553Spatrick size_t __n = __1d_.size(); 244646035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 244746035553Spatrick __vp_[__1d_[__i]] *= __v[__i]; 244846035553Spatrick} 244946035553Spatrick 245046035553Spatricktemplate <class _Tp> 245146035553Spatricktemplate <class _Expr> 245246035553Spatrickinline 245346035553Spatricktypename enable_if 245446035553Spatrick< 245546035553Spatrick __is_val_expr<_Expr>::value, 245646035553Spatrick void 245746035553Spatrick>::type 245846035553Spatrickindirect_array<_Tp>::operator/=(const _Expr& __v) const 245946035553Spatrick{ 246046035553Spatrick size_t __n = __1d_.size(); 246146035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 246246035553Spatrick __vp_[__1d_[__i]] /= __v[__i]; 246346035553Spatrick} 246446035553Spatrick 246546035553Spatricktemplate <class _Tp> 246646035553Spatricktemplate <class _Expr> 246746035553Spatrickinline 246846035553Spatricktypename enable_if 246946035553Spatrick< 247046035553Spatrick __is_val_expr<_Expr>::value, 247146035553Spatrick void 247246035553Spatrick>::type 247346035553Spatrickindirect_array<_Tp>::operator%=(const _Expr& __v) const 247446035553Spatrick{ 247546035553Spatrick size_t __n = __1d_.size(); 247646035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 247746035553Spatrick __vp_[__1d_[__i]] %= __v[__i]; 247846035553Spatrick} 247946035553Spatrick 248046035553Spatricktemplate <class _Tp> 248146035553Spatricktemplate <class _Expr> 248246035553Spatrickinline 248346035553Spatricktypename enable_if 248446035553Spatrick< 248546035553Spatrick __is_val_expr<_Expr>::value, 248646035553Spatrick void 248746035553Spatrick>::type 248846035553Spatrickindirect_array<_Tp>::operator+=(const _Expr& __v) const 248946035553Spatrick{ 249046035553Spatrick size_t __n = __1d_.size(); 249146035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 249246035553Spatrick __vp_[__1d_[__i]] += __v[__i]; 249346035553Spatrick} 249446035553Spatrick 249546035553Spatricktemplate <class _Tp> 249646035553Spatricktemplate <class _Expr> 249746035553Spatrickinline 249846035553Spatricktypename enable_if 249946035553Spatrick< 250046035553Spatrick __is_val_expr<_Expr>::value, 250146035553Spatrick void 250246035553Spatrick>::type 250346035553Spatrickindirect_array<_Tp>::operator-=(const _Expr& __v) const 250446035553Spatrick{ 250546035553Spatrick size_t __n = __1d_.size(); 250646035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 250746035553Spatrick __vp_[__1d_[__i]] -= __v[__i]; 250846035553Spatrick} 250946035553Spatrick 251046035553Spatricktemplate <class _Tp> 251146035553Spatricktemplate <class _Expr> 251246035553Spatrickinline 251346035553Spatricktypename enable_if 251446035553Spatrick< 251546035553Spatrick __is_val_expr<_Expr>::value, 251646035553Spatrick void 251746035553Spatrick>::type 251846035553Spatrickindirect_array<_Tp>::operator^=(const _Expr& __v) const 251946035553Spatrick{ 252046035553Spatrick size_t __n = __1d_.size(); 252146035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 252246035553Spatrick __vp_[__1d_[__i]] ^= __v[__i]; 252346035553Spatrick} 252446035553Spatrick 252546035553Spatricktemplate <class _Tp> 252646035553Spatricktemplate <class _Expr> 252746035553Spatrickinline 252846035553Spatricktypename enable_if 252946035553Spatrick< 253046035553Spatrick __is_val_expr<_Expr>::value, 253146035553Spatrick void 253246035553Spatrick>::type 253346035553Spatrickindirect_array<_Tp>::operator&=(const _Expr& __v) const 253446035553Spatrick{ 253546035553Spatrick size_t __n = __1d_.size(); 253646035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 253746035553Spatrick __vp_[__1d_[__i]] &= __v[__i]; 253846035553Spatrick} 253946035553Spatrick 254046035553Spatricktemplate <class _Tp> 254146035553Spatricktemplate <class _Expr> 254246035553Spatrickinline 254346035553Spatricktypename enable_if 254446035553Spatrick< 254546035553Spatrick __is_val_expr<_Expr>::value, 254646035553Spatrick void 254746035553Spatrick>::type 254846035553Spatrickindirect_array<_Tp>::operator|=(const _Expr& __v) const 254946035553Spatrick{ 255046035553Spatrick size_t __n = __1d_.size(); 255146035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 255246035553Spatrick __vp_[__1d_[__i]] |= __v[__i]; 255346035553Spatrick} 255446035553Spatrick 255546035553Spatricktemplate <class _Tp> 255646035553Spatricktemplate <class _Expr> 255746035553Spatrickinline 255846035553Spatricktypename enable_if 255946035553Spatrick< 256046035553Spatrick __is_val_expr<_Expr>::value, 256146035553Spatrick void 256246035553Spatrick>::type 256346035553Spatrickindirect_array<_Tp>::operator<<=(const _Expr& __v) const 256446035553Spatrick{ 256546035553Spatrick size_t __n = __1d_.size(); 256646035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 256746035553Spatrick __vp_[__1d_[__i]] <<= __v[__i]; 256846035553Spatrick} 256946035553Spatrick 257046035553Spatricktemplate <class _Tp> 257146035553Spatricktemplate <class _Expr> 257246035553Spatrickinline 257346035553Spatricktypename enable_if 257446035553Spatrick< 257546035553Spatrick __is_val_expr<_Expr>::value, 257646035553Spatrick void 257746035553Spatrick>::type 257846035553Spatrickindirect_array<_Tp>::operator>>=(const _Expr& __v) const 257946035553Spatrick{ 258046035553Spatrick size_t __n = __1d_.size(); 258146035553Spatrick for (size_t __i = 0; __i < __n; ++__i) 258246035553Spatrick __vp_[__1d_[__i]] >>= __v[__i]; 258346035553Spatrick} 258446035553Spatrick 258546035553Spatricktemplate <class _Tp> 258646035553Spatrickinline 258746035553Spatrickconst indirect_array<_Tp>& 258846035553Spatrickindirect_array<_Tp>::operator=(const indirect_array& __ia) const 258946035553Spatrick{ 259046035553Spatrick typedef const size_t* _Ip; 259146035553Spatrick const value_type* __s = __ia.__vp_; 259246035553Spatrick for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_, __j = __ia.__1d_.__begin_; 259346035553Spatrick __i != __e; ++__i, ++__j) 259446035553Spatrick __vp_[*__i] = __s[*__j]; 259546035553Spatrick return *this; 259646035553Spatrick} 259746035553Spatrick 259846035553Spatricktemplate <class _Tp> 259946035553Spatrickinline 260046035553Spatrickvoid 260146035553Spatrickindirect_array<_Tp>::operator=(const value_type& __x) const 260246035553Spatrick{ 260346035553Spatrick typedef const size_t* _Ip; 260446035553Spatrick for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i) 260546035553Spatrick __vp_[*__i] = __x; 260646035553Spatrick} 260746035553Spatrick 260846035553Spatricktemplate <class _ValExpr> 260946035553Spatrickclass __indirect_expr 261046035553Spatrick{ 2611*4bdff4beSrobert typedef __libcpp_remove_reference_t<_ValExpr> _RmExpr; 261246035553Spatrickpublic: 261346035553Spatrick typedef typename _RmExpr::value_type value_type; 261476d0caaeSpatrick typedef value_type __result_type; 261546035553Spatrick 261646035553Spatrickprivate: 261746035553Spatrick _ValExpr __expr_; 261846035553Spatrick valarray<size_t> __1d_; 261946035553Spatrick 262046035553Spatrick _LIBCPP_INLINE_VISIBILITY 262146035553Spatrick __indirect_expr(const valarray<size_t>& __ia, const _RmExpr& __e) 262246035553Spatrick : __expr_(__e), 262346035553Spatrick __1d_(__ia) 262446035553Spatrick {} 262546035553Spatrick 262646035553Spatrick#ifndef _LIBCPP_CXX03_LANG 262746035553Spatrick 262846035553Spatrick _LIBCPP_INLINE_VISIBILITY 262946035553Spatrick __indirect_expr(valarray<size_t>&& __ia, const _RmExpr& __e) 263046035553Spatrick : __expr_(__e), 2631*4bdff4beSrobert __1d_(std::move(__ia)) 263246035553Spatrick {} 263346035553Spatrick 263446035553Spatrick#endif // _LIBCPP_CXX03_LANG 263546035553Spatrick 263646035553Spatrickpublic: 263746035553Spatrick _LIBCPP_INLINE_VISIBILITY 263876d0caaeSpatrick __result_type operator[](size_t __i) const 263946035553Spatrick {return __expr_[__1d_[__i]];} 264046035553Spatrick 264146035553Spatrick _LIBCPP_INLINE_VISIBILITY 264246035553Spatrick size_t size() const {return __1d_.size();} 264346035553Spatrick 264446035553Spatrick template <class> friend class __val_expr; 264546035553Spatrick template <class> friend class _LIBCPP_TEMPLATE_VIS valarray; 264646035553Spatrick}; 264746035553Spatrick 264846035553Spatricktemplate<class _ValExpr> 264946035553Spatrickclass __val_expr 265046035553Spatrick{ 2651*4bdff4beSrobert typedef __libcpp_remove_reference_t<_ValExpr> _RmExpr; 265246035553Spatrick 265346035553Spatrick _ValExpr __expr_; 265446035553Spatrickpublic: 265546035553Spatrick typedef typename _RmExpr::value_type value_type; 265676d0caaeSpatrick typedef typename _RmExpr::__result_type __result_type; 265746035553Spatrick 265846035553Spatrick _LIBCPP_INLINE_VISIBILITY 265946035553Spatrick explicit __val_expr(const _RmExpr& __e) : __expr_(__e) {} 266046035553Spatrick 266146035553Spatrick _LIBCPP_INLINE_VISIBILITY 266276d0caaeSpatrick __result_type operator[](size_t __i) const 266346035553Spatrick {return __expr_[__i];} 266446035553Spatrick 266546035553Spatrick _LIBCPP_INLINE_VISIBILITY 266646035553Spatrick __val_expr<__slice_expr<_ValExpr> > operator[](slice __s) const 266746035553Spatrick { 266846035553Spatrick typedef __slice_expr<_ValExpr> _NewExpr; 266946035553Spatrick return __val_expr< _NewExpr >(_NewExpr(__s, __expr_)); 267046035553Spatrick } 267146035553Spatrick 267246035553Spatrick _LIBCPP_INLINE_VISIBILITY 267346035553Spatrick __val_expr<__indirect_expr<_ValExpr> > operator[](const gslice& __gs) const 267446035553Spatrick { 267546035553Spatrick typedef __indirect_expr<_ValExpr> _NewExpr; 267646035553Spatrick return __val_expr<_NewExpr >(_NewExpr(__gs.__1d_, __expr_)); 267746035553Spatrick } 267846035553Spatrick 267946035553Spatrick _LIBCPP_INLINE_VISIBILITY 268046035553Spatrick __val_expr<__mask_expr<_ValExpr> > operator[](const valarray<bool>& __vb) const 268146035553Spatrick { 268246035553Spatrick typedef __mask_expr<_ValExpr> _NewExpr; 268346035553Spatrick return __val_expr< _NewExpr >( _NewExpr(__vb, __expr_)); 268446035553Spatrick } 268546035553Spatrick 268646035553Spatrick _LIBCPP_INLINE_VISIBILITY 268746035553Spatrick __val_expr<__indirect_expr<_ValExpr> > operator[](const valarray<size_t>& __vs) const 268846035553Spatrick { 268946035553Spatrick typedef __indirect_expr<_ValExpr> _NewExpr; 269046035553Spatrick return __val_expr< _NewExpr >(_NewExpr(__vs, __expr_)); 269146035553Spatrick } 269246035553Spatrick 269346035553Spatrick _LIBCPP_INLINE_VISIBILITY 269446035553Spatrick __val_expr<_UnaryOp<__unary_plus<value_type>, _ValExpr> > 269546035553Spatrick operator+() const 269646035553Spatrick { 269746035553Spatrick typedef _UnaryOp<__unary_plus<value_type>, _ValExpr> _NewExpr; 269846035553Spatrick return __val_expr<_NewExpr>(_NewExpr(__unary_plus<value_type>(), __expr_)); 269946035553Spatrick } 270046035553Spatrick 270146035553Spatrick _LIBCPP_INLINE_VISIBILITY 270246035553Spatrick __val_expr<_UnaryOp<negate<value_type>, _ValExpr> > 270346035553Spatrick operator-() const 270446035553Spatrick { 270546035553Spatrick typedef _UnaryOp<negate<value_type>, _ValExpr> _NewExpr; 270646035553Spatrick return __val_expr<_NewExpr>(_NewExpr(negate<value_type>(), __expr_)); 270746035553Spatrick } 270846035553Spatrick 270946035553Spatrick _LIBCPP_INLINE_VISIBILITY 271046035553Spatrick __val_expr<_UnaryOp<__bit_not<value_type>, _ValExpr> > 271146035553Spatrick operator~() const 271246035553Spatrick { 271346035553Spatrick typedef _UnaryOp<__bit_not<value_type>, _ValExpr> _NewExpr; 271446035553Spatrick return __val_expr<_NewExpr>(_NewExpr(__bit_not<value_type>(), __expr_)); 271546035553Spatrick } 271646035553Spatrick 271746035553Spatrick _LIBCPP_INLINE_VISIBILITY 271846035553Spatrick __val_expr<_UnaryOp<logical_not<value_type>, _ValExpr> > 271946035553Spatrick operator!() const 272046035553Spatrick { 272146035553Spatrick typedef _UnaryOp<logical_not<value_type>, _ValExpr> _NewExpr; 272246035553Spatrick return __val_expr<_NewExpr>(_NewExpr(logical_not<value_type>(), __expr_)); 272346035553Spatrick } 272446035553Spatrick 272576d0caaeSpatrick operator valarray<__result_type>() const; 272646035553Spatrick 272746035553Spatrick _LIBCPP_INLINE_VISIBILITY 272846035553Spatrick size_t size() const {return __expr_.size();} 272946035553Spatrick 273046035553Spatrick _LIBCPP_INLINE_VISIBILITY 273176d0caaeSpatrick __result_type sum() const 273246035553Spatrick { 273346035553Spatrick size_t __n = __expr_.size(); 273476d0caaeSpatrick __result_type __r = __n ? __expr_[0] : __result_type(); 273546035553Spatrick for (size_t __i = 1; __i < __n; ++__i) 273646035553Spatrick __r += __expr_[__i]; 273746035553Spatrick return __r; 273846035553Spatrick } 273946035553Spatrick 274046035553Spatrick _LIBCPP_INLINE_VISIBILITY 274176d0caaeSpatrick __result_type min() const 274246035553Spatrick { 274346035553Spatrick size_t __n = size(); 274476d0caaeSpatrick __result_type __r = __n ? (*this)[0] : __result_type(); 274546035553Spatrick for (size_t __i = 1; __i < __n; ++__i) 274646035553Spatrick { 274776d0caaeSpatrick __result_type __x = __expr_[__i]; 274846035553Spatrick if (__x < __r) 274946035553Spatrick __r = __x; 275046035553Spatrick } 275146035553Spatrick return __r; 275246035553Spatrick } 275346035553Spatrick 275446035553Spatrick _LIBCPP_INLINE_VISIBILITY 275576d0caaeSpatrick __result_type max() const 275646035553Spatrick { 275746035553Spatrick size_t __n = size(); 275876d0caaeSpatrick __result_type __r = __n ? (*this)[0] : __result_type(); 275946035553Spatrick for (size_t __i = 1; __i < __n; ++__i) 276046035553Spatrick { 276176d0caaeSpatrick __result_type __x = __expr_[__i]; 276246035553Spatrick if (__r < __x) 276346035553Spatrick __r = __x; 276446035553Spatrick } 276546035553Spatrick return __r; 276646035553Spatrick } 276746035553Spatrick 276846035553Spatrick _LIBCPP_INLINE_VISIBILITY 276946035553Spatrick __val_expr<__shift_expr<_ValExpr> > shift (int __i) const 277046035553Spatrick {return __val_expr<__shift_expr<_ValExpr> >(__shift_expr<_ValExpr>(__i, __expr_));} 277146035553Spatrick 277246035553Spatrick _LIBCPP_INLINE_VISIBILITY 277346035553Spatrick __val_expr<__cshift_expr<_ValExpr> > cshift(int __i) const 277446035553Spatrick {return __val_expr<__cshift_expr<_ValExpr> >(__cshift_expr<_ValExpr>(__i, __expr_));} 277546035553Spatrick 277646035553Spatrick _LIBCPP_INLINE_VISIBILITY 277746035553Spatrick __val_expr<_UnaryOp<__apply_expr<value_type, value_type(*)(value_type)>, _ValExpr> > 277846035553Spatrick apply(value_type __f(value_type)) const 277946035553Spatrick { 278046035553Spatrick typedef __apply_expr<value_type, value_type(*)(value_type)> _Op; 278146035553Spatrick typedef _UnaryOp<_Op, _ValExpr> _NewExpr; 278246035553Spatrick return __val_expr<_NewExpr>(_NewExpr(_Op(__f), __expr_)); 278346035553Spatrick } 278446035553Spatrick 278546035553Spatrick _LIBCPP_INLINE_VISIBILITY 278646035553Spatrick __val_expr<_UnaryOp<__apply_expr<value_type, value_type(*)(const value_type&)>, _ValExpr> > 278746035553Spatrick apply(value_type __f(const value_type&)) const 278846035553Spatrick { 278946035553Spatrick typedef __apply_expr<value_type, value_type(*)(const value_type&)> _Op; 279046035553Spatrick typedef _UnaryOp<_Op, _ValExpr> _NewExpr; 279146035553Spatrick return __val_expr<_NewExpr>(_NewExpr(_Op(__f), __expr_)); 279246035553Spatrick } 279346035553Spatrick}; 279446035553Spatrick 279546035553Spatricktemplate<class _ValExpr> 279676d0caaeSpatrick__val_expr<_ValExpr>::operator valarray<__val_expr::__result_type>() const 279746035553Spatrick{ 279876d0caaeSpatrick valarray<__result_type> __r; 279946035553Spatrick size_t __n = __expr_.size(); 280046035553Spatrick if (__n) 280146035553Spatrick { 280246035553Spatrick __r.__begin_ = 280376d0caaeSpatrick __r.__end_ = allocator<__result_type>().allocate(__n); 280446035553Spatrick for (size_t __i = 0; __i != __n; ++__r.__end_, ++__i) 280576d0caaeSpatrick ::new ((void*)__r.__end_) __result_type(__expr_[__i]); 280646035553Spatrick } 280746035553Spatrick return __r; 280846035553Spatrick} 280946035553Spatrick 281046035553Spatrick// valarray 281146035553Spatrick 281246035553Spatricktemplate <class _Tp> 281346035553Spatrickinline 281446035553Spatrickvalarray<_Tp>::valarray(size_t __n) 281576d0caaeSpatrick : __begin_(nullptr), 281676d0caaeSpatrick __end_(nullptr) 281746035553Spatrick{ 281846035553Spatrick if (__n) 281946035553Spatrick { 282076d0caaeSpatrick __begin_ = __end_ = allocator<value_type>().allocate(__n); 282146035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 282246035553Spatrick try 282346035553Spatrick { 282446035553Spatrick#endif // _LIBCPP_NO_EXCEPTIONS 282546035553Spatrick for (size_t __n_left = __n; __n_left; --__n_left, ++__end_) 282676d0caaeSpatrick ::new ((void*)__end_) value_type(); 282746035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 282846035553Spatrick } 282946035553Spatrick catch (...) 283046035553Spatrick { 283146035553Spatrick __clear(__n); 283246035553Spatrick throw; 283346035553Spatrick } 283446035553Spatrick#endif // _LIBCPP_NO_EXCEPTIONS 283546035553Spatrick } 283646035553Spatrick} 283746035553Spatrick 283846035553Spatricktemplate <class _Tp> 283946035553Spatrickinline 284046035553Spatrickvalarray<_Tp>::valarray(const value_type& __x, size_t __n) 284176d0caaeSpatrick : __begin_(nullptr), 284276d0caaeSpatrick __end_(nullptr) 284346035553Spatrick{ 284446035553Spatrick resize(__n, __x); 284546035553Spatrick} 284646035553Spatrick 284746035553Spatricktemplate <class _Tp> 284846035553Spatrickvalarray<_Tp>::valarray(const value_type* __p, size_t __n) 284976d0caaeSpatrick : __begin_(nullptr), 285076d0caaeSpatrick __end_(nullptr) 285146035553Spatrick{ 285246035553Spatrick if (__n) 285346035553Spatrick { 285476d0caaeSpatrick __begin_ = __end_ = allocator<value_type>().allocate(__n); 285546035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 285646035553Spatrick try 285746035553Spatrick { 285846035553Spatrick#endif // _LIBCPP_NO_EXCEPTIONS 285946035553Spatrick for (size_t __n_left = __n; __n_left; ++__end_, ++__p, --__n_left) 286076d0caaeSpatrick ::new ((void*)__end_) value_type(*__p); 286146035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 286246035553Spatrick } 286346035553Spatrick catch (...) 286446035553Spatrick { 286546035553Spatrick __clear(__n); 286646035553Spatrick throw; 286746035553Spatrick } 286846035553Spatrick#endif // _LIBCPP_NO_EXCEPTIONS 286946035553Spatrick } 287046035553Spatrick} 287146035553Spatrick 287246035553Spatricktemplate <class _Tp> 287346035553Spatrickvalarray<_Tp>::valarray(const valarray& __v) 287476d0caaeSpatrick : __begin_(nullptr), 287576d0caaeSpatrick __end_(nullptr) 287646035553Spatrick{ 287746035553Spatrick if (__v.size()) 287846035553Spatrick { 287976d0caaeSpatrick __begin_ = __end_ = allocator<value_type>().allocate(__v.size()); 288046035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 288146035553Spatrick try 288246035553Spatrick { 288346035553Spatrick#endif // _LIBCPP_NO_EXCEPTIONS 288446035553Spatrick for (value_type* __p = __v.__begin_; __p != __v.__end_; ++__end_, ++__p) 288576d0caaeSpatrick ::new ((void*)__end_) value_type(*__p); 288646035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 288746035553Spatrick } 288846035553Spatrick catch (...) 288946035553Spatrick { 289046035553Spatrick __clear(__v.size()); 289146035553Spatrick throw; 289246035553Spatrick } 289346035553Spatrick#endif // _LIBCPP_NO_EXCEPTIONS 289446035553Spatrick } 289546035553Spatrick} 289646035553Spatrick 289746035553Spatrick#ifndef _LIBCPP_CXX03_LANG 289846035553Spatrick 289946035553Spatricktemplate <class _Tp> 290046035553Spatrickinline 290146035553Spatrickvalarray<_Tp>::valarray(valarray&& __v) _NOEXCEPT 290246035553Spatrick : __begin_(__v.__begin_), 290346035553Spatrick __end_(__v.__end_) 290446035553Spatrick{ 290546035553Spatrick __v.__begin_ = __v.__end_ = nullptr; 290646035553Spatrick} 290746035553Spatrick 290846035553Spatricktemplate <class _Tp> 290946035553Spatrickvalarray<_Tp>::valarray(initializer_list<value_type> __il) 291076d0caaeSpatrick : __begin_(nullptr), 291176d0caaeSpatrick __end_(nullptr) 291246035553Spatrick{ 291346035553Spatrick const size_t __n = __il.size(); 291446035553Spatrick if (__n) 291546035553Spatrick { 291676d0caaeSpatrick __begin_ = __end_ = allocator<value_type>().allocate(__n); 291746035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 291846035553Spatrick try 291946035553Spatrick { 292046035553Spatrick#endif // _LIBCPP_NO_EXCEPTIONS 292146035553Spatrick size_t __n_left = __n; 292246035553Spatrick for (const value_type* __p = __il.begin(); __n_left; ++__end_, ++__p, --__n_left) 292376d0caaeSpatrick ::new ((void*)__end_) value_type(*__p); 292446035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 292546035553Spatrick } 292646035553Spatrick catch (...) 292746035553Spatrick { 292846035553Spatrick __clear(__n); 292946035553Spatrick throw; 293046035553Spatrick } 293146035553Spatrick#endif // _LIBCPP_NO_EXCEPTIONS 293246035553Spatrick } 293346035553Spatrick} 293446035553Spatrick 293546035553Spatrick#endif // _LIBCPP_CXX03_LANG 293646035553Spatrick 293746035553Spatricktemplate <class _Tp> 293846035553Spatrickvalarray<_Tp>::valarray(const slice_array<value_type>& __sa) 293976d0caaeSpatrick : __begin_(nullptr), 294076d0caaeSpatrick __end_(nullptr) 294146035553Spatrick{ 294246035553Spatrick const size_t __n = __sa.__size_; 294346035553Spatrick if (__n) 294446035553Spatrick { 294576d0caaeSpatrick __begin_ = __end_ = allocator<value_type>().allocate(__n); 294646035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 294746035553Spatrick try 294846035553Spatrick { 294946035553Spatrick#endif // _LIBCPP_NO_EXCEPTIONS 295046035553Spatrick size_t __n_left = __n; 295146035553Spatrick for (const value_type* __p = __sa.__vp_; __n_left; ++__end_, __p += __sa.__stride_, --__n_left) 295276d0caaeSpatrick ::new ((void*)__end_) value_type(*__p); 295346035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 295446035553Spatrick } 295546035553Spatrick catch (...) 295646035553Spatrick { 295746035553Spatrick __clear(__n); 295846035553Spatrick throw; 295946035553Spatrick } 296046035553Spatrick#endif // _LIBCPP_NO_EXCEPTIONS 296146035553Spatrick } 296246035553Spatrick} 296346035553Spatrick 296446035553Spatricktemplate <class _Tp> 296546035553Spatrickvalarray<_Tp>::valarray(const gslice_array<value_type>& __ga) 296676d0caaeSpatrick : __begin_(nullptr), 296776d0caaeSpatrick __end_(nullptr) 296846035553Spatrick{ 296946035553Spatrick const size_t __n = __ga.__1d_.size(); 297046035553Spatrick if (__n) 297146035553Spatrick { 297276d0caaeSpatrick __begin_ = __end_ = allocator<value_type>().allocate(__n); 297346035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 297446035553Spatrick try 297546035553Spatrick { 297646035553Spatrick#endif // _LIBCPP_NO_EXCEPTIONS 297746035553Spatrick typedef const size_t* _Ip; 297846035553Spatrick const value_type* __s = __ga.__vp_; 297946035553Spatrick for (_Ip __i = __ga.__1d_.__begin_, __e = __ga.__1d_.__end_; 298046035553Spatrick __i != __e; ++__i, ++__end_) 298176d0caaeSpatrick ::new ((void*)__end_) value_type(__s[*__i]); 298246035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 298346035553Spatrick } 298446035553Spatrick catch (...) 298546035553Spatrick { 298646035553Spatrick __clear(__n); 298746035553Spatrick throw; 298846035553Spatrick } 298946035553Spatrick#endif // _LIBCPP_NO_EXCEPTIONS 299046035553Spatrick } 299146035553Spatrick} 299246035553Spatrick 299346035553Spatricktemplate <class _Tp> 299446035553Spatrickvalarray<_Tp>::valarray(const mask_array<value_type>& __ma) 299576d0caaeSpatrick : __begin_(nullptr), 299676d0caaeSpatrick __end_(nullptr) 299746035553Spatrick{ 299846035553Spatrick const size_t __n = __ma.__1d_.size(); 299946035553Spatrick if (__n) 300046035553Spatrick { 300176d0caaeSpatrick __begin_ = __end_ = allocator<value_type>().allocate(__n); 300246035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 300346035553Spatrick try 300446035553Spatrick { 300546035553Spatrick#endif // _LIBCPP_NO_EXCEPTIONS 300646035553Spatrick typedef const size_t* _Ip; 300746035553Spatrick const value_type* __s = __ma.__vp_; 300846035553Spatrick for (_Ip __i = __ma.__1d_.__begin_, __e = __ma.__1d_.__end_; 300946035553Spatrick __i != __e; ++__i, ++__end_) 301076d0caaeSpatrick ::new ((void*)__end_) value_type(__s[*__i]); 301146035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 301246035553Spatrick } 301346035553Spatrick catch (...) 301446035553Spatrick { 301546035553Spatrick __clear(__n); 301646035553Spatrick throw; 301746035553Spatrick } 301846035553Spatrick#endif // _LIBCPP_NO_EXCEPTIONS 301946035553Spatrick } 302046035553Spatrick} 302146035553Spatrick 302246035553Spatricktemplate <class _Tp> 302346035553Spatrickvalarray<_Tp>::valarray(const indirect_array<value_type>& __ia) 302476d0caaeSpatrick : __begin_(nullptr), 302576d0caaeSpatrick __end_(nullptr) 302646035553Spatrick{ 302746035553Spatrick const size_t __n = __ia.__1d_.size(); 302846035553Spatrick if (__n) 302946035553Spatrick { 303076d0caaeSpatrick __begin_ = __end_ = allocator<value_type>().allocate(__n); 303146035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 303246035553Spatrick try 303346035553Spatrick { 303446035553Spatrick#endif // _LIBCPP_NO_EXCEPTIONS 303546035553Spatrick typedef const size_t* _Ip; 303646035553Spatrick const value_type* __s = __ia.__vp_; 303746035553Spatrick for (_Ip __i = __ia.__1d_.__begin_, __e = __ia.__1d_.__end_; 303846035553Spatrick __i != __e; ++__i, ++__end_) 303976d0caaeSpatrick ::new ((void*)__end_) value_type(__s[*__i]); 304046035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 304146035553Spatrick } 304246035553Spatrick catch (...) 304346035553Spatrick { 304446035553Spatrick __clear(__n); 304546035553Spatrick throw; 304646035553Spatrick } 304746035553Spatrick#endif // _LIBCPP_NO_EXCEPTIONS 304846035553Spatrick } 304946035553Spatrick} 305046035553Spatrick 305146035553Spatricktemplate <class _Tp> 305246035553Spatrickinline 305346035553Spatrickvalarray<_Tp>::~valarray() 305446035553Spatrick{ 305546035553Spatrick __clear(size()); 305646035553Spatrick} 305746035553Spatrick 305846035553Spatricktemplate <class _Tp> 305946035553Spatrickvalarray<_Tp>& 306046035553Spatrickvalarray<_Tp>::__assign_range(const value_type* __f, const value_type* __l) 306146035553Spatrick{ 306246035553Spatrick size_t __n = __l - __f; 306346035553Spatrick if (size() != __n) 306446035553Spatrick { 306546035553Spatrick __clear(size()); 306676d0caaeSpatrick __begin_ = allocator<value_type>().allocate(__n); 306746035553Spatrick __end_ = __begin_ + __n; 306846035553Spatrick _VSTD::uninitialized_copy(__f, __l, __begin_); 306946035553Spatrick } else { 307046035553Spatrick _VSTD::copy(__f, __l, __begin_); 307146035553Spatrick } 307246035553Spatrick return *this; 307346035553Spatrick} 307446035553Spatrick 307546035553Spatricktemplate <class _Tp> 307646035553Spatrickvalarray<_Tp>& 307746035553Spatrickvalarray<_Tp>::operator=(const valarray& __v) 307846035553Spatrick{ 3079*4bdff4beSrobert if (this != _VSTD::addressof(__v)) 308046035553Spatrick return __assign_range(__v.__begin_, __v.__end_); 308146035553Spatrick return *this; 308246035553Spatrick} 308346035553Spatrick 308446035553Spatrick#ifndef _LIBCPP_CXX03_LANG 308546035553Spatrick 308646035553Spatricktemplate <class _Tp> 308746035553Spatrickinline 308846035553Spatrickvalarray<_Tp>& 308946035553Spatrickvalarray<_Tp>::operator=(valarray&& __v) _NOEXCEPT 309046035553Spatrick{ 309146035553Spatrick __clear(size()); 309246035553Spatrick __begin_ = __v.__begin_; 309346035553Spatrick __end_ = __v.__end_; 309446035553Spatrick __v.__begin_ = nullptr; 309546035553Spatrick __v.__end_ = nullptr; 309646035553Spatrick return *this; 309746035553Spatrick} 309846035553Spatrick 309946035553Spatricktemplate <class _Tp> 310046035553Spatrickinline 310146035553Spatrickvalarray<_Tp>& 310246035553Spatrickvalarray<_Tp>::operator=(initializer_list<value_type> __il) 310346035553Spatrick{ 310446035553Spatrick return __assign_range(__il.begin(), __il.end()); 310546035553Spatrick} 310646035553Spatrick 310746035553Spatrick#endif // _LIBCPP_CXX03_LANG 310846035553Spatrick 310946035553Spatricktemplate <class _Tp> 311046035553Spatrickinline 311146035553Spatrickvalarray<_Tp>& 311246035553Spatrickvalarray<_Tp>::operator=(const value_type& __x) 311346035553Spatrick{ 311446035553Spatrick _VSTD::fill(__begin_, __end_, __x); 311546035553Spatrick return *this; 311646035553Spatrick} 311746035553Spatrick 311846035553Spatricktemplate <class _Tp> 311946035553Spatrickinline 312046035553Spatrickvalarray<_Tp>& 312146035553Spatrickvalarray<_Tp>::operator=(const slice_array<value_type>& __sa) 312246035553Spatrick{ 312346035553Spatrick value_type* __t = __begin_; 312446035553Spatrick const value_type* __s = __sa.__vp_; 312546035553Spatrick for (size_t __n = __sa.__size_; __n; --__n, __s += __sa.__stride_, ++__t) 312646035553Spatrick *__t = *__s; 312746035553Spatrick return *this; 312846035553Spatrick} 312946035553Spatrick 313046035553Spatricktemplate <class _Tp> 313146035553Spatrickinline 313246035553Spatrickvalarray<_Tp>& 313346035553Spatrickvalarray<_Tp>::operator=(const gslice_array<value_type>& __ga) 313446035553Spatrick{ 313546035553Spatrick typedef const size_t* _Ip; 313646035553Spatrick value_type* __t = __begin_; 313746035553Spatrick const value_type* __s = __ga.__vp_; 313846035553Spatrick for (_Ip __i = __ga.__1d_.__begin_, __e = __ga.__1d_.__end_; 313946035553Spatrick __i != __e; ++__i, ++__t) 314046035553Spatrick *__t = __s[*__i]; 314146035553Spatrick return *this; 314246035553Spatrick} 314346035553Spatrick 314446035553Spatricktemplate <class _Tp> 314546035553Spatrickinline 314646035553Spatrickvalarray<_Tp>& 314746035553Spatrickvalarray<_Tp>::operator=(const mask_array<value_type>& __ma) 314846035553Spatrick{ 314946035553Spatrick typedef const size_t* _Ip; 315046035553Spatrick value_type* __t = __begin_; 315146035553Spatrick const value_type* __s = __ma.__vp_; 315246035553Spatrick for (_Ip __i = __ma.__1d_.__begin_, __e = __ma.__1d_.__end_; 315346035553Spatrick __i != __e; ++__i, ++__t) 315446035553Spatrick *__t = __s[*__i]; 315546035553Spatrick return *this; 315646035553Spatrick} 315746035553Spatrick 315846035553Spatricktemplate <class _Tp> 315946035553Spatrickinline 316046035553Spatrickvalarray<_Tp>& 316146035553Spatrickvalarray<_Tp>::operator=(const indirect_array<value_type>& __ia) 316246035553Spatrick{ 316346035553Spatrick typedef const size_t* _Ip; 316446035553Spatrick value_type* __t = __begin_; 316546035553Spatrick const value_type* __s = __ia.__vp_; 316646035553Spatrick for (_Ip __i = __ia.__1d_.__begin_, __e = __ia.__1d_.__end_; 316746035553Spatrick __i != __e; ++__i, ++__t) 316846035553Spatrick *__t = __s[*__i]; 316946035553Spatrick return *this; 317046035553Spatrick} 317146035553Spatrick 317246035553Spatricktemplate <class _Tp> 317346035553Spatricktemplate <class _ValExpr> 317446035553Spatrickinline 317546035553Spatrickvalarray<_Tp>& 317646035553Spatrickvalarray<_Tp>::operator=(const __val_expr<_ValExpr>& __v) 317746035553Spatrick{ 317846035553Spatrick size_t __n = __v.size(); 317946035553Spatrick if (size() != __n) 318046035553Spatrick resize(__n); 318146035553Spatrick value_type* __t = __begin_; 318246035553Spatrick for (size_t __i = 0; __i != __n; ++__t, ++__i) 318376d0caaeSpatrick *__t = __result_type(__v[__i]); 318446035553Spatrick return *this; 318546035553Spatrick} 318646035553Spatrick 318746035553Spatricktemplate <class _Tp> 318846035553Spatrickinline 318946035553Spatrick__val_expr<__slice_expr<const valarray<_Tp>&> > 319046035553Spatrickvalarray<_Tp>::operator[](slice __s) const 319146035553Spatrick{ 319246035553Spatrick return __val_expr<__slice_expr<const valarray&> >(__slice_expr<const valarray&>(__s, *this)); 319346035553Spatrick} 319446035553Spatrick 319546035553Spatricktemplate <class _Tp> 319646035553Spatrickinline 319746035553Spatrickslice_array<_Tp> 319846035553Spatrickvalarray<_Tp>::operator[](slice __s) 319946035553Spatrick{ 320046035553Spatrick return slice_array<value_type>(__s, *this); 320146035553Spatrick} 320246035553Spatrick 320346035553Spatricktemplate <class _Tp> 320446035553Spatrickinline 320546035553Spatrick__val_expr<__indirect_expr<const valarray<_Tp>&> > 320646035553Spatrickvalarray<_Tp>::operator[](const gslice& __gs) const 320746035553Spatrick{ 320846035553Spatrick return __val_expr<__indirect_expr<const valarray&> >(__indirect_expr<const valarray&>(__gs.__1d_, *this)); 320946035553Spatrick} 321046035553Spatrick 321146035553Spatricktemplate <class _Tp> 321246035553Spatrickinline 321346035553Spatrickgslice_array<_Tp> 321446035553Spatrickvalarray<_Tp>::operator[](const gslice& __gs) 321546035553Spatrick{ 321646035553Spatrick return gslice_array<value_type>(__gs, *this); 321746035553Spatrick} 321846035553Spatrick 321946035553Spatrick#ifndef _LIBCPP_CXX03_LANG 322046035553Spatrick 322146035553Spatricktemplate <class _Tp> 322246035553Spatrickinline 322346035553Spatrick__val_expr<__indirect_expr<const valarray<_Tp>&> > 322446035553Spatrickvalarray<_Tp>::operator[](gslice&& __gs) const 322546035553Spatrick{ 3226*4bdff4beSrobert return __val_expr<__indirect_expr<const valarray&> >(__indirect_expr<const valarray&>(std::move(__gs.__1d_), *this)); 322746035553Spatrick} 322846035553Spatrick 322946035553Spatricktemplate <class _Tp> 323046035553Spatrickinline 323146035553Spatrickgslice_array<_Tp> 323246035553Spatrickvalarray<_Tp>::operator[](gslice&& __gs) 323346035553Spatrick{ 3234*4bdff4beSrobert return gslice_array<value_type>(std::move(__gs), *this); 323546035553Spatrick} 323646035553Spatrick 323746035553Spatrick#endif // _LIBCPP_CXX03_LANG 323846035553Spatrick 323946035553Spatricktemplate <class _Tp> 324046035553Spatrickinline 324146035553Spatrick__val_expr<__mask_expr<const valarray<_Tp>&> > 324246035553Spatrickvalarray<_Tp>::operator[](const valarray<bool>& __vb) const 324346035553Spatrick{ 324446035553Spatrick return __val_expr<__mask_expr<const valarray&> >(__mask_expr<const valarray&>(__vb, *this)); 324546035553Spatrick} 324646035553Spatrick 324746035553Spatricktemplate <class _Tp> 324846035553Spatrickinline 324946035553Spatrickmask_array<_Tp> 325046035553Spatrickvalarray<_Tp>::operator[](const valarray<bool>& __vb) 325146035553Spatrick{ 325246035553Spatrick return mask_array<value_type>(__vb, *this); 325346035553Spatrick} 325446035553Spatrick 325546035553Spatrick#ifndef _LIBCPP_CXX03_LANG 325646035553Spatrick 325746035553Spatricktemplate <class _Tp> 325846035553Spatrickinline 325946035553Spatrick__val_expr<__mask_expr<const valarray<_Tp>&> > 326046035553Spatrickvalarray<_Tp>::operator[](valarray<bool>&& __vb) const 326146035553Spatrick{ 3262*4bdff4beSrobert return __val_expr<__mask_expr<const valarray&> >(__mask_expr<const valarray&>(std::move(__vb), *this)); 326346035553Spatrick} 326446035553Spatrick 326546035553Spatricktemplate <class _Tp> 326646035553Spatrickinline 326746035553Spatrickmask_array<_Tp> 326846035553Spatrickvalarray<_Tp>::operator[](valarray<bool>&& __vb) 326946035553Spatrick{ 3270*4bdff4beSrobert return mask_array<value_type>(std::move(__vb), *this); 327146035553Spatrick} 327246035553Spatrick 327346035553Spatrick#endif // _LIBCPP_CXX03_LANG 327446035553Spatrick 327546035553Spatricktemplate <class _Tp> 327646035553Spatrickinline 327746035553Spatrick__val_expr<__indirect_expr<const valarray<_Tp>&> > 327846035553Spatrickvalarray<_Tp>::operator[](const valarray<size_t>& __vs) const 327946035553Spatrick{ 328046035553Spatrick return __val_expr<__indirect_expr<const valarray&> >(__indirect_expr<const valarray&>(__vs, *this)); 328146035553Spatrick} 328246035553Spatrick 328346035553Spatricktemplate <class _Tp> 328446035553Spatrickinline 328546035553Spatrickindirect_array<_Tp> 328646035553Spatrickvalarray<_Tp>::operator[](const valarray<size_t>& __vs) 328746035553Spatrick{ 328846035553Spatrick return indirect_array<value_type>(__vs, *this); 328946035553Spatrick} 329046035553Spatrick 329146035553Spatrick#ifndef _LIBCPP_CXX03_LANG 329246035553Spatrick 329346035553Spatricktemplate <class _Tp> 329446035553Spatrickinline 329546035553Spatrick__val_expr<__indirect_expr<const valarray<_Tp>&> > 329646035553Spatrickvalarray<_Tp>::operator[](valarray<size_t>&& __vs) const 329746035553Spatrick{ 3298*4bdff4beSrobert return __val_expr<__indirect_expr<const valarray&> >(__indirect_expr<const valarray&>(std::move(__vs), *this)); 329946035553Spatrick} 330046035553Spatrick 330146035553Spatricktemplate <class _Tp> 330246035553Spatrickinline 330346035553Spatrickindirect_array<_Tp> 330446035553Spatrickvalarray<_Tp>::operator[](valarray<size_t>&& __vs) 330546035553Spatrick{ 3306*4bdff4beSrobert return indirect_array<value_type>(std::move(__vs), *this); 330746035553Spatrick} 330846035553Spatrick 330946035553Spatrick#endif // _LIBCPP_CXX03_LANG 331046035553Spatrick 331146035553Spatricktemplate <class _Tp> 3312*4bdff4beSrobertinline 3313*4bdff4beSrobert__val_expr<_UnaryOp<__unary_plus<_Tp>, const valarray<_Tp>&> > 331446035553Spatrickvalarray<_Tp>::operator+() const 331546035553Spatrick{ 3316*4bdff4beSrobert using _Op = _UnaryOp<__unary_plus<_Tp>, const valarray<_Tp>&>; 3317*4bdff4beSrobert return __val_expr<_Op>(_Op(__unary_plus<_Tp>(), *this)); 331846035553Spatrick} 331946035553Spatrick 332046035553Spatricktemplate <class _Tp> 3321*4bdff4beSrobertinline 3322*4bdff4beSrobert__val_expr<_UnaryOp<negate<_Tp>, const valarray<_Tp>&> > 332346035553Spatrickvalarray<_Tp>::operator-() const 332446035553Spatrick{ 3325*4bdff4beSrobert using _Op = _UnaryOp<negate<_Tp>, const valarray<_Tp>&>; 3326*4bdff4beSrobert return __val_expr<_Op>(_Op(negate<_Tp>(), *this)); 332746035553Spatrick} 332846035553Spatrick 332946035553Spatricktemplate <class _Tp> 3330*4bdff4beSrobertinline 3331*4bdff4beSrobert__val_expr<_UnaryOp<__bit_not<_Tp>, const valarray<_Tp>&> > 333246035553Spatrickvalarray<_Tp>::operator~() const 333346035553Spatrick{ 3334*4bdff4beSrobert using _Op = _UnaryOp<__bit_not<_Tp>, const valarray<_Tp>&>; 3335*4bdff4beSrobert return __val_expr<_Op>(_Op(__bit_not<_Tp>(), *this)); 333646035553Spatrick} 333746035553Spatrick 333846035553Spatricktemplate <class _Tp> 3339*4bdff4beSrobertinline 3340*4bdff4beSrobert__val_expr<_UnaryOp<logical_not<_Tp>, const valarray<_Tp>&> > 334146035553Spatrickvalarray<_Tp>::operator!() const 334246035553Spatrick{ 3343*4bdff4beSrobert using _Op = _UnaryOp<logical_not<_Tp>, const valarray<_Tp>&>; 3344*4bdff4beSrobert return __val_expr<_Op>(_Op(logical_not<_Tp>(), *this)); 334546035553Spatrick} 334646035553Spatrick 334746035553Spatricktemplate <class _Tp> 334846035553Spatrickinline 334946035553Spatrickvalarray<_Tp>& 335046035553Spatrickvalarray<_Tp>::operator*=(const value_type& __x) 335146035553Spatrick{ 335246035553Spatrick for (value_type* __p = __begin_; __p != __end_; ++__p) 335346035553Spatrick *__p *= __x; 335446035553Spatrick return *this; 335546035553Spatrick} 335646035553Spatrick 335746035553Spatricktemplate <class _Tp> 335846035553Spatrickinline 335946035553Spatrickvalarray<_Tp>& 336046035553Spatrickvalarray<_Tp>::operator/=(const value_type& __x) 336146035553Spatrick{ 336246035553Spatrick for (value_type* __p = __begin_; __p != __end_; ++__p) 336346035553Spatrick *__p /= __x; 336446035553Spatrick return *this; 336546035553Spatrick} 336646035553Spatrick 336746035553Spatricktemplate <class _Tp> 336846035553Spatrickinline 336946035553Spatrickvalarray<_Tp>& 337046035553Spatrickvalarray<_Tp>::operator%=(const value_type& __x) 337146035553Spatrick{ 337246035553Spatrick for (value_type* __p = __begin_; __p != __end_; ++__p) 337346035553Spatrick *__p %= __x; 337446035553Spatrick return *this; 337546035553Spatrick} 337646035553Spatrick 337746035553Spatricktemplate <class _Tp> 337846035553Spatrickinline 337946035553Spatrickvalarray<_Tp>& 338046035553Spatrickvalarray<_Tp>::operator+=(const value_type& __x) 338146035553Spatrick{ 338246035553Spatrick for (value_type* __p = __begin_; __p != __end_; ++__p) 338346035553Spatrick *__p += __x; 338446035553Spatrick return *this; 338546035553Spatrick} 338646035553Spatrick 338746035553Spatricktemplate <class _Tp> 338846035553Spatrickinline 338946035553Spatrickvalarray<_Tp>& 339046035553Spatrickvalarray<_Tp>::operator-=(const value_type& __x) 339146035553Spatrick{ 339246035553Spatrick for (value_type* __p = __begin_; __p != __end_; ++__p) 339346035553Spatrick *__p -= __x; 339446035553Spatrick return *this; 339546035553Spatrick} 339646035553Spatrick 339746035553Spatricktemplate <class _Tp> 339846035553Spatrickinline 339946035553Spatrickvalarray<_Tp>& 340046035553Spatrickvalarray<_Tp>::operator^=(const value_type& __x) 340146035553Spatrick{ 340246035553Spatrick for (value_type* __p = __begin_; __p != __end_; ++__p) 340346035553Spatrick *__p ^= __x; 340446035553Spatrick return *this; 340546035553Spatrick} 340646035553Spatrick 340746035553Spatricktemplate <class _Tp> 340846035553Spatrickinline 340946035553Spatrickvalarray<_Tp>& 341046035553Spatrickvalarray<_Tp>::operator&=(const value_type& __x) 341146035553Spatrick{ 341246035553Spatrick for (value_type* __p = __begin_; __p != __end_; ++__p) 341346035553Spatrick *__p &= __x; 341446035553Spatrick return *this; 341546035553Spatrick} 341646035553Spatrick 341746035553Spatricktemplate <class _Tp> 341846035553Spatrickinline 341946035553Spatrickvalarray<_Tp>& 342046035553Spatrickvalarray<_Tp>::operator|=(const value_type& __x) 342146035553Spatrick{ 342246035553Spatrick for (value_type* __p = __begin_; __p != __end_; ++__p) 342346035553Spatrick *__p |= __x; 342446035553Spatrick return *this; 342546035553Spatrick} 342646035553Spatrick 342746035553Spatricktemplate <class _Tp> 342846035553Spatrickinline 342946035553Spatrickvalarray<_Tp>& 343046035553Spatrickvalarray<_Tp>::operator<<=(const value_type& __x) 343146035553Spatrick{ 343246035553Spatrick for (value_type* __p = __begin_; __p != __end_; ++__p) 343346035553Spatrick *__p <<= __x; 343446035553Spatrick return *this; 343546035553Spatrick} 343646035553Spatrick 343746035553Spatricktemplate <class _Tp> 343846035553Spatrickinline 343946035553Spatrickvalarray<_Tp>& 344046035553Spatrickvalarray<_Tp>::operator>>=(const value_type& __x) 344146035553Spatrick{ 344246035553Spatrick for (value_type* __p = __begin_; __p != __end_; ++__p) 344346035553Spatrick *__p >>= __x; 344446035553Spatrick return *this; 344546035553Spatrick} 344646035553Spatrick 344746035553Spatricktemplate <class _Tp> 344846035553Spatricktemplate <class _Expr> 344946035553Spatrickinline 345046035553Spatricktypename enable_if 345146035553Spatrick< 345246035553Spatrick __is_val_expr<_Expr>::value, 345346035553Spatrick valarray<_Tp>& 345446035553Spatrick>::type 345546035553Spatrickvalarray<_Tp>::operator*=(const _Expr& __v) 345646035553Spatrick{ 345746035553Spatrick size_t __i = 0; 345846035553Spatrick for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 345946035553Spatrick *__t *= __v[__i]; 346046035553Spatrick return *this; 346146035553Spatrick} 346246035553Spatrick 346346035553Spatricktemplate <class _Tp> 346446035553Spatricktemplate <class _Expr> 346546035553Spatrickinline 346646035553Spatricktypename enable_if 346746035553Spatrick< 346846035553Spatrick __is_val_expr<_Expr>::value, 346946035553Spatrick valarray<_Tp>& 347046035553Spatrick>::type 347146035553Spatrickvalarray<_Tp>::operator/=(const _Expr& __v) 347246035553Spatrick{ 347346035553Spatrick size_t __i = 0; 347446035553Spatrick for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 347546035553Spatrick *__t /= __v[__i]; 347646035553Spatrick return *this; 347746035553Spatrick} 347846035553Spatrick 347946035553Spatricktemplate <class _Tp> 348046035553Spatricktemplate <class _Expr> 348146035553Spatrickinline 348246035553Spatricktypename enable_if 348346035553Spatrick< 348446035553Spatrick __is_val_expr<_Expr>::value, 348546035553Spatrick valarray<_Tp>& 348646035553Spatrick>::type 348746035553Spatrickvalarray<_Tp>::operator%=(const _Expr& __v) 348846035553Spatrick{ 348946035553Spatrick size_t __i = 0; 349046035553Spatrick for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 349146035553Spatrick *__t %= __v[__i]; 349246035553Spatrick return *this; 349346035553Spatrick} 349446035553Spatrick 349546035553Spatricktemplate <class _Tp> 349646035553Spatricktemplate <class _Expr> 349746035553Spatrickinline 349846035553Spatricktypename enable_if 349946035553Spatrick< 350046035553Spatrick __is_val_expr<_Expr>::value, 350146035553Spatrick valarray<_Tp>& 350246035553Spatrick>::type 350346035553Spatrickvalarray<_Tp>::operator+=(const _Expr& __v) 350446035553Spatrick{ 350546035553Spatrick size_t __i = 0; 350646035553Spatrick for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 350746035553Spatrick *__t += __v[__i]; 350846035553Spatrick return *this; 350946035553Spatrick} 351046035553Spatrick 351146035553Spatricktemplate <class _Tp> 351246035553Spatricktemplate <class _Expr> 351346035553Spatrickinline 351446035553Spatricktypename enable_if 351546035553Spatrick< 351646035553Spatrick __is_val_expr<_Expr>::value, 351746035553Spatrick valarray<_Tp>& 351846035553Spatrick>::type 351946035553Spatrickvalarray<_Tp>::operator-=(const _Expr& __v) 352046035553Spatrick{ 352146035553Spatrick size_t __i = 0; 352246035553Spatrick for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 352346035553Spatrick *__t -= __v[__i]; 352446035553Spatrick return *this; 352546035553Spatrick} 352646035553Spatrick 352746035553Spatricktemplate <class _Tp> 352846035553Spatricktemplate <class _Expr> 352946035553Spatrickinline 353046035553Spatricktypename enable_if 353146035553Spatrick< 353246035553Spatrick __is_val_expr<_Expr>::value, 353346035553Spatrick valarray<_Tp>& 353446035553Spatrick>::type 353546035553Spatrickvalarray<_Tp>::operator^=(const _Expr& __v) 353646035553Spatrick{ 353746035553Spatrick size_t __i = 0; 353846035553Spatrick for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 353946035553Spatrick *__t ^= __v[__i]; 354046035553Spatrick return *this; 354146035553Spatrick} 354246035553Spatrick 354346035553Spatricktemplate <class _Tp> 354446035553Spatricktemplate <class _Expr> 354546035553Spatrickinline 354646035553Spatricktypename enable_if 354746035553Spatrick< 354846035553Spatrick __is_val_expr<_Expr>::value, 354946035553Spatrick valarray<_Tp>& 355046035553Spatrick>::type 355146035553Spatrickvalarray<_Tp>::operator|=(const _Expr& __v) 355246035553Spatrick{ 355346035553Spatrick size_t __i = 0; 355446035553Spatrick for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 355546035553Spatrick *__t |= __v[__i]; 355646035553Spatrick return *this; 355746035553Spatrick} 355846035553Spatrick 355946035553Spatricktemplate <class _Tp> 356046035553Spatricktemplate <class _Expr> 356146035553Spatrickinline 356246035553Spatricktypename enable_if 356346035553Spatrick< 356446035553Spatrick __is_val_expr<_Expr>::value, 356546035553Spatrick valarray<_Tp>& 356646035553Spatrick>::type 356746035553Spatrickvalarray<_Tp>::operator&=(const _Expr& __v) 356846035553Spatrick{ 356946035553Spatrick size_t __i = 0; 357046035553Spatrick for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 357146035553Spatrick *__t &= __v[__i]; 357246035553Spatrick return *this; 357346035553Spatrick} 357446035553Spatrick 357546035553Spatricktemplate <class _Tp> 357646035553Spatricktemplate <class _Expr> 357746035553Spatrickinline 357846035553Spatricktypename enable_if 357946035553Spatrick< 358046035553Spatrick __is_val_expr<_Expr>::value, 358146035553Spatrick valarray<_Tp>& 358246035553Spatrick>::type 358346035553Spatrickvalarray<_Tp>::operator<<=(const _Expr& __v) 358446035553Spatrick{ 358546035553Spatrick size_t __i = 0; 358646035553Spatrick for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 358746035553Spatrick *__t <<= __v[__i]; 358846035553Spatrick return *this; 358946035553Spatrick} 359046035553Spatrick 359146035553Spatricktemplate <class _Tp> 359246035553Spatricktemplate <class _Expr> 359346035553Spatrickinline 359446035553Spatricktypename enable_if 359546035553Spatrick< 359646035553Spatrick __is_val_expr<_Expr>::value, 359746035553Spatrick valarray<_Tp>& 359846035553Spatrick>::type 359946035553Spatrickvalarray<_Tp>::operator>>=(const _Expr& __v) 360046035553Spatrick{ 360146035553Spatrick size_t __i = 0; 360246035553Spatrick for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 360346035553Spatrick *__t >>= __v[__i]; 360446035553Spatrick return *this; 360546035553Spatrick} 360646035553Spatrick 360746035553Spatricktemplate <class _Tp> 360846035553Spatrickinline 360946035553Spatrickvoid 361046035553Spatrickvalarray<_Tp>::swap(valarray& __v) _NOEXCEPT 361146035553Spatrick{ 361246035553Spatrick _VSTD::swap(__begin_, __v.__begin_); 361346035553Spatrick _VSTD::swap(__end_, __v.__end_); 361446035553Spatrick} 361546035553Spatrick 361646035553Spatricktemplate <class _Tp> 361746035553Spatrickinline 361846035553Spatrick_Tp 361946035553Spatrickvalarray<_Tp>::sum() const 362046035553Spatrick{ 362146035553Spatrick if (__begin_ == __end_) 362246035553Spatrick return value_type(); 362346035553Spatrick const value_type* __p = __begin_; 362446035553Spatrick _Tp __r = *__p; 362546035553Spatrick for (++__p; __p != __end_; ++__p) 362646035553Spatrick __r += *__p; 362746035553Spatrick return __r; 362846035553Spatrick} 362946035553Spatrick 363046035553Spatricktemplate <class _Tp> 363146035553Spatrickinline 363246035553Spatrick_Tp 363346035553Spatrickvalarray<_Tp>::min() const 363446035553Spatrick{ 363546035553Spatrick if (__begin_ == __end_) 363646035553Spatrick return value_type(); 363746035553Spatrick return *_VSTD::min_element(__begin_, __end_); 363846035553Spatrick} 363946035553Spatrick 364046035553Spatricktemplate <class _Tp> 364146035553Spatrickinline 364246035553Spatrick_Tp 364346035553Spatrickvalarray<_Tp>::max() const 364446035553Spatrick{ 364546035553Spatrick if (__begin_ == __end_) 364646035553Spatrick return value_type(); 364746035553Spatrick return *_VSTD::max_element(__begin_, __end_); 364846035553Spatrick} 364946035553Spatrick 365046035553Spatricktemplate <class _Tp> 365146035553Spatrickvalarray<_Tp> 365246035553Spatrickvalarray<_Tp>::shift(int __i) const 365346035553Spatrick{ 365446035553Spatrick valarray<value_type> __r; 365546035553Spatrick size_t __n = size(); 365646035553Spatrick if (__n) 365746035553Spatrick { 365876d0caaeSpatrick __r.__begin_ = __r.__end_ = allocator<value_type>().allocate(__n); 365946035553Spatrick const value_type* __sb; 366046035553Spatrick value_type* __tb; 366146035553Spatrick value_type* __te; 366246035553Spatrick if (__i >= 0) 366346035553Spatrick { 366446035553Spatrick __i = _VSTD::min(__i, static_cast<int>(__n)); 366546035553Spatrick __sb = __begin_ + __i; 366646035553Spatrick __tb = __r.__begin_; 366746035553Spatrick __te = __r.__begin_ + (__n - __i); 366846035553Spatrick } 366946035553Spatrick else 367046035553Spatrick { 367146035553Spatrick __i = _VSTD::min(-__i, static_cast<int>(__n)); 367246035553Spatrick __sb = __begin_; 367346035553Spatrick __tb = __r.__begin_ + __i; 367446035553Spatrick __te = __r.__begin_ + __n; 367546035553Spatrick } 367646035553Spatrick for (; __r.__end_ != __tb; ++__r.__end_) 367776d0caaeSpatrick ::new ((void*)__r.__end_) value_type(); 367846035553Spatrick for (; __r.__end_ != __te; ++__r.__end_, ++__sb) 367976d0caaeSpatrick ::new ((void*)__r.__end_) value_type(*__sb); 368046035553Spatrick for (__te = __r.__begin_ + __n; __r.__end_ != __te; ++__r.__end_) 368176d0caaeSpatrick ::new ((void*)__r.__end_) value_type(); 368246035553Spatrick } 368346035553Spatrick return __r; 368446035553Spatrick} 368546035553Spatrick 368646035553Spatricktemplate <class _Tp> 368746035553Spatrickvalarray<_Tp> 368846035553Spatrickvalarray<_Tp>::cshift(int __i) const 368946035553Spatrick{ 369046035553Spatrick valarray<value_type> __r; 369146035553Spatrick size_t __n = size(); 369246035553Spatrick if (__n) 369346035553Spatrick { 369476d0caaeSpatrick __r.__begin_ = __r.__end_ = allocator<value_type>().allocate(__n); 369546035553Spatrick __i %= static_cast<int>(__n); 369646035553Spatrick const value_type* __m = __i >= 0 ? __begin_ + __i : __end_ + __i; 369746035553Spatrick for (const value_type* __s = __m; __s != __end_; ++__r.__end_, ++__s) 369876d0caaeSpatrick ::new ((void*)__r.__end_) value_type(*__s); 369946035553Spatrick for (const value_type* __s = __begin_; __s != __m; ++__r.__end_, ++__s) 370076d0caaeSpatrick ::new ((void*)__r.__end_) value_type(*__s); 370146035553Spatrick } 370246035553Spatrick return __r; 370346035553Spatrick} 370446035553Spatrick 370546035553Spatricktemplate <class _Tp> 370646035553Spatrickvalarray<_Tp> 370746035553Spatrickvalarray<_Tp>::apply(value_type __f(value_type)) const 370846035553Spatrick{ 370946035553Spatrick valarray<value_type> __r; 371046035553Spatrick size_t __n = size(); 371146035553Spatrick if (__n) 371246035553Spatrick { 371376d0caaeSpatrick __r.__begin_ = __r.__end_ = allocator<value_type>().allocate(__n); 371446035553Spatrick for (const value_type* __p = __begin_; __n; ++__r.__end_, ++__p, --__n) 371576d0caaeSpatrick ::new ((void*)__r.__end_) value_type(__f(*__p)); 371646035553Spatrick } 371746035553Spatrick return __r; 371846035553Spatrick} 371946035553Spatrick 372046035553Spatricktemplate <class _Tp> 372146035553Spatrickvalarray<_Tp> 372246035553Spatrickvalarray<_Tp>::apply(value_type __f(const value_type&)) const 372346035553Spatrick{ 372446035553Spatrick valarray<value_type> __r; 372546035553Spatrick size_t __n = size(); 372646035553Spatrick if (__n) 372746035553Spatrick { 372876d0caaeSpatrick __r.__begin_ = __r.__end_ = allocator<value_type>().allocate(__n); 372946035553Spatrick for (const value_type* __p = __begin_; __n; ++__r.__end_, ++__p, --__n) 373076d0caaeSpatrick ::new ((void*)__r.__end_) value_type(__f(*__p)); 373146035553Spatrick } 373246035553Spatrick return __r; 373346035553Spatrick} 373446035553Spatrick 373546035553Spatricktemplate <class _Tp> 373646035553Spatrickinline 373746035553Spatrickvoid valarray<_Tp>::__clear(size_t __capacity) 373846035553Spatrick{ 373946035553Spatrick if (__begin_ != nullptr) 374046035553Spatrick { 374146035553Spatrick while (__end_ != __begin_) 374246035553Spatrick (--__end_)->~value_type(); 374376d0caaeSpatrick allocator<value_type>().deallocate(__begin_, __capacity); 374446035553Spatrick __begin_ = __end_ = nullptr; 374546035553Spatrick } 374646035553Spatrick} 374746035553Spatrick 374846035553Spatricktemplate <class _Tp> 374946035553Spatrickvoid 375046035553Spatrickvalarray<_Tp>::resize(size_t __n, value_type __x) 375146035553Spatrick{ 375246035553Spatrick __clear(size()); 375346035553Spatrick if (__n) 375446035553Spatrick { 375576d0caaeSpatrick __begin_ = __end_ = allocator<value_type>().allocate(__n); 375646035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 375746035553Spatrick try 375846035553Spatrick { 375946035553Spatrick#endif // _LIBCPP_NO_EXCEPTIONS 376046035553Spatrick for (size_t __n_left = __n; __n_left; --__n_left, ++__end_) 376176d0caaeSpatrick ::new ((void*)__end_) value_type(__x); 376246035553Spatrick#ifndef _LIBCPP_NO_EXCEPTIONS 376346035553Spatrick } 376446035553Spatrick catch (...) 376546035553Spatrick { 376646035553Spatrick __clear(__n); 376746035553Spatrick throw; 376846035553Spatrick } 376946035553Spatrick#endif // _LIBCPP_NO_EXCEPTIONS 377046035553Spatrick } 377146035553Spatrick} 377246035553Spatrick 377346035553Spatricktemplate<class _Tp> 377446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 377546035553Spatrickvoid 377646035553Spatrickswap(valarray<_Tp>& __x, valarray<_Tp>& __y) _NOEXCEPT 377746035553Spatrick{ 377846035553Spatrick __x.swap(__y); 377946035553Spatrick} 378046035553Spatrick 378146035553Spatricktemplate<class _Expr1, class _Expr2> 378246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 378346035553Spatricktypename enable_if 378446035553Spatrick< 378546035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 378646035553Spatrick __val_expr<_BinaryOp<multiplies<typename _Expr1::value_type>, _Expr1, _Expr2> > 378746035553Spatrick>::type 378846035553Spatrickoperator*(const _Expr1& __x, const _Expr2& __y) 378946035553Spatrick{ 379046035553Spatrick typedef typename _Expr1::value_type value_type; 379146035553Spatrick typedef _BinaryOp<multiplies<value_type>, _Expr1, _Expr2> _Op; 379246035553Spatrick return __val_expr<_Op>(_Op(multiplies<value_type>(), __x, __y)); 379346035553Spatrick} 379446035553Spatrick 379546035553Spatricktemplate<class _Expr> 379646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 379746035553Spatricktypename enable_if 379846035553Spatrick< 379946035553Spatrick __is_val_expr<_Expr>::value, 380046035553Spatrick __val_expr<_BinaryOp<multiplies<typename _Expr::value_type>, 380146035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 380246035553Spatrick>::type 380346035553Spatrickoperator*(const _Expr& __x, const typename _Expr::value_type& __y) 380446035553Spatrick{ 380546035553Spatrick typedef typename _Expr::value_type value_type; 380646035553Spatrick typedef _BinaryOp<multiplies<value_type>, _Expr, __scalar_expr<value_type> > _Op; 380746035553Spatrick return __val_expr<_Op>(_Op(multiplies<value_type>(), 380846035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 380946035553Spatrick} 381046035553Spatrick 381146035553Spatricktemplate<class _Expr> 381246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 381346035553Spatricktypename enable_if 381446035553Spatrick< 381546035553Spatrick __is_val_expr<_Expr>::value, 381646035553Spatrick __val_expr<_BinaryOp<multiplies<typename _Expr::value_type>, 381746035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 381846035553Spatrick>::type 381946035553Spatrickoperator*(const typename _Expr::value_type& __x, const _Expr& __y) 382046035553Spatrick{ 382146035553Spatrick typedef typename _Expr::value_type value_type; 382246035553Spatrick typedef _BinaryOp<multiplies<value_type>, __scalar_expr<value_type>, _Expr> _Op; 382346035553Spatrick return __val_expr<_Op>(_Op(multiplies<value_type>(), 382446035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 382546035553Spatrick} 382646035553Spatrick 382746035553Spatricktemplate<class _Expr1, class _Expr2> 382846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 382946035553Spatricktypename enable_if 383046035553Spatrick< 383146035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 383246035553Spatrick __val_expr<_BinaryOp<divides<typename _Expr1::value_type>, _Expr1, _Expr2> > 383346035553Spatrick>::type 383446035553Spatrickoperator/(const _Expr1& __x, const _Expr2& __y) 383546035553Spatrick{ 383646035553Spatrick typedef typename _Expr1::value_type value_type; 383746035553Spatrick typedef _BinaryOp<divides<value_type>, _Expr1, _Expr2> _Op; 383846035553Spatrick return __val_expr<_Op>(_Op(divides<value_type>(), __x, __y)); 383946035553Spatrick} 384046035553Spatrick 384146035553Spatricktemplate<class _Expr> 384246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 384346035553Spatricktypename enable_if 384446035553Spatrick< 384546035553Spatrick __is_val_expr<_Expr>::value, 384646035553Spatrick __val_expr<_BinaryOp<divides<typename _Expr::value_type>, 384746035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 384846035553Spatrick>::type 384946035553Spatrickoperator/(const _Expr& __x, const typename _Expr::value_type& __y) 385046035553Spatrick{ 385146035553Spatrick typedef typename _Expr::value_type value_type; 385246035553Spatrick typedef _BinaryOp<divides<value_type>, _Expr, __scalar_expr<value_type> > _Op; 385346035553Spatrick return __val_expr<_Op>(_Op(divides<value_type>(), 385446035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 385546035553Spatrick} 385646035553Spatrick 385746035553Spatricktemplate<class _Expr> 385846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 385946035553Spatricktypename enable_if 386046035553Spatrick< 386146035553Spatrick __is_val_expr<_Expr>::value, 386246035553Spatrick __val_expr<_BinaryOp<divides<typename _Expr::value_type>, 386346035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 386446035553Spatrick>::type 386546035553Spatrickoperator/(const typename _Expr::value_type& __x, const _Expr& __y) 386646035553Spatrick{ 386746035553Spatrick typedef typename _Expr::value_type value_type; 386846035553Spatrick typedef _BinaryOp<divides<value_type>, __scalar_expr<value_type>, _Expr> _Op; 386946035553Spatrick return __val_expr<_Op>(_Op(divides<value_type>(), 387046035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 387146035553Spatrick} 387246035553Spatrick 387346035553Spatricktemplate<class _Expr1, class _Expr2> 387446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 387546035553Spatricktypename enable_if 387646035553Spatrick< 387746035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 387846035553Spatrick __val_expr<_BinaryOp<modulus<typename _Expr1::value_type>, _Expr1, _Expr2> > 387946035553Spatrick>::type 388046035553Spatrickoperator%(const _Expr1& __x, const _Expr2& __y) 388146035553Spatrick{ 388246035553Spatrick typedef typename _Expr1::value_type value_type; 388346035553Spatrick typedef _BinaryOp<modulus<value_type>, _Expr1, _Expr2> _Op; 388446035553Spatrick return __val_expr<_Op>(_Op(modulus<value_type>(), __x, __y)); 388546035553Spatrick} 388646035553Spatrick 388746035553Spatricktemplate<class _Expr> 388846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 388946035553Spatricktypename enable_if 389046035553Spatrick< 389146035553Spatrick __is_val_expr<_Expr>::value, 389246035553Spatrick __val_expr<_BinaryOp<modulus<typename _Expr::value_type>, 389346035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 389446035553Spatrick>::type 389546035553Spatrickoperator%(const _Expr& __x, const typename _Expr::value_type& __y) 389646035553Spatrick{ 389746035553Spatrick typedef typename _Expr::value_type value_type; 389846035553Spatrick typedef _BinaryOp<modulus<value_type>, _Expr, __scalar_expr<value_type> > _Op; 389946035553Spatrick return __val_expr<_Op>(_Op(modulus<value_type>(), 390046035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 390146035553Spatrick} 390246035553Spatrick 390346035553Spatricktemplate<class _Expr> 390446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 390546035553Spatricktypename enable_if 390646035553Spatrick< 390746035553Spatrick __is_val_expr<_Expr>::value, 390846035553Spatrick __val_expr<_BinaryOp<modulus<typename _Expr::value_type>, 390946035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 391046035553Spatrick>::type 391146035553Spatrickoperator%(const typename _Expr::value_type& __x, const _Expr& __y) 391246035553Spatrick{ 391346035553Spatrick typedef typename _Expr::value_type value_type; 391446035553Spatrick typedef _BinaryOp<modulus<value_type>, __scalar_expr<value_type>, _Expr> _Op; 391546035553Spatrick return __val_expr<_Op>(_Op(modulus<value_type>(), 391646035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 391746035553Spatrick} 391846035553Spatrick 391946035553Spatricktemplate<class _Expr1, class _Expr2> 392046035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 392146035553Spatricktypename enable_if 392246035553Spatrick< 392346035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 392446035553Spatrick __val_expr<_BinaryOp<plus<typename _Expr1::value_type>, _Expr1, _Expr2> > 392546035553Spatrick>::type 392646035553Spatrickoperator+(const _Expr1& __x, const _Expr2& __y) 392746035553Spatrick{ 392846035553Spatrick typedef typename _Expr1::value_type value_type; 392946035553Spatrick typedef _BinaryOp<plus<value_type>, _Expr1, _Expr2> _Op; 393046035553Spatrick return __val_expr<_Op>(_Op(plus<value_type>(), __x, __y)); 393146035553Spatrick} 393246035553Spatrick 393346035553Spatricktemplate<class _Expr> 393446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 393546035553Spatricktypename enable_if 393646035553Spatrick< 393746035553Spatrick __is_val_expr<_Expr>::value, 393846035553Spatrick __val_expr<_BinaryOp<plus<typename _Expr::value_type>, 393946035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 394046035553Spatrick>::type 394146035553Spatrickoperator+(const _Expr& __x, const typename _Expr::value_type& __y) 394246035553Spatrick{ 394346035553Spatrick typedef typename _Expr::value_type value_type; 394446035553Spatrick typedef _BinaryOp<plus<value_type>, _Expr, __scalar_expr<value_type> > _Op; 394546035553Spatrick return __val_expr<_Op>(_Op(plus<value_type>(), 394646035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 394746035553Spatrick} 394846035553Spatrick 394946035553Spatricktemplate<class _Expr> 395046035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 395146035553Spatricktypename enable_if 395246035553Spatrick< 395346035553Spatrick __is_val_expr<_Expr>::value, 395446035553Spatrick __val_expr<_BinaryOp<plus<typename _Expr::value_type>, 395546035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 395646035553Spatrick>::type 395746035553Spatrickoperator+(const typename _Expr::value_type& __x, const _Expr& __y) 395846035553Spatrick{ 395946035553Spatrick typedef typename _Expr::value_type value_type; 396046035553Spatrick typedef _BinaryOp<plus<value_type>, __scalar_expr<value_type>, _Expr> _Op; 396146035553Spatrick return __val_expr<_Op>(_Op(plus<value_type>(), 396246035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 396346035553Spatrick} 396446035553Spatrick 396546035553Spatricktemplate<class _Expr1, class _Expr2> 396646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 396746035553Spatricktypename enable_if 396846035553Spatrick< 396946035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 397046035553Spatrick __val_expr<_BinaryOp<minus<typename _Expr1::value_type>, _Expr1, _Expr2> > 397146035553Spatrick>::type 397246035553Spatrickoperator-(const _Expr1& __x, const _Expr2& __y) 397346035553Spatrick{ 397446035553Spatrick typedef typename _Expr1::value_type value_type; 397546035553Spatrick typedef _BinaryOp<minus<value_type>, _Expr1, _Expr2> _Op; 397646035553Spatrick return __val_expr<_Op>(_Op(minus<value_type>(), __x, __y)); 397746035553Spatrick} 397846035553Spatrick 397946035553Spatricktemplate<class _Expr> 398046035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 398146035553Spatricktypename enable_if 398246035553Spatrick< 398346035553Spatrick __is_val_expr<_Expr>::value, 398446035553Spatrick __val_expr<_BinaryOp<minus<typename _Expr::value_type>, 398546035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 398646035553Spatrick>::type 398746035553Spatrickoperator-(const _Expr& __x, const typename _Expr::value_type& __y) 398846035553Spatrick{ 398946035553Spatrick typedef typename _Expr::value_type value_type; 399046035553Spatrick typedef _BinaryOp<minus<value_type>, _Expr, __scalar_expr<value_type> > _Op; 399146035553Spatrick return __val_expr<_Op>(_Op(minus<value_type>(), 399246035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 399346035553Spatrick} 399446035553Spatrick 399546035553Spatricktemplate<class _Expr> 399646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 399746035553Spatricktypename enable_if 399846035553Spatrick< 399946035553Spatrick __is_val_expr<_Expr>::value, 400046035553Spatrick __val_expr<_BinaryOp<minus<typename _Expr::value_type>, 400146035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 400246035553Spatrick>::type 400346035553Spatrickoperator-(const typename _Expr::value_type& __x, const _Expr& __y) 400446035553Spatrick{ 400546035553Spatrick typedef typename _Expr::value_type value_type; 400646035553Spatrick typedef _BinaryOp<minus<value_type>, __scalar_expr<value_type>, _Expr> _Op; 400746035553Spatrick return __val_expr<_Op>(_Op(minus<value_type>(), 400846035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 400946035553Spatrick} 401046035553Spatrick 401146035553Spatricktemplate<class _Expr1, class _Expr2> 401246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 401346035553Spatricktypename enable_if 401446035553Spatrick< 401546035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 401646035553Spatrick __val_expr<_BinaryOp<bit_xor<typename _Expr1::value_type>, _Expr1, _Expr2> > 401746035553Spatrick>::type 401846035553Spatrickoperator^(const _Expr1& __x, const _Expr2& __y) 401946035553Spatrick{ 402046035553Spatrick typedef typename _Expr1::value_type value_type; 402146035553Spatrick typedef _BinaryOp<bit_xor<value_type>, _Expr1, _Expr2> _Op; 402246035553Spatrick return __val_expr<_Op>(_Op(bit_xor<value_type>(), __x, __y)); 402346035553Spatrick} 402446035553Spatrick 402546035553Spatricktemplate<class _Expr> 402646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 402746035553Spatricktypename enable_if 402846035553Spatrick< 402946035553Spatrick __is_val_expr<_Expr>::value, 403046035553Spatrick __val_expr<_BinaryOp<bit_xor<typename _Expr::value_type>, 403146035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 403246035553Spatrick>::type 403346035553Spatrickoperator^(const _Expr& __x, const typename _Expr::value_type& __y) 403446035553Spatrick{ 403546035553Spatrick typedef typename _Expr::value_type value_type; 403646035553Spatrick typedef _BinaryOp<bit_xor<value_type>, _Expr, __scalar_expr<value_type> > _Op; 403746035553Spatrick return __val_expr<_Op>(_Op(bit_xor<value_type>(), 403846035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 403946035553Spatrick} 404046035553Spatrick 404146035553Spatricktemplate<class _Expr> 404246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 404346035553Spatricktypename enable_if 404446035553Spatrick< 404546035553Spatrick __is_val_expr<_Expr>::value, 404646035553Spatrick __val_expr<_BinaryOp<bit_xor<typename _Expr::value_type>, 404746035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 404846035553Spatrick>::type 404946035553Spatrickoperator^(const typename _Expr::value_type& __x, const _Expr& __y) 405046035553Spatrick{ 405146035553Spatrick typedef typename _Expr::value_type value_type; 405246035553Spatrick typedef _BinaryOp<bit_xor<value_type>, __scalar_expr<value_type>, _Expr> _Op; 405346035553Spatrick return __val_expr<_Op>(_Op(bit_xor<value_type>(), 405446035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 405546035553Spatrick} 405646035553Spatrick 405746035553Spatricktemplate<class _Expr1, class _Expr2> 405846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 405946035553Spatricktypename enable_if 406046035553Spatrick< 406146035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 406246035553Spatrick __val_expr<_BinaryOp<bit_and<typename _Expr1::value_type>, _Expr1, _Expr2> > 406346035553Spatrick>::type 406446035553Spatrickoperator&(const _Expr1& __x, const _Expr2& __y) 406546035553Spatrick{ 406646035553Spatrick typedef typename _Expr1::value_type value_type; 406746035553Spatrick typedef _BinaryOp<bit_and<value_type>, _Expr1, _Expr2> _Op; 406846035553Spatrick return __val_expr<_Op>(_Op(bit_and<value_type>(), __x, __y)); 406946035553Spatrick} 407046035553Spatrick 407146035553Spatricktemplate<class _Expr> 407246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 407346035553Spatricktypename enable_if 407446035553Spatrick< 407546035553Spatrick __is_val_expr<_Expr>::value, 407646035553Spatrick __val_expr<_BinaryOp<bit_and<typename _Expr::value_type>, 407746035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 407846035553Spatrick>::type 407946035553Spatrickoperator&(const _Expr& __x, const typename _Expr::value_type& __y) 408046035553Spatrick{ 408146035553Spatrick typedef typename _Expr::value_type value_type; 408246035553Spatrick typedef _BinaryOp<bit_and<value_type>, _Expr, __scalar_expr<value_type> > _Op; 408346035553Spatrick return __val_expr<_Op>(_Op(bit_and<value_type>(), 408446035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 408546035553Spatrick} 408646035553Spatrick 408746035553Spatricktemplate<class _Expr> 408846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 408946035553Spatricktypename enable_if 409046035553Spatrick< 409146035553Spatrick __is_val_expr<_Expr>::value, 409246035553Spatrick __val_expr<_BinaryOp<bit_and<typename _Expr::value_type>, 409346035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 409446035553Spatrick>::type 409546035553Spatrickoperator&(const typename _Expr::value_type& __x, const _Expr& __y) 409646035553Spatrick{ 409746035553Spatrick typedef typename _Expr::value_type value_type; 409846035553Spatrick typedef _BinaryOp<bit_and<value_type>, __scalar_expr<value_type>, _Expr> _Op; 409946035553Spatrick return __val_expr<_Op>(_Op(bit_and<value_type>(), 410046035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 410146035553Spatrick} 410246035553Spatrick 410346035553Spatricktemplate<class _Expr1, class _Expr2> 410446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 410546035553Spatricktypename enable_if 410646035553Spatrick< 410746035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 410846035553Spatrick __val_expr<_BinaryOp<bit_or<typename _Expr1::value_type>, _Expr1, _Expr2> > 410946035553Spatrick>::type 411046035553Spatrickoperator|(const _Expr1& __x, const _Expr2& __y) 411146035553Spatrick{ 411246035553Spatrick typedef typename _Expr1::value_type value_type; 411346035553Spatrick typedef _BinaryOp<bit_or<value_type>, _Expr1, _Expr2> _Op; 411446035553Spatrick return __val_expr<_Op>(_Op(bit_or<value_type>(), __x, __y)); 411546035553Spatrick} 411646035553Spatrick 411746035553Spatricktemplate<class _Expr> 411846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 411946035553Spatricktypename enable_if 412046035553Spatrick< 412146035553Spatrick __is_val_expr<_Expr>::value, 412246035553Spatrick __val_expr<_BinaryOp<bit_or<typename _Expr::value_type>, 412346035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 412446035553Spatrick>::type 412546035553Spatrickoperator|(const _Expr& __x, const typename _Expr::value_type& __y) 412646035553Spatrick{ 412746035553Spatrick typedef typename _Expr::value_type value_type; 412846035553Spatrick typedef _BinaryOp<bit_or<value_type>, _Expr, __scalar_expr<value_type> > _Op; 412946035553Spatrick return __val_expr<_Op>(_Op(bit_or<value_type>(), 413046035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 413146035553Spatrick} 413246035553Spatrick 413346035553Spatricktemplate<class _Expr> 413446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 413546035553Spatricktypename enable_if 413646035553Spatrick< 413746035553Spatrick __is_val_expr<_Expr>::value, 413846035553Spatrick __val_expr<_BinaryOp<bit_or<typename _Expr::value_type>, 413946035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 414046035553Spatrick>::type 414146035553Spatrickoperator|(const typename _Expr::value_type& __x, const _Expr& __y) 414246035553Spatrick{ 414346035553Spatrick typedef typename _Expr::value_type value_type; 414446035553Spatrick typedef _BinaryOp<bit_or<value_type>, __scalar_expr<value_type>, _Expr> _Op; 414546035553Spatrick return __val_expr<_Op>(_Op(bit_or<value_type>(), 414646035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 414746035553Spatrick} 414846035553Spatrick 414946035553Spatricktemplate<class _Expr1, class _Expr2> 415046035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 415146035553Spatricktypename enable_if 415246035553Spatrick< 415346035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 415446035553Spatrick __val_expr<_BinaryOp<__bit_shift_left<typename _Expr1::value_type>, _Expr1, _Expr2> > 415546035553Spatrick>::type 415646035553Spatrickoperator<<(const _Expr1& __x, const _Expr2& __y) 415746035553Spatrick{ 415846035553Spatrick typedef typename _Expr1::value_type value_type; 415946035553Spatrick typedef _BinaryOp<__bit_shift_left<value_type>, _Expr1, _Expr2> _Op; 416046035553Spatrick return __val_expr<_Op>(_Op(__bit_shift_left<value_type>(), __x, __y)); 416146035553Spatrick} 416246035553Spatrick 416346035553Spatricktemplate<class _Expr> 416446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 416546035553Spatricktypename enable_if 416646035553Spatrick< 416746035553Spatrick __is_val_expr<_Expr>::value, 416846035553Spatrick __val_expr<_BinaryOp<__bit_shift_left<typename _Expr::value_type>, 416946035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 417046035553Spatrick>::type 417146035553Spatrickoperator<<(const _Expr& __x, const typename _Expr::value_type& __y) 417246035553Spatrick{ 417346035553Spatrick typedef typename _Expr::value_type value_type; 417446035553Spatrick typedef _BinaryOp<__bit_shift_left<value_type>, _Expr, __scalar_expr<value_type> > _Op; 417546035553Spatrick return __val_expr<_Op>(_Op(__bit_shift_left<value_type>(), 417646035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 417746035553Spatrick} 417846035553Spatrick 417946035553Spatricktemplate<class _Expr> 418046035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 418146035553Spatricktypename enable_if 418246035553Spatrick< 418346035553Spatrick __is_val_expr<_Expr>::value, 418446035553Spatrick __val_expr<_BinaryOp<__bit_shift_left<typename _Expr::value_type>, 418546035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 418646035553Spatrick>::type 418746035553Spatrickoperator<<(const typename _Expr::value_type& __x, const _Expr& __y) 418846035553Spatrick{ 418946035553Spatrick typedef typename _Expr::value_type value_type; 419046035553Spatrick typedef _BinaryOp<__bit_shift_left<value_type>, __scalar_expr<value_type>, _Expr> _Op; 419146035553Spatrick return __val_expr<_Op>(_Op(__bit_shift_left<value_type>(), 419246035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 419346035553Spatrick} 419446035553Spatrick 419546035553Spatricktemplate<class _Expr1, class _Expr2> 419646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 419746035553Spatricktypename enable_if 419846035553Spatrick< 419946035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 420046035553Spatrick __val_expr<_BinaryOp<__bit_shift_right<typename _Expr1::value_type>, _Expr1, _Expr2> > 420146035553Spatrick>::type 420246035553Spatrickoperator>>(const _Expr1& __x, const _Expr2& __y) 420346035553Spatrick{ 420446035553Spatrick typedef typename _Expr1::value_type value_type; 420546035553Spatrick typedef _BinaryOp<__bit_shift_right<value_type>, _Expr1, _Expr2> _Op; 420646035553Spatrick return __val_expr<_Op>(_Op(__bit_shift_right<value_type>(), __x, __y)); 420746035553Spatrick} 420846035553Spatrick 420946035553Spatricktemplate<class _Expr> 421046035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 421146035553Spatricktypename enable_if 421246035553Spatrick< 421346035553Spatrick __is_val_expr<_Expr>::value, 421446035553Spatrick __val_expr<_BinaryOp<__bit_shift_right<typename _Expr::value_type>, 421546035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 421646035553Spatrick>::type 421746035553Spatrickoperator>>(const _Expr& __x, const typename _Expr::value_type& __y) 421846035553Spatrick{ 421946035553Spatrick typedef typename _Expr::value_type value_type; 422046035553Spatrick typedef _BinaryOp<__bit_shift_right<value_type>, _Expr, __scalar_expr<value_type> > _Op; 422146035553Spatrick return __val_expr<_Op>(_Op(__bit_shift_right<value_type>(), 422246035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 422346035553Spatrick} 422446035553Spatrick 422546035553Spatricktemplate<class _Expr> 422646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 422746035553Spatricktypename enable_if 422846035553Spatrick< 422946035553Spatrick __is_val_expr<_Expr>::value, 423046035553Spatrick __val_expr<_BinaryOp<__bit_shift_right<typename _Expr::value_type>, 423146035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 423246035553Spatrick>::type 423346035553Spatrickoperator>>(const typename _Expr::value_type& __x, const _Expr& __y) 423446035553Spatrick{ 423546035553Spatrick typedef typename _Expr::value_type value_type; 423646035553Spatrick typedef _BinaryOp<__bit_shift_right<value_type>, __scalar_expr<value_type>, _Expr> _Op; 423746035553Spatrick return __val_expr<_Op>(_Op(__bit_shift_right<value_type>(), 423846035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 423946035553Spatrick} 424046035553Spatrick 424146035553Spatricktemplate<class _Expr1, class _Expr2> 424246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 424346035553Spatricktypename enable_if 424446035553Spatrick< 424546035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 424646035553Spatrick __val_expr<_BinaryOp<logical_and<typename _Expr1::value_type>, _Expr1, _Expr2> > 424746035553Spatrick>::type 424846035553Spatrickoperator&&(const _Expr1& __x, const _Expr2& __y) 424946035553Spatrick{ 425046035553Spatrick typedef typename _Expr1::value_type value_type; 425146035553Spatrick typedef _BinaryOp<logical_and<value_type>, _Expr1, _Expr2> _Op; 425246035553Spatrick return __val_expr<_Op>(_Op(logical_and<value_type>(), __x, __y)); 425346035553Spatrick} 425446035553Spatrick 425546035553Spatricktemplate<class _Expr> 425646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 425746035553Spatricktypename enable_if 425846035553Spatrick< 425946035553Spatrick __is_val_expr<_Expr>::value, 426046035553Spatrick __val_expr<_BinaryOp<logical_and<typename _Expr::value_type>, 426146035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 426246035553Spatrick>::type 426346035553Spatrickoperator&&(const _Expr& __x, const typename _Expr::value_type& __y) 426446035553Spatrick{ 426546035553Spatrick typedef typename _Expr::value_type value_type; 426646035553Spatrick typedef _BinaryOp<logical_and<value_type>, _Expr, __scalar_expr<value_type> > _Op; 426746035553Spatrick return __val_expr<_Op>(_Op(logical_and<value_type>(), 426846035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 426946035553Spatrick} 427046035553Spatrick 427146035553Spatricktemplate<class _Expr> 427246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 427346035553Spatricktypename enable_if 427446035553Spatrick< 427546035553Spatrick __is_val_expr<_Expr>::value, 427646035553Spatrick __val_expr<_BinaryOp<logical_and<typename _Expr::value_type>, 427746035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 427846035553Spatrick>::type 427946035553Spatrickoperator&&(const typename _Expr::value_type& __x, const _Expr& __y) 428046035553Spatrick{ 428146035553Spatrick typedef typename _Expr::value_type value_type; 428246035553Spatrick typedef _BinaryOp<logical_and<value_type>, __scalar_expr<value_type>, _Expr> _Op; 428346035553Spatrick return __val_expr<_Op>(_Op(logical_and<value_type>(), 428446035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 428546035553Spatrick} 428646035553Spatrick 428746035553Spatricktemplate<class _Expr1, class _Expr2> 428846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 428946035553Spatricktypename enable_if 429046035553Spatrick< 429146035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 429246035553Spatrick __val_expr<_BinaryOp<logical_or<typename _Expr1::value_type>, _Expr1, _Expr2> > 429346035553Spatrick>::type 429446035553Spatrickoperator||(const _Expr1& __x, const _Expr2& __y) 429546035553Spatrick{ 429646035553Spatrick typedef typename _Expr1::value_type value_type; 429746035553Spatrick typedef _BinaryOp<logical_or<value_type>, _Expr1, _Expr2> _Op; 429846035553Spatrick return __val_expr<_Op>(_Op(logical_or<value_type>(), __x, __y)); 429946035553Spatrick} 430046035553Spatrick 430146035553Spatricktemplate<class _Expr> 430246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 430346035553Spatricktypename enable_if 430446035553Spatrick< 430546035553Spatrick __is_val_expr<_Expr>::value, 430646035553Spatrick __val_expr<_BinaryOp<logical_or<typename _Expr::value_type>, 430746035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 430846035553Spatrick>::type 430946035553Spatrickoperator||(const _Expr& __x, const typename _Expr::value_type& __y) 431046035553Spatrick{ 431146035553Spatrick typedef typename _Expr::value_type value_type; 431246035553Spatrick typedef _BinaryOp<logical_or<value_type>, _Expr, __scalar_expr<value_type> > _Op; 431346035553Spatrick return __val_expr<_Op>(_Op(logical_or<value_type>(), 431446035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 431546035553Spatrick} 431646035553Spatrick 431746035553Spatricktemplate<class _Expr> 431846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 431946035553Spatricktypename enable_if 432046035553Spatrick< 432146035553Spatrick __is_val_expr<_Expr>::value, 432246035553Spatrick __val_expr<_BinaryOp<logical_or<typename _Expr::value_type>, 432346035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 432446035553Spatrick>::type 432546035553Spatrickoperator||(const typename _Expr::value_type& __x, const _Expr& __y) 432646035553Spatrick{ 432746035553Spatrick typedef typename _Expr::value_type value_type; 432846035553Spatrick typedef _BinaryOp<logical_or<value_type>, __scalar_expr<value_type>, _Expr> _Op; 432946035553Spatrick return __val_expr<_Op>(_Op(logical_or<value_type>(), 433046035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 433146035553Spatrick} 433246035553Spatrick 433346035553Spatricktemplate<class _Expr1, class _Expr2> 433446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 433546035553Spatricktypename enable_if 433646035553Spatrick< 433746035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 433846035553Spatrick __val_expr<_BinaryOp<equal_to<typename _Expr1::value_type>, _Expr1, _Expr2> > 433946035553Spatrick>::type 434046035553Spatrickoperator==(const _Expr1& __x, const _Expr2& __y) 434146035553Spatrick{ 434246035553Spatrick typedef typename _Expr1::value_type value_type; 434346035553Spatrick typedef _BinaryOp<equal_to<value_type>, _Expr1, _Expr2> _Op; 434446035553Spatrick return __val_expr<_Op>(_Op(equal_to<value_type>(), __x, __y)); 434546035553Spatrick} 434646035553Spatrick 434746035553Spatricktemplate<class _Expr> 434846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 434946035553Spatricktypename enable_if 435046035553Spatrick< 435146035553Spatrick __is_val_expr<_Expr>::value, 435246035553Spatrick __val_expr<_BinaryOp<equal_to<typename _Expr::value_type>, 435346035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 435446035553Spatrick>::type 435546035553Spatrickoperator==(const _Expr& __x, const typename _Expr::value_type& __y) 435646035553Spatrick{ 435746035553Spatrick typedef typename _Expr::value_type value_type; 435846035553Spatrick typedef _BinaryOp<equal_to<value_type>, _Expr, __scalar_expr<value_type> > _Op; 435946035553Spatrick return __val_expr<_Op>(_Op(equal_to<value_type>(), 436046035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 436146035553Spatrick} 436246035553Spatrick 436346035553Spatricktemplate<class _Expr> 436446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 436546035553Spatricktypename enable_if 436646035553Spatrick< 436746035553Spatrick __is_val_expr<_Expr>::value, 436846035553Spatrick __val_expr<_BinaryOp<equal_to<typename _Expr::value_type>, 436946035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 437046035553Spatrick>::type 437146035553Spatrickoperator==(const typename _Expr::value_type& __x, const _Expr& __y) 437246035553Spatrick{ 437346035553Spatrick typedef typename _Expr::value_type value_type; 437446035553Spatrick typedef _BinaryOp<equal_to<value_type>, __scalar_expr<value_type>, _Expr> _Op; 437546035553Spatrick return __val_expr<_Op>(_Op(equal_to<value_type>(), 437646035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 437746035553Spatrick} 437846035553Spatrick 437946035553Spatricktemplate<class _Expr1, class _Expr2> 438046035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 438146035553Spatricktypename enable_if 438246035553Spatrick< 438346035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 438446035553Spatrick __val_expr<_BinaryOp<not_equal_to<typename _Expr1::value_type>, _Expr1, _Expr2> > 438546035553Spatrick>::type 438646035553Spatrickoperator!=(const _Expr1& __x, const _Expr2& __y) 438746035553Spatrick{ 438846035553Spatrick typedef typename _Expr1::value_type value_type; 438946035553Spatrick typedef _BinaryOp<not_equal_to<value_type>, _Expr1, _Expr2> _Op; 439046035553Spatrick return __val_expr<_Op>(_Op(not_equal_to<value_type>(), __x, __y)); 439146035553Spatrick} 439246035553Spatrick 439346035553Spatricktemplate<class _Expr> 439446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 439546035553Spatricktypename enable_if 439646035553Spatrick< 439746035553Spatrick __is_val_expr<_Expr>::value, 439846035553Spatrick __val_expr<_BinaryOp<not_equal_to<typename _Expr::value_type>, 439946035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 440046035553Spatrick>::type 440146035553Spatrickoperator!=(const _Expr& __x, const typename _Expr::value_type& __y) 440246035553Spatrick{ 440346035553Spatrick typedef typename _Expr::value_type value_type; 440446035553Spatrick typedef _BinaryOp<not_equal_to<value_type>, _Expr, __scalar_expr<value_type> > _Op; 440546035553Spatrick return __val_expr<_Op>(_Op(not_equal_to<value_type>(), 440646035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 440746035553Spatrick} 440846035553Spatrick 440946035553Spatricktemplate<class _Expr> 441046035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 441146035553Spatricktypename enable_if 441246035553Spatrick< 441346035553Spatrick __is_val_expr<_Expr>::value, 441446035553Spatrick __val_expr<_BinaryOp<not_equal_to<typename _Expr::value_type>, 441546035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 441646035553Spatrick>::type 441746035553Spatrickoperator!=(const typename _Expr::value_type& __x, const _Expr& __y) 441846035553Spatrick{ 441946035553Spatrick typedef typename _Expr::value_type value_type; 442046035553Spatrick typedef _BinaryOp<not_equal_to<value_type>, __scalar_expr<value_type>, _Expr> _Op; 442146035553Spatrick return __val_expr<_Op>(_Op(not_equal_to<value_type>(), 442246035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 442346035553Spatrick} 442446035553Spatrick 442546035553Spatricktemplate<class _Expr1, class _Expr2> 442646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 442746035553Spatricktypename enable_if 442846035553Spatrick< 442946035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 443046035553Spatrick __val_expr<_BinaryOp<less<typename _Expr1::value_type>, _Expr1, _Expr2> > 443146035553Spatrick>::type 443246035553Spatrickoperator<(const _Expr1& __x, const _Expr2& __y) 443346035553Spatrick{ 443446035553Spatrick typedef typename _Expr1::value_type value_type; 443546035553Spatrick typedef _BinaryOp<less<value_type>, _Expr1, _Expr2> _Op; 443646035553Spatrick return __val_expr<_Op>(_Op(less<value_type>(), __x, __y)); 443746035553Spatrick} 443846035553Spatrick 443946035553Spatricktemplate<class _Expr> 444046035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 444146035553Spatricktypename enable_if 444246035553Spatrick< 444346035553Spatrick __is_val_expr<_Expr>::value, 444446035553Spatrick __val_expr<_BinaryOp<less<typename _Expr::value_type>, 444546035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 444646035553Spatrick>::type 444746035553Spatrickoperator<(const _Expr& __x, const typename _Expr::value_type& __y) 444846035553Spatrick{ 444946035553Spatrick typedef typename _Expr::value_type value_type; 445046035553Spatrick typedef _BinaryOp<less<value_type>, _Expr, __scalar_expr<value_type> > _Op; 445146035553Spatrick return __val_expr<_Op>(_Op(less<value_type>(), 445246035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 445346035553Spatrick} 445446035553Spatrick 445546035553Spatricktemplate<class _Expr> 445646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 445746035553Spatricktypename enable_if 445846035553Spatrick< 445946035553Spatrick __is_val_expr<_Expr>::value, 446046035553Spatrick __val_expr<_BinaryOp<less<typename _Expr::value_type>, 446146035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 446246035553Spatrick>::type 446346035553Spatrickoperator<(const typename _Expr::value_type& __x, const _Expr& __y) 446446035553Spatrick{ 446546035553Spatrick typedef typename _Expr::value_type value_type; 446646035553Spatrick typedef _BinaryOp<less<value_type>, __scalar_expr<value_type>, _Expr> _Op; 446746035553Spatrick return __val_expr<_Op>(_Op(less<value_type>(), 446846035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 446946035553Spatrick} 447046035553Spatrick 447146035553Spatricktemplate<class _Expr1, class _Expr2> 447246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 447346035553Spatricktypename enable_if 447446035553Spatrick< 447546035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 447646035553Spatrick __val_expr<_BinaryOp<greater<typename _Expr1::value_type>, _Expr1, _Expr2> > 447746035553Spatrick>::type 447846035553Spatrickoperator>(const _Expr1& __x, const _Expr2& __y) 447946035553Spatrick{ 448046035553Spatrick typedef typename _Expr1::value_type value_type; 448146035553Spatrick typedef _BinaryOp<greater<value_type>, _Expr1, _Expr2> _Op; 448246035553Spatrick return __val_expr<_Op>(_Op(greater<value_type>(), __x, __y)); 448346035553Spatrick} 448446035553Spatrick 448546035553Spatricktemplate<class _Expr> 448646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 448746035553Spatricktypename enable_if 448846035553Spatrick< 448946035553Spatrick __is_val_expr<_Expr>::value, 449046035553Spatrick __val_expr<_BinaryOp<greater<typename _Expr::value_type>, 449146035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 449246035553Spatrick>::type 449346035553Spatrickoperator>(const _Expr& __x, const typename _Expr::value_type& __y) 449446035553Spatrick{ 449546035553Spatrick typedef typename _Expr::value_type value_type; 449646035553Spatrick typedef _BinaryOp<greater<value_type>, _Expr, __scalar_expr<value_type> > _Op; 449746035553Spatrick return __val_expr<_Op>(_Op(greater<value_type>(), 449846035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 449946035553Spatrick} 450046035553Spatrick 450146035553Spatricktemplate<class _Expr> 450246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 450346035553Spatricktypename enable_if 450446035553Spatrick< 450546035553Spatrick __is_val_expr<_Expr>::value, 450646035553Spatrick __val_expr<_BinaryOp<greater<typename _Expr::value_type>, 450746035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 450846035553Spatrick>::type 450946035553Spatrickoperator>(const typename _Expr::value_type& __x, const _Expr& __y) 451046035553Spatrick{ 451146035553Spatrick typedef typename _Expr::value_type value_type; 451246035553Spatrick typedef _BinaryOp<greater<value_type>, __scalar_expr<value_type>, _Expr> _Op; 451346035553Spatrick return __val_expr<_Op>(_Op(greater<value_type>(), 451446035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 451546035553Spatrick} 451646035553Spatrick 451746035553Spatricktemplate<class _Expr1, class _Expr2> 451846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 451946035553Spatricktypename enable_if 452046035553Spatrick< 452146035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 452246035553Spatrick __val_expr<_BinaryOp<less_equal<typename _Expr1::value_type>, _Expr1, _Expr2> > 452346035553Spatrick>::type 452446035553Spatrickoperator<=(const _Expr1& __x, const _Expr2& __y) 452546035553Spatrick{ 452646035553Spatrick typedef typename _Expr1::value_type value_type; 452746035553Spatrick typedef _BinaryOp<less_equal<value_type>, _Expr1, _Expr2> _Op; 452846035553Spatrick return __val_expr<_Op>(_Op(less_equal<value_type>(), __x, __y)); 452946035553Spatrick} 453046035553Spatrick 453146035553Spatricktemplate<class _Expr> 453246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 453346035553Spatricktypename enable_if 453446035553Spatrick< 453546035553Spatrick __is_val_expr<_Expr>::value, 453646035553Spatrick __val_expr<_BinaryOp<less_equal<typename _Expr::value_type>, 453746035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 453846035553Spatrick>::type 453946035553Spatrickoperator<=(const _Expr& __x, const typename _Expr::value_type& __y) 454046035553Spatrick{ 454146035553Spatrick typedef typename _Expr::value_type value_type; 454246035553Spatrick typedef _BinaryOp<less_equal<value_type>, _Expr, __scalar_expr<value_type> > _Op; 454346035553Spatrick return __val_expr<_Op>(_Op(less_equal<value_type>(), 454446035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 454546035553Spatrick} 454646035553Spatrick 454746035553Spatricktemplate<class _Expr> 454846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 454946035553Spatricktypename enable_if 455046035553Spatrick< 455146035553Spatrick __is_val_expr<_Expr>::value, 455246035553Spatrick __val_expr<_BinaryOp<less_equal<typename _Expr::value_type>, 455346035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 455446035553Spatrick>::type 455546035553Spatrickoperator<=(const typename _Expr::value_type& __x, const _Expr& __y) 455646035553Spatrick{ 455746035553Spatrick typedef typename _Expr::value_type value_type; 455846035553Spatrick typedef _BinaryOp<less_equal<value_type>, __scalar_expr<value_type>, _Expr> _Op; 455946035553Spatrick return __val_expr<_Op>(_Op(less_equal<value_type>(), 456046035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 456146035553Spatrick} 456246035553Spatrick 456346035553Spatricktemplate<class _Expr1, class _Expr2> 456446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 456546035553Spatricktypename enable_if 456646035553Spatrick< 456746035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 456846035553Spatrick __val_expr<_BinaryOp<greater_equal<typename _Expr1::value_type>, _Expr1, _Expr2> > 456946035553Spatrick>::type 457046035553Spatrickoperator>=(const _Expr1& __x, const _Expr2& __y) 457146035553Spatrick{ 457246035553Spatrick typedef typename _Expr1::value_type value_type; 457346035553Spatrick typedef _BinaryOp<greater_equal<value_type>, _Expr1, _Expr2> _Op; 457446035553Spatrick return __val_expr<_Op>(_Op(greater_equal<value_type>(), __x, __y)); 457546035553Spatrick} 457646035553Spatrick 457746035553Spatricktemplate<class _Expr> 457846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 457946035553Spatricktypename enable_if 458046035553Spatrick< 458146035553Spatrick __is_val_expr<_Expr>::value, 458246035553Spatrick __val_expr<_BinaryOp<greater_equal<typename _Expr::value_type>, 458346035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 458446035553Spatrick>::type 458546035553Spatrickoperator>=(const _Expr& __x, const typename _Expr::value_type& __y) 458646035553Spatrick{ 458746035553Spatrick typedef typename _Expr::value_type value_type; 458846035553Spatrick typedef _BinaryOp<greater_equal<value_type>, _Expr, __scalar_expr<value_type> > _Op; 458946035553Spatrick return __val_expr<_Op>(_Op(greater_equal<value_type>(), 459046035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 459146035553Spatrick} 459246035553Spatrick 459346035553Spatricktemplate<class _Expr> 459446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 459546035553Spatricktypename enable_if 459646035553Spatrick< 459746035553Spatrick __is_val_expr<_Expr>::value, 459846035553Spatrick __val_expr<_BinaryOp<greater_equal<typename _Expr::value_type>, 459946035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 460046035553Spatrick>::type 460146035553Spatrickoperator>=(const typename _Expr::value_type& __x, const _Expr& __y) 460246035553Spatrick{ 460346035553Spatrick typedef typename _Expr::value_type value_type; 460446035553Spatrick typedef _BinaryOp<greater_equal<value_type>, __scalar_expr<value_type>, _Expr> _Op; 460546035553Spatrick return __val_expr<_Op>(_Op(greater_equal<value_type>(), 460646035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 460746035553Spatrick} 460846035553Spatrick 460946035553Spatricktemplate<class _Expr> 461046035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 461146035553Spatricktypename enable_if 461246035553Spatrick< 461346035553Spatrick __is_val_expr<_Expr>::value, 461446035553Spatrick __val_expr<_UnaryOp<__abs_expr<typename _Expr::value_type>, _Expr> > 461546035553Spatrick>::type 461646035553Spatrickabs(const _Expr& __x) 461746035553Spatrick{ 461846035553Spatrick typedef typename _Expr::value_type value_type; 461946035553Spatrick typedef _UnaryOp<__abs_expr<value_type>, _Expr> _Op; 462046035553Spatrick return __val_expr<_Op>(_Op(__abs_expr<value_type>(), __x)); 462146035553Spatrick} 462246035553Spatrick 462346035553Spatricktemplate<class _Expr> 462446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 462546035553Spatricktypename enable_if 462646035553Spatrick< 462746035553Spatrick __is_val_expr<_Expr>::value, 462846035553Spatrick __val_expr<_UnaryOp<__acos_expr<typename _Expr::value_type>, _Expr> > 462946035553Spatrick>::type 463046035553Spatrickacos(const _Expr& __x) 463146035553Spatrick{ 463246035553Spatrick typedef typename _Expr::value_type value_type; 463346035553Spatrick typedef _UnaryOp<__acos_expr<value_type>, _Expr> _Op; 463446035553Spatrick return __val_expr<_Op>(_Op(__acos_expr<value_type>(), __x)); 463546035553Spatrick} 463646035553Spatrick 463746035553Spatricktemplate<class _Expr> 463846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 463946035553Spatricktypename enable_if 464046035553Spatrick< 464146035553Spatrick __is_val_expr<_Expr>::value, 464246035553Spatrick __val_expr<_UnaryOp<__asin_expr<typename _Expr::value_type>, _Expr> > 464346035553Spatrick>::type 464446035553Spatrickasin(const _Expr& __x) 464546035553Spatrick{ 464646035553Spatrick typedef typename _Expr::value_type value_type; 464746035553Spatrick typedef _UnaryOp<__asin_expr<value_type>, _Expr> _Op; 464846035553Spatrick return __val_expr<_Op>(_Op(__asin_expr<value_type>(), __x)); 464946035553Spatrick} 465046035553Spatrick 465146035553Spatricktemplate<class _Expr> 465246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 465346035553Spatricktypename enable_if 465446035553Spatrick< 465546035553Spatrick __is_val_expr<_Expr>::value, 465646035553Spatrick __val_expr<_UnaryOp<__atan_expr<typename _Expr::value_type>, _Expr> > 465746035553Spatrick>::type 465846035553Spatrickatan(const _Expr& __x) 465946035553Spatrick{ 466046035553Spatrick typedef typename _Expr::value_type value_type; 466146035553Spatrick typedef _UnaryOp<__atan_expr<value_type>, _Expr> _Op; 466246035553Spatrick return __val_expr<_Op>(_Op(__atan_expr<value_type>(), __x)); 466346035553Spatrick} 466446035553Spatrick 466546035553Spatricktemplate<class _Expr1, class _Expr2> 466646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 466746035553Spatricktypename enable_if 466846035553Spatrick< 466946035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 467046035553Spatrick __val_expr<_BinaryOp<__atan2_expr<typename _Expr1::value_type>, _Expr1, _Expr2> > 467146035553Spatrick>::type 467246035553Spatrickatan2(const _Expr1& __x, const _Expr2& __y) 467346035553Spatrick{ 467446035553Spatrick typedef typename _Expr1::value_type value_type; 467546035553Spatrick typedef _BinaryOp<__atan2_expr<value_type>, _Expr1, _Expr2> _Op; 467646035553Spatrick return __val_expr<_Op>(_Op(__atan2_expr<value_type>(), __x, __y)); 467746035553Spatrick} 467846035553Spatrick 467946035553Spatricktemplate<class _Expr> 468046035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 468146035553Spatricktypename enable_if 468246035553Spatrick< 468346035553Spatrick __is_val_expr<_Expr>::value, 468446035553Spatrick __val_expr<_BinaryOp<__atan2_expr<typename _Expr::value_type>, 468546035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 468646035553Spatrick>::type 468746035553Spatrickatan2(const _Expr& __x, const typename _Expr::value_type& __y) 468846035553Spatrick{ 468946035553Spatrick typedef typename _Expr::value_type value_type; 469046035553Spatrick typedef _BinaryOp<__atan2_expr<value_type>, _Expr, __scalar_expr<value_type> > _Op; 469146035553Spatrick return __val_expr<_Op>(_Op(__atan2_expr<value_type>(), 469246035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 469346035553Spatrick} 469446035553Spatrick 469546035553Spatricktemplate<class _Expr> 469646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 469746035553Spatricktypename enable_if 469846035553Spatrick< 469946035553Spatrick __is_val_expr<_Expr>::value, 470046035553Spatrick __val_expr<_BinaryOp<__atan2_expr<typename _Expr::value_type>, 470146035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 470246035553Spatrick>::type 470346035553Spatrickatan2(const typename _Expr::value_type& __x, const _Expr& __y) 470446035553Spatrick{ 470546035553Spatrick typedef typename _Expr::value_type value_type; 470646035553Spatrick typedef _BinaryOp<__atan2_expr<value_type>, __scalar_expr<value_type>, _Expr> _Op; 470746035553Spatrick return __val_expr<_Op>(_Op(__atan2_expr<value_type>(), 470846035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 470946035553Spatrick} 471046035553Spatrick 471146035553Spatricktemplate<class _Expr> 471246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 471346035553Spatricktypename enable_if 471446035553Spatrick< 471546035553Spatrick __is_val_expr<_Expr>::value, 471646035553Spatrick __val_expr<_UnaryOp<__cos_expr<typename _Expr::value_type>, _Expr> > 471746035553Spatrick>::type 471846035553Spatrickcos(const _Expr& __x) 471946035553Spatrick{ 472046035553Spatrick typedef typename _Expr::value_type value_type; 472146035553Spatrick typedef _UnaryOp<__cos_expr<value_type>, _Expr> _Op; 472246035553Spatrick return __val_expr<_Op>(_Op(__cos_expr<value_type>(), __x)); 472346035553Spatrick} 472446035553Spatrick 472546035553Spatricktemplate<class _Expr> 472646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 472746035553Spatricktypename enable_if 472846035553Spatrick< 472946035553Spatrick __is_val_expr<_Expr>::value, 473046035553Spatrick __val_expr<_UnaryOp<__cosh_expr<typename _Expr::value_type>, _Expr> > 473146035553Spatrick>::type 473246035553Spatrickcosh(const _Expr& __x) 473346035553Spatrick{ 473446035553Spatrick typedef typename _Expr::value_type value_type; 473546035553Spatrick typedef _UnaryOp<__cosh_expr<value_type>, _Expr> _Op; 473646035553Spatrick return __val_expr<_Op>(_Op(__cosh_expr<value_type>(), __x)); 473746035553Spatrick} 473846035553Spatrick 473946035553Spatricktemplate<class _Expr> 474046035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 474146035553Spatricktypename enable_if 474246035553Spatrick< 474346035553Spatrick __is_val_expr<_Expr>::value, 474446035553Spatrick __val_expr<_UnaryOp<__exp_expr<typename _Expr::value_type>, _Expr> > 474546035553Spatrick>::type 474646035553Spatrickexp(const _Expr& __x) 474746035553Spatrick{ 474846035553Spatrick typedef typename _Expr::value_type value_type; 474946035553Spatrick typedef _UnaryOp<__exp_expr<value_type>, _Expr> _Op; 475046035553Spatrick return __val_expr<_Op>(_Op(__exp_expr<value_type>(), __x)); 475146035553Spatrick} 475246035553Spatrick 475346035553Spatricktemplate<class _Expr> 475446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 475546035553Spatricktypename enable_if 475646035553Spatrick< 475746035553Spatrick __is_val_expr<_Expr>::value, 475846035553Spatrick __val_expr<_UnaryOp<__log_expr<typename _Expr::value_type>, _Expr> > 475946035553Spatrick>::type 476046035553Spatricklog(const _Expr& __x) 476146035553Spatrick{ 476246035553Spatrick typedef typename _Expr::value_type value_type; 476346035553Spatrick typedef _UnaryOp<__log_expr<value_type>, _Expr> _Op; 476446035553Spatrick return __val_expr<_Op>(_Op(__log_expr<value_type>(), __x)); 476546035553Spatrick} 476646035553Spatrick 476746035553Spatricktemplate<class _Expr> 476846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 476946035553Spatricktypename enable_if 477046035553Spatrick< 477146035553Spatrick __is_val_expr<_Expr>::value, 477246035553Spatrick __val_expr<_UnaryOp<__log10_expr<typename _Expr::value_type>, _Expr> > 477346035553Spatrick>::type 477446035553Spatricklog10(const _Expr& __x) 477546035553Spatrick{ 477646035553Spatrick typedef typename _Expr::value_type value_type; 477746035553Spatrick typedef _UnaryOp<__log10_expr<value_type>, _Expr> _Op; 477846035553Spatrick return __val_expr<_Op>(_Op(__log10_expr<value_type>(), __x)); 477946035553Spatrick} 478046035553Spatrick 478146035553Spatricktemplate<class _Expr1, class _Expr2> 478246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 478346035553Spatricktypename enable_if 478446035553Spatrick< 478546035553Spatrick __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 478646035553Spatrick __val_expr<_BinaryOp<__pow_expr<typename _Expr1::value_type>, _Expr1, _Expr2> > 478746035553Spatrick>::type 478846035553Spatrickpow(const _Expr1& __x, const _Expr2& __y) 478946035553Spatrick{ 479046035553Spatrick typedef typename _Expr1::value_type value_type; 479146035553Spatrick typedef _BinaryOp<__pow_expr<value_type>, _Expr1, _Expr2> _Op; 479246035553Spatrick return __val_expr<_Op>(_Op(__pow_expr<value_type>(), __x, __y)); 479346035553Spatrick} 479446035553Spatrick 479546035553Spatricktemplate<class _Expr> 479646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 479746035553Spatricktypename enable_if 479846035553Spatrick< 479946035553Spatrick __is_val_expr<_Expr>::value, 480046035553Spatrick __val_expr<_BinaryOp<__pow_expr<typename _Expr::value_type>, 480146035553Spatrick _Expr, __scalar_expr<typename _Expr::value_type> > > 480246035553Spatrick>::type 480346035553Spatrickpow(const _Expr& __x, const typename _Expr::value_type& __y) 480446035553Spatrick{ 480546035553Spatrick typedef typename _Expr::value_type value_type; 480646035553Spatrick typedef _BinaryOp<__pow_expr<value_type>, _Expr, __scalar_expr<value_type> > _Op; 480746035553Spatrick return __val_expr<_Op>(_Op(__pow_expr<value_type>(), 480846035553Spatrick __x, __scalar_expr<value_type>(__y, __x.size()))); 480946035553Spatrick} 481046035553Spatrick 481146035553Spatricktemplate<class _Expr> 481246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 481346035553Spatricktypename enable_if 481446035553Spatrick< 481546035553Spatrick __is_val_expr<_Expr>::value, 481646035553Spatrick __val_expr<_BinaryOp<__pow_expr<typename _Expr::value_type>, 481746035553Spatrick __scalar_expr<typename _Expr::value_type>, _Expr> > 481846035553Spatrick>::type 481946035553Spatrickpow(const typename _Expr::value_type& __x, const _Expr& __y) 482046035553Spatrick{ 482146035553Spatrick typedef typename _Expr::value_type value_type; 482246035553Spatrick typedef _BinaryOp<__pow_expr<value_type>, __scalar_expr<value_type>, _Expr> _Op; 482346035553Spatrick return __val_expr<_Op>(_Op(__pow_expr<value_type>(), 482446035553Spatrick __scalar_expr<value_type>(__x, __y.size()), __y)); 482546035553Spatrick} 482646035553Spatrick 482746035553Spatricktemplate<class _Expr> 482846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 482946035553Spatricktypename enable_if 483046035553Spatrick< 483146035553Spatrick __is_val_expr<_Expr>::value, 483246035553Spatrick __val_expr<_UnaryOp<__sin_expr<typename _Expr::value_type>, _Expr> > 483346035553Spatrick>::type 483446035553Spatricksin(const _Expr& __x) 483546035553Spatrick{ 483646035553Spatrick typedef typename _Expr::value_type value_type; 483746035553Spatrick typedef _UnaryOp<__sin_expr<value_type>, _Expr> _Op; 483846035553Spatrick return __val_expr<_Op>(_Op(__sin_expr<value_type>(), __x)); 483946035553Spatrick} 484046035553Spatrick 484146035553Spatricktemplate<class _Expr> 484246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 484346035553Spatricktypename enable_if 484446035553Spatrick< 484546035553Spatrick __is_val_expr<_Expr>::value, 484646035553Spatrick __val_expr<_UnaryOp<__sinh_expr<typename _Expr::value_type>, _Expr> > 484746035553Spatrick>::type 484846035553Spatricksinh(const _Expr& __x) 484946035553Spatrick{ 485046035553Spatrick typedef typename _Expr::value_type value_type; 485146035553Spatrick typedef _UnaryOp<__sinh_expr<value_type>, _Expr> _Op; 485246035553Spatrick return __val_expr<_Op>(_Op(__sinh_expr<value_type>(), __x)); 485346035553Spatrick} 485446035553Spatrick 485546035553Spatricktemplate<class _Expr> 485646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 485746035553Spatricktypename enable_if 485846035553Spatrick< 485946035553Spatrick __is_val_expr<_Expr>::value, 486046035553Spatrick __val_expr<_UnaryOp<__sqrt_expr<typename _Expr::value_type>, _Expr> > 486146035553Spatrick>::type 486246035553Spatricksqrt(const _Expr& __x) 486346035553Spatrick{ 486446035553Spatrick typedef typename _Expr::value_type value_type; 486546035553Spatrick typedef _UnaryOp<__sqrt_expr<value_type>, _Expr> _Op; 486646035553Spatrick return __val_expr<_Op>(_Op(__sqrt_expr<value_type>(), __x)); 486746035553Spatrick} 486846035553Spatrick 486946035553Spatricktemplate<class _Expr> 487046035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 487146035553Spatricktypename enable_if 487246035553Spatrick< 487346035553Spatrick __is_val_expr<_Expr>::value, 487446035553Spatrick __val_expr<_UnaryOp<__tan_expr<typename _Expr::value_type>, _Expr> > 487546035553Spatrick>::type 487646035553Spatricktan(const _Expr& __x) 487746035553Spatrick{ 487846035553Spatrick typedef typename _Expr::value_type value_type; 487946035553Spatrick typedef _UnaryOp<__tan_expr<value_type>, _Expr> _Op; 488046035553Spatrick return __val_expr<_Op>(_Op(__tan_expr<value_type>(), __x)); 488146035553Spatrick} 488246035553Spatrick 488346035553Spatricktemplate<class _Expr> 488446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 488546035553Spatricktypename enable_if 488646035553Spatrick< 488746035553Spatrick __is_val_expr<_Expr>::value, 488846035553Spatrick __val_expr<_UnaryOp<__tanh_expr<typename _Expr::value_type>, _Expr> > 488946035553Spatrick>::type 489046035553Spatricktanh(const _Expr& __x) 489146035553Spatrick{ 489246035553Spatrick typedef typename _Expr::value_type value_type; 489346035553Spatrick typedef _UnaryOp<__tanh_expr<value_type>, _Expr> _Op; 489446035553Spatrick return __val_expr<_Op>(_Op(__tanh_expr<value_type>(), __x)); 489546035553Spatrick} 489646035553Spatrick 489746035553Spatricktemplate <class _Tp> 489846035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 489946035553Spatrick_Tp* 490046035553Spatrickbegin(valarray<_Tp>& __v) 490146035553Spatrick{ 490246035553Spatrick return __v.__begin_; 490346035553Spatrick} 490446035553Spatrick 490546035553Spatricktemplate <class _Tp> 490646035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 490746035553Spatrickconst _Tp* 490846035553Spatrickbegin(const valarray<_Tp>& __v) 490946035553Spatrick{ 491046035553Spatrick return __v.__begin_; 491146035553Spatrick} 491246035553Spatrick 491346035553Spatricktemplate <class _Tp> 491446035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 491546035553Spatrick_Tp* 491646035553Spatrickend(valarray<_Tp>& __v) 491746035553Spatrick{ 491846035553Spatrick return __v.__end_; 491946035553Spatrick} 492046035553Spatrick 492146035553Spatricktemplate <class _Tp> 492246035553Spatrickinline _LIBCPP_INLINE_VISIBILITY 492346035553Spatrickconst _Tp* 492446035553Spatrickend(const valarray<_Tp>& __v) 492546035553Spatrick{ 492646035553Spatrick return __v.__end_; 492746035553Spatrick} 492846035553Spatrick 492946035553Spatrick_LIBCPP_END_NAMESPACE_STD 493046035553Spatrick 493146035553Spatrick_LIBCPP_POP_MACROS 493246035553Spatrick 4933*4bdff4beSrobert#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 4934*4bdff4beSrobert# include <algorithm> 4935*4bdff4beSrobert# include <concepts> 4936*4bdff4beSrobert# include <cstring> 4937*4bdff4beSrobert# include <functional> 4938*4bdff4beSrobert#endif 4939*4bdff4beSrobert 494046035553Spatrick#endif // _LIBCPP_VALARRAY 4941