1*58b9f456SAndroid Build Coastguard Worker// -*- C++ -*- 2*58b9f456SAndroid Build Coastguard Worker//===-------------------------- valarray ----------------------------------===// 3*58b9f456SAndroid Build Coastguard Worker// 4*58b9f456SAndroid Build Coastguard Worker// The LLVM Compiler Infrastructure 5*58b9f456SAndroid Build Coastguard Worker// 6*58b9f456SAndroid Build Coastguard Worker// This file is dual licensed under the MIT and the University of Illinois Open 7*58b9f456SAndroid Build Coastguard Worker// Source Licenses. See LICENSE.TXT for details. 8*58b9f456SAndroid Build Coastguard Worker// 9*58b9f456SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 10*58b9f456SAndroid Build Coastguard Worker 11*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_VALARRAY 12*58b9f456SAndroid Build Coastguard Worker#define _LIBCPP_VALARRAY 13*58b9f456SAndroid Build Coastguard Worker 14*58b9f456SAndroid Build Coastguard Worker/* 15*58b9f456SAndroid Build Coastguard Worker valarray synopsis 16*58b9f456SAndroid Build Coastguard Worker 17*58b9f456SAndroid Build Coastguard Workernamespace std 18*58b9f456SAndroid Build Coastguard Worker{ 19*58b9f456SAndroid Build Coastguard Worker 20*58b9f456SAndroid Build Coastguard Workertemplate<class T> 21*58b9f456SAndroid Build Coastguard Workerclass valarray 22*58b9f456SAndroid Build Coastguard Worker{ 23*58b9f456SAndroid Build Coastguard Workerpublic: 24*58b9f456SAndroid Build Coastguard Worker typedef T value_type; 25*58b9f456SAndroid Build Coastguard Worker 26*58b9f456SAndroid Build Coastguard Worker // construct/destroy: 27*58b9f456SAndroid Build Coastguard Worker valarray(); 28*58b9f456SAndroid Build Coastguard Worker explicit valarray(size_t n); 29*58b9f456SAndroid Build Coastguard Worker valarray(const value_type& x, size_t n); 30*58b9f456SAndroid Build Coastguard Worker valarray(const value_type* px, size_t n); 31*58b9f456SAndroid Build Coastguard Worker valarray(const valarray& v); 32*58b9f456SAndroid Build Coastguard Worker valarray(valarray&& v) noexcept; 33*58b9f456SAndroid Build Coastguard Worker valarray(const slice_array<value_type>& sa); 34*58b9f456SAndroid Build Coastguard Worker valarray(const gslice_array<value_type>& ga); 35*58b9f456SAndroid Build Coastguard Worker valarray(const mask_array<value_type>& ma); 36*58b9f456SAndroid Build Coastguard Worker valarray(const indirect_array<value_type>& ia); 37*58b9f456SAndroid Build Coastguard Worker valarray(initializer_list<value_type> il); 38*58b9f456SAndroid Build Coastguard Worker ~valarray(); 39*58b9f456SAndroid Build Coastguard Worker 40*58b9f456SAndroid Build Coastguard Worker // assignment: 41*58b9f456SAndroid Build Coastguard Worker valarray& operator=(const valarray& v); 42*58b9f456SAndroid Build Coastguard Worker valarray& operator=(valarray&& v) noexcept; 43*58b9f456SAndroid Build Coastguard Worker valarray& operator=(initializer_list<value_type> il); 44*58b9f456SAndroid Build Coastguard Worker valarray& operator=(const value_type& x); 45*58b9f456SAndroid Build Coastguard Worker valarray& operator=(const slice_array<value_type>& sa); 46*58b9f456SAndroid Build Coastguard Worker valarray& operator=(const gslice_array<value_type>& ga); 47*58b9f456SAndroid Build Coastguard Worker valarray& operator=(const mask_array<value_type>& ma); 48*58b9f456SAndroid Build Coastguard Worker valarray& operator=(const indirect_array<value_type>& ia); 49*58b9f456SAndroid Build Coastguard Worker 50*58b9f456SAndroid Build Coastguard Worker // element access: 51*58b9f456SAndroid Build Coastguard Worker const value_type& operator[](size_t i) const; 52*58b9f456SAndroid Build Coastguard Worker value_type& operator[](size_t i); 53*58b9f456SAndroid Build Coastguard Worker 54*58b9f456SAndroid Build Coastguard Worker // subset operations: 55*58b9f456SAndroid Build Coastguard Worker valarray operator[](slice s) const; 56*58b9f456SAndroid Build Coastguard Worker slice_array<value_type> operator[](slice s); 57*58b9f456SAndroid Build Coastguard Worker valarray operator[](const gslice& gs) const; 58*58b9f456SAndroid Build Coastguard Worker gslice_array<value_type> operator[](const gslice& gs); 59*58b9f456SAndroid Build Coastguard Worker valarray operator[](const valarray<bool>& vb) const; 60*58b9f456SAndroid Build Coastguard Worker mask_array<value_type> operator[](const valarray<bool>& vb); 61*58b9f456SAndroid Build Coastguard Worker valarray operator[](const valarray<size_t>& vs) const; 62*58b9f456SAndroid Build Coastguard Worker indirect_array<value_type> operator[](const valarray<size_t>& vs); 63*58b9f456SAndroid Build Coastguard Worker 64*58b9f456SAndroid Build Coastguard Worker // unary operators: 65*58b9f456SAndroid Build Coastguard Worker valarray operator+() const; 66*58b9f456SAndroid Build Coastguard Worker valarray operator-() const; 67*58b9f456SAndroid Build Coastguard Worker valarray operator~() const; 68*58b9f456SAndroid Build Coastguard Worker valarray<bool> operator!() const; 69*58b9f456SAndroid Build Coastguard Worker 70*58b9f456SAndroid Build Coastguard Worker // computed assignment: 71*58b9f456SAndroid Build Coastguard Worker valarray& operator*= (const value_type& x); 72*58b9f456SAndroid Build Coastguard Worker valarray& operator/= (const value_type& x); 73*58b9f456SAndroid Build Coastguard Worker valarray& operator%= (const value_type& x); 74*58b9f456SAndroid Build Coastguard Worker valarray& operator+= (const value_type& x); 75*58b9f456SAndroid Build Coastguard Worker valarray& operator-= (const value_type& x); 76*58b9f456SAndroid Build Coastguard Worker valarray& operator^= (const value_type& x); 77*58b9f456SAndroid Build Coastguard Worker valarray& operator&= (const value_type& x); 78*58b9f456SAndroid Build Coastguard Worker valarray& operator|= (const value_type& x); 79*58b9f456SAndroid Build Coastguard Worker valarray& operator<<=(const value_type& x); 80*58b9f456SAndroid Build Coastguard Worker valarray& operator>>=(const value_type& x); 81*58b9f456SAndroid Build Coastguard Worker 82*58b9f456SAndroid Build Coastguard Worker valarray& operator*= (const valarray& v); 83*58b9f456SAndroid Build Coastguard Worker valarray& operator/= (const valarray& v); 84*58b9f456SAndroid Build Coastguard Worker valarray& operator%= (const valarray& v); 85*58b9f456SAndroid Build Coastguard Worker valarray& operator+= (const valarray& v); 86*58b9f456SAndroid Build Coastguard Worker valarray& operator-= (const valarray& v); 87*58b9f456SAndroid Build Coastguard Worker valarray& operator^= (const valarray& v); 88*58b9f456SAndroid Build Coastguard Worker valarray& operator|= (const valarray& v); 89*58b9f456SAndroid Build Coastguard Worker valarray& operator&= (const valarray& v); 90*58b9f456SAndroid Build Coastguard Worker valarray& operator<<=(const valarray& v); 91*58b9f456SAndroid Build Coastguard Worker valarray& operator>>=(const valarray& v); 92*58b9f456SAndroid Build Coastguard Worker 93*58b9f456SAndroid Build Coastguard Worker // member functions: 94*58b9f456SAndroid Build Coastguard Worker void swap(valarray& v) noexcept; 95*58b9f456SAndroid Build Coastguard Worker 96*58b9f456SAndroid Build Coastguard Worker size_t size() const; 97*58b9f456SAndroid Build Coastguard Worker 98*58b9f456SAndroid Build Coastguard Worker value_type sum() const; 99*58b9f456SAndroid Build Coastguard Worker value_type min() const; 100*58b9f456SAndroid Build Coastguard Worker value_type max() const; 101*58b9f456SAndroid Build Coastguard Worker 102*58b9f456SAndroid Build Coastguard Worker valarray shift (int i) const; 103*58b9f456SAndroid Build Coastguard Worker valarray cshift(int i) const; 104*58b9f456SAndroid Build Coastguard Worker valarray apply(value_type f(value_type)) const; 105*58b9f456SAndroid Build Coastguard Worker valarray apply(value_type f(const value_type&)) const; 106*58b9f456SAndroid Build Coastguard Worker void resize(size_t n, value_type x = value_type()); 107*58b9f456SAndroid Build Coastguard Worker}; 108*58b9f456SAndroid Build Coastguard Worker 109*58b9f456SAndroid Build Coastguard Workerclass slice 110*58b9f456SAndroid Build Coastguard Worker{ 111*58b9f456SAndroid Build Coastguard Workerpublic: 112*58b9f456SAndroid Build Coastguard Worker slice(); 113*58b9f456SAndroid Build Coastguard Worker slice(size_t start, size_t size, size_t stride); 114*58b9f456SAndroid Build Coastguard Worker 115*58b9f456SAndroid Build Coastguard Worker size_t start() const; 116*58b9f456SAndroid Build Coastguard Worker size_t size() const; 117*58b9f456SAndroid Build Coastguard Worker size_t stride() const; 118*58b9f456SAndroid Build Coastguard Worker}; 119*58b9f456SAndroid Build Coastguard Worker 120*58b9f456SAndroid Build Coastguard Workertemplate <class T> 121*58b9f456SAndroid Build Coastguard Workerclass slice_array 122*58b9f456SAndroid Build Coastguard Worker{ 123*58b9f456SAndroid Build Coastguard Workerpublic: 124*58b9f456SAndroid Build Coastguard Worker typedef T value_type; 125*58b9f456SAndroid Build Coastguard Worker 126*58b9f456SAndroid Build Coastguard Worker const slice_array& operator=(const slice_array& sa) const; 127*58b9f456SAndroid Build Coastguard Worker void operator= (const valarray<value_type>& v) const; 128*58b9f456SAndroid Build Coastguard Worker void operator*= (const valarray<value_type>& v) const; 129*58b9f456SAndroid Build Coastguard Worker void operator/= (const valarray<value_type>& v) const; 130*58b9f456SAndroid Build Coastguard Worker void operator%= (const valarray<value_type>& v) const; 131*58b9f456SAndroid Build Coastguard Worker void operator+= (const valarray<value_type>& v) const; 132*58b9f456SAndroid Build Coastguard Worker void operator-= (const valarray<value_type>& v) const; 133*58b9f456SAndroid Build Coastguard Worker void operator^= (const valarray<value_type>& v) const; 134*58b9f456SAndroid Build Coastguard Worker void operator&= (const valarray<value_type>& v) const; 135*58b9f456SAndroid Build Coastguard Worker void operator|= (const valarray<value_type>& v) const; 136*58b9f456SAndroid Build Coastguard Worker void operator<<=(const valarray<value_type>& v) const; 137*58b9f456SAndroid Build Coastguard Worker void operator>>=(const valarray<value_type>& v) const; 138*58b9f456SAndroid Build Coastguard Worker 139*58b9f456SAndroid Build Coastguard Worker void operator=(const value_type& x) const; 140*58b9f456SAndroid Build Coastguard Worker 141*58b9f456SAndroid Build Coastguard Worker slice_array() = delete; 142*58b9f456SAndroid Build Coastguard Worker}; 143*58b9f456SAndroid Build Coastguard Worker 144*58b9f456SAndroid Build Coastguard Workerclass gslice 145*58b9f456SAndroid Build Coastguard Worker{ 146*58b9f456SAndroid Build Coastguard Workerpublic: 147*58b9f456SAndroid Build Coastguard Worker gslice(); 148*58b9f456SAndroid Build Coastguard Worker gslice(size_t start, const valarray<size_t>& size, 149*58b9f456SAndroid Build Coastguard Worker const valarray<size_t>& stride); 150*58b9f456SAndroid Build Coastguard Worker 151*58b9f456SAndroid Build Coastguard Worker size_t start() const; 152*58b9f456SAndroid Build Coastguard Worker valarray<size_t> size() const; 153*58b9f456SAndroid Build Coastguard Worker valarray<size_t> stride() const; 154*58b9f456SAndroid Build Coastguard Worker}; 155*58b9f456SAndroid Build Coastguard Worker 156*58b9f456SAndroid Build Coastguard Workertemplate <class T> 157*58b9f456SAndroid Build Coastguard Workerclass gslice_array 158*58b9f456SAndroid Build Coastguard Worker{ 159*58b9f456SAndroid Build Coastguard Workerpublic: 160*58b9f456SAndroid Build Coastguard Worker typedef T value_type; 161*58b9f456SAndroid Build Coastguard Worker 162*58b9f456SAndroid Build Coastguard Worker void operator= (const valarray<value_type>& v) const; 163*58b9f456SAndroid Build Coastguard Worker void operator*= (const valarray<value_type>& v) const; 164*58b9f456SAndroid Build Coastguard Worker void operator/= (const valarray<value_type>& v) const; 165*58b9f456SAndroid Build Coastguard Worker void operator%= (const valarray<value_type>& v) const; 166*58b9f456SAndroid Build Coastguard Worker void operator+= (const valarray<value_type>& v) const; 167*58b9f456SAndroid Build Coastguard Worker void operator-= (const valarray<value_type>& v) const; 168*58b9f456SAndroid Build Coastguard Worker void operator^= (const valarray<value_type>& v) const; 169*58b9f456SAndroid Build Coastguard Worker void operator&= (const valarray<value_type>& v) const; 170*58b9f456SAndroid Build Coastguard Worker void operator|= (const valarray<value_type>& v) const; 171*58b9f456SAndroid Build Coastguard Worker void operator<<=(const valarray<value_type>& v) const; 172*58b9f456SAndroid Build Coastguard Worker void operator>>=(const valarray<value_type>& v) const; 173*58b9f456SAndroid Build Coastguard Worker 174*58b9f456SAndroid Build Coastguard Worker gslice_array(const gslice_array& ga); 175*58b9f456SAndroid Build Coastguard Worker ~gslice_array(); 176*58b9f456SAndroid Build Coastguard Worker const gslice_array& operator=(const gslice_array& ga) const; 177*58b9f456SAndroid Build Coastguard Worker void operator=(const value_type& x) const; 178*58b9f456SAndroid Build Coastguard Worker 179*58b9f456SAndroid Build Coastguard Worker gslice_array() = delete; 180*58b9f456SAndroid Build Coastguard Worker}; 181*58b9f456SAndroid Build Coastguard Worker 182*58b9f456SAndroid Build Coastguard Workertemplate <class T> 183*58b9f456SAndroid Build Coastguard Workerclass mask_array 184*58b9f456SAndroid Build Coastguard Worker{ 185*58b9f456SAndroid Build Coastguard Workerpublic: 186*58b9f456SAndroid Build Coastguard Worker typedef T value_type; 187*58b9f456SAndroid Build Coastguard Worker 188*58b9f456SAndroid Build Coastguard Worker void operator= (const valarray<value_type>& v) const; 189*58b9f456SAndroid Build Coastguard Worker void operator*= (const valarray<value_type>& v) const; 190*58b9f456SAndroid Build Coastguard Worker void operator/= (const valarray<value_type>& v) const; 191*58b9f456SAndroid Build Coastguard Worker void operator%= (const valarray<value_type>& v) const; 192*58b9f456SAndroid Build Coastguard Worker void operator+= (const valarray<value_type>& v) const; 193*58b9f456SAndroid Build Coastguard Worker void operator-= (const valarray<value_type>& v) const; 194*58b9f456SAndroid Build Coastguard Worker void operator^= (const valarray<value_type>& v) const; 195*58b9f456SAndroid Build Coastguard Worker void operator&= (const valarray<value_type>& v) const; 196*58b9f456SAndroid Build Coastguard Worker void operator|= (const valarray<value_type>& v) const; 197*58b9f456SAndroid Build Coastguard Worker void operator<<=(const valarray<value_type>& v) const; 198*58b9f456SAndroid Build Coastguard Worker void operator>>=(const valarray<value_type>& v) const; 199*58b9f456SAndroid Build Coastguard Worker 200*58b9f456SAndroid Build Coastguard Worker mask_array(const mask_array& ma); 201*58b9f456SAndroid Build Coastguard Worker ~mask_array(); 202*58b9f456SAndroid Build Coastguard Worker const mask_array& operator=(const mask_array& ma) const; 203*58b9f456SAndroid Build Coastguard Worker void operator=(const value_type& x) const; 204*58b9f456SAndroid Build Coastguard Worker 205*58b9f456SAndroid Build Coastguard Worker mask_array() = delete; 206*58b9f456SAndroid Build Coastguard Worker}; 207*58b9f456SAndroid Build Coastguard Worker 208*58b9f456SAndroid Build Coastguard Workertemplate <class T> 209*58b9f456SAndroid Build Coastguard Workerclass indirect_array 210*58b9f456SAndroid Build Coastguard Worker{ 211*58b9f456SAndroid Build Coastguard Workerpublic: 212*58b9f456SAndroid Build Coastguard Worker typedef T value_type; 213*58b9f456SAndroid Build Coastguard Worker 214*58b9f456SAndroid Build Coastguard Worker void operator= (const valarray<value_type>& v) const; 215*58b9f456SAndroid Build Coastguard Worker void operator*= (const valarray<value_type>& v) const; 216*58b9f456SAndroid Build Coastguard Worker void operator/= (const valarray<value_type>& v) const; 217*58b9f456SAndroid Build Coastguard Worker void operator%= (const valarray<value_type>& v) const; 218*58b9f456SAndroid Build Coastguard Worker void operator+= (const valarray<value_type>& v) const; 219*58b9f456SAndroid Build Coastguard Worker void operator-= (const valarray<value_type>& v) const; 220*58b9f456SAndroid Build Coastguard Worker void operator^= (const valarray<value_type>& v) const; 221*58b9f456SAndroid Build Coastguard Worker void operator&= (const valarray<value_type>& v) const; 222*58b9f456SAndroid Build Coastguard Worker void operator|= (const valarray<value_type>& v) const; 223*58b9f456SAndroid Build Coastguard Worker void operator<<=(const valarray<value_type>& v) const; 224*58b9f456SAndroid Build Coastguard Worker void operator>>=(const valarray<value_type>& v) const; 225*58b9f456SAndroid Build Coastguard Worker 226*58b9f456SAndroid Build Coastguard Worker indirect_array(const indirect_array& ia); 227*58b9f456SAndroid Build Coastguard Worker ~indirect_array(); 228*58b9f456SAndroid Build Coastguard Worker const indirect_array& operator=(const indirect_array& ia) const; 229*58b9f456SAndroid Build Coastguard Worker void operator=(const value_type& x) const; 230*58b9f456SAndroid Build Coastguard Worker 231*58b9f456SAndroid Build Coastguard Worker indirect_array() = delete; 232*58b9f456SAndroid Build Coastguard Worker}; 233*58b9f456SAndroid Build Coastguard Worker 234*58b9f456SAndroid Build Coastguard Workertemplate<class T> void swap(valarray<T>& x, valarray<T>& y) noexcept; 235*58b9f456SAndroid Build Coastguard Worker 236*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator* (const valarray<T>& x, const valarray<T>& y); 237*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator* (const valarray<T>& x, const T& y); 238*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator* (const T& x, const valarray<T>& y); 239*58b9f456SAndroid Build Coastguard Worker 240*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator/ (const valarray<T>& x, const valarray<T>& y); 241*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator/ (const valarray<T>& x, const T& y); 242*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator/ (const T& x, const valarray<T>& y); 243*58b9f456SAndroid Build Coastguard Worker 244*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator% (const valarray<T>& x, const valarray<T>& y); 245*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator% (const valarray<T>& x, const T& y); 246*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator% (const T& x, const valarray<T>& y); 247*58b9f456SAndroid Build Coastguard Worker 248*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator+ (const valarray<T>& x, const valarray<T>& y); 249*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator+ (const valarray<T>& x, const T& y); 250*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator+ (const T& x, const valarray<T>& y); 251*58b9f456SAndroid Build Coastguard Worker 252*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator- (const valarray<T>& x, const valarray<T>& y); 253*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator- (const valarray<T>& x, const T& y); 254*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator- (const T& x, const valarray<T>& y); 255*58b9f456SAndroid Build Coastguard Worker 256*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator^ (const valarray<T>& x, const valarray<T>& y); 257*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator^ (const valarray<T>& x, const T& y); 258*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator^ (const T& x, const valarray<T>& y); 259*58b9f456SAndroid Build Coastguard Worker 260*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator& (const valarray<T>& x, const valarray<T>& y); 261*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator& (const valarray<T>& x, const T& y); 262*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator& (const T& x, const valarray<T>& y); 263*58b9f456SAndroid Build Coastguard Worker 264*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator| (const valarray<T>& x, const valarray<T>& y); 265*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator| (const valarray<T>& x, const T& y); 266*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator| (const T& x, const valarray<T>& y); 267*58b9f456SAndroid Build Coastguard Worker 268*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator<<(const valarray<T>& x, const valarray<T>& y); 269*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator<<(const valarray<T>& x, const T& y); 270*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator<<(const T& x, const valarray<T>& y); 271*58b9f456SAndroid Build Coastguard Worker 272*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator>>(const valarray<T>& x, const valarray<T>& y); 273*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator>>(const valarray<T>& x, const T& y); 274*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> operator>>(const T& x, const valarray<T>& y); 275*58b9f456SAndroid Build Coastguard Worker 276*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator&&(const valarray<T>& x, const valarray<T>& y); 277*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator&&(const valarray<T>& x, const T& y); 278*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator&&(const T& x, const valarray<T>& y); 279*58b9f456SAndroid Build Coastguard Worker 280*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator||(const valarray<T>& x, const valarray<T>& y); 281*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator||(const valarray<T>& x, const T& y); 282*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator||(const T& x, const valarray<T>& y); 283*58b9f456SAndroid Build Coastguard Worker 284*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator==(const valarray<T>& x, const valarray<T>& y); 285*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator==(const valarray<T>& x, const T& y); 286*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator==(const T& x, const valarray<T>& y); 287*58b9f456SAndroid Build Coastguard Worker 288*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator!=(const valarray<T>& x, const valarray<T>& y); 289*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator!=(const valarray<T>& x, const T& y); 290*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator!=(const T& x, const valarray<T>& y); 291*58b9f456SAndroid Build Coastguard Worker 292*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator< (const valarray<T>& x, const valarray<T>& y); 293*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator< (const valarray<T>& x, const T& y); 294*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator< (const T& x, const valarray<T>& y); 295*58b9f456SAndroid Build Coastguard Worker 296*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator> (const valarray<T>& x, const valarray<T>& y); 297*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator> (const valarray<T>& x, const T& y); 298*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator> (const T& x, const valarray<T>& y); 299*58b9f456SAndroid Build Coastguard Worker 300*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator<=(const valarray<T>& x, const valarray<T>& y); 301*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator<=(const valarray<T>& x, const T& y); 302*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator<=(const T& x, const valarray<T>& y); 303*58b9f456SAndroid Build Coastguard Worker 304*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator>=(const valarray<T>& x, const valarray<T>& y); 305*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator>=(const valarray<T>& x, const T& y); 306*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<bool> operator>=(const T& x, const valarray<T>& y); 307*58b9f456SAndroid Build Coastguard Worker 308*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> abs (const valarray<T>& x); 309*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> acos (const valarray<T>& x); 310*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> asin (const valarray<T>& x); 311*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> atan (const valarray<T>& x); 312*58b9f456SAndroid Build Coastguard Worker 313*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> atan2(const valarray<T>& x, const valarray<T>& y); 314*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> atan2(const valarray<T>& x, const T& y); 315*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> atan2(const T& x, const valarray<T>& y); 316*58b9f456SAndroid Build Coastguard Worker 317*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> cos (const valarray<T>& x); 318*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> cosh (const valarray<T>& x); 319*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> exp (const valarray<T>& x); 320*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> log (const valarray<T>& x); 321*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> log10(const valarray<T>& x); 322*58b9f456SAndroid Build Coastguard Worker 323*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> pow(const valarray<T>& x, const valarray<T>& y); 324*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> pow(const valarray<T>& x, const T& y); 325*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> pow(const T& x, const valarray<T>& y); 326*58b9f456SAndroid Build Coastguard Worker 327*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> sin (const valarray<T>& x); 328*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> sinh (const valarray<T>& x); 329*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> sqrt (const valarray<T>& x); 330*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> tan (const valarray<T>& x); 331*58b9f456SAndroid Build Coastguard Workertemplate<class T> valarray<T> tanh (const valarray<T>& x); 332*58b9f456SAndroid Build Coastguard Worker 333*58b9f456SAndroid Build Coastguard Workertemplate <class T> unspecified1 begin(valarray<T>& v); 334*58b9f456SAndroid Build Coastguard Workertemplate <class T> unspecified2 begin(const valarray<T>& v); 335*58b9f456SAndroid Build Coastguard Workertemplate <class T> unspecified1 end(valarray<T>& v); 336*58b9f456SAndroid Build Coastguard Workertemplate <class T> unspecified2 end(const valarray<T>& v); 337*58b9f456SAndroid Build Coastguard Worker 338*58b9f456SAndroid Build Coastguard Worker} // std 339*58b9f456SAndroid Build Coastguard Worker 340*58b9f456SAndroid Build Coastguard Worker*/ 341*58b9f456SAndroid Build Coastguard Worker 342*58b9f456SAndroid Build Coastguard Worker#include <__config> 343*58b9f456SAndroid Build Coastguard Worker#include <cstddef> 344*58b9f456SAndroid Build Coastguard Worker#include <cmath> 345*58b9f456SAndroid Build Coastguard Worker#include <initializer_list> 346*58b9f456SAndroid Build Coastguard Worker#include <algorithm> 347*58b9f456SAndroid Build Coastguard Worker#include <functional> 348*58b9f456SAndroid Build Coastguard Worker#include <new> 349*58b9f456SAndroid Build Coastguard Worker 350*58b9f456SAndroid Build Coastguard Worker#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 351*58b9f456SAndroid Build Coastguard Worker#pragma GCC system_header 352*58b9f456SAndroid Build Coastguard Worker#endif 353*58b9f456SAndroid Build Coastguard Worker 354*58b9f456SAndroid Build Coastguard Worker_LIBCPP_PUSH_MACROS 355*58b9f456SAndroid Build Coastguard Worker#include <__undef_macros> 356*58b9f456SAndroid Build Coastguard Worker 357*58b9f456SAndroid Build Coastguard Worker 358*58b9f456SAndroid Build Coastguard Worker_LIBCPP_BEGIN_NAMESPACE_STD 359*58b9f456SAndroid Build Coastguard Worker 360*58b9f456SAndroid Build Coastguard Workertemplate<class _Tp> class _LIBCPP_TEMPLATE_VIS valarray; 361*58b9f456SAndroid Build Coastguard Worker 362*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS slice 363*58b9f456SAndroid Build Coastguard Worker{ 364*58b9f456SAndroid Build Coastguard Worker size_t __start_; 365*58b9f456SAndroid Build Coastguard Worker size_t __size_; 366*58b9f456SAndroid Build Coastguard Worker size_t __stride_; 367*58b9f456SAndroid Build Coastguard Workerpublic: 368*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 369*58b9f456SAndroid Build Coastguard Worker slice() 370*58b9f456SAndroid Build Coastguard Worker : __start_(0), 371*58b9f456SAndroid Build Coastguard Worker __size_(0), 372*58b9f456SAndroid Build Coastguard Worker __stride_(0) 373*58b9f456SAndroid Build Coastguard Worker {} 374*58b9f456SAndroid Build Coastguard Worker 375*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 376*58b9f456SAndroid Build Coastguard Worker slice(size_t __start, size_t __size, size_t __stride) 377*58b9f456SAndroid Build Coastguard Worker : __start_(__start), 378*58b9f456SAndroid Build Coastguard Worker __size_(__size), 379*58b9f456SAndroid Build Coastguard Worker __stride_(__stride) 380*58b9f456SAndroid Build Coastguard Worker {} 381*58b9f456SAndroid Build Coastguard Worker 382*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY size_t start() const {return __start_;} 383*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY size_t size() const {return __size_;} 384*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY size_t stride() const {return __stride_;} 385*58b9f456SAndroid Build Coastguard Worker}; 386*58b9f456SAndroid Build Coastguard Worker 387*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> class _LIBCPP_TEMPLATE_VIS slice_array; 388*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TYPE_VIS gslice; 389*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> class _LIBCPP_TEMPLATE_VIS gslice_array; 390*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> class _LIBCPP_TEMPLATE_VIS mask_array; 391*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> class _LIBCPP_TEMPLATE_VIS indirect_array; 392*58b9f456SAndroid Build Coastguard Worker 393*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 394*58b9f456SAndroid Build Coastguard Worker_LIBCPP_INLINE_VISIBILITY 395*58b9f456SAndroid Build Coastguard Worker_Tp* 396*58b9f456SAndroid Build Coastguard Workerbegin(valarray<_Tp>& __v); 397*58b9f456SAndroid Build Coastguard Worker 398*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 399*58b9f456SAndroid Build Coastguard Worker_LIBCPP_INLINE_VISIBILITY 400*58b9f456SAndroid Build Coastguard Workerconst _Tp* 401*58b9f456SAndroid Build Coastguard Workerbegin(const valarray<_Tp>& __v); 402*58b9f456SAndroid Build Coastguard Worker 403*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 404*58b9f456SAndroid Build Coastguard Worker_LIBCPP_INLINE_VISIBILITY 405*58b9f456SAndroid Build Coastguard Worker_Tp* 406*58b9f456SAndroid Build Coastguard Workerend(valarray<_Tp>& __v); 407*58b9f456SAndroid Build Coastguard Worker 408*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 409*58b9f456SAndroid Build Coastguard Worker_LIBCPP_INLINE_VISIBILITY 410*58b9f456SAndroid Build Coastguard Workerconst _Tp* 411*58b9f456SAndroid Build Coastguard Workerend(const valarray<_Tp>& __v); 412*58b9f456SAndroid Build Coastguard Worker 413*58b9f456SAndroid Build Coastguard Workertemplate <class _Op, class _A0> 414*58b9f456SAndroid Build Coastguard Workerstruct _UnaryOp 415*58b9f456SAndroid Build Coastguard Worker{ 416*58b9f456SAndroid Build Coastguard Worker typedef typename _Op::result_type result_type; 417*58b9f456SAndroid Build Coastguard Worker typedef typename _A0::value_type value_type; 418*58b9f456SAndroid Build Coastguard Worker 419*58b9f456SAndroid Build Coastguard Worker _Op __op_; 420*58b9f456SAndroid Build Coastguard Worker _A0 __a0_; 421*58b9f456SAndroid Build Coastguard Worker 422*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 423*58b9f456SAndroid Build Coastguard Worker _UnaryOp(const _Op& __op, const _A0& __a0) : __op_(__op), __a0_(__a0) {} 424*58b9f456SAndroid Build Coastguard Worker 425*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 426*58b9f456SAndroid Build Coastguard Worker result_type operator[](size_t __i) const {return __op_(__a0_[__i]);} 427*58b9f456SAndroid Build Coastguard Worker 428*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 429*58b9f456SAndroid Build Coastguard Worker size_t size() const {return __a0_.size();} 430*58b9f456SAndroid Build Coastguard Worker}; 431*58b9f456SAndroid Build Coastguard Worker 432*58b9f456SAndroid Build Coastguard Workertemplate <class _Op, class _A0, class _A1> 433*58b9f456SAndroid Build Coastguard Workerstruct _BinaryOp 434*58b9f456SAndroid Build Coastguard Worker{ 435*58b9f456SAndroid Build Coastguard Worker typedef typename _Op::result_type result_type; 436*58b9f456SAndroid Build Coastguard Worker typedef typename _A0::value_type value_type; 437*58b9f456SAndroid Build Coastguard Worker 438*58b9f456SAndroid Build Coastguard Worker _Op __op_; 439*58b9f456SAndroid Build Coastguard Worker _A0 __a0_; 440*58b9f456SAndroid Build Coastguard Worker _A1 __a1_; 441*58b9f456SAndroid Build Coastguard Worker 442*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 443*58b9f456SAndroid Build Coastguard Worker _BinaryOp(const _Op& __op, const _A0& __a0, const _A1& __a1) 444*58b9f456SAndroid Build Coastguard Worker : __op_(__op), __a0_(__a0), __a1_(__a1) {} 445*58b9f456SAndroid Build Coastguard Worker 446*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 447*58b9f456SAndroid Build Coastguard Worker value_type operator[](size_t __i) const {return __op_(__a0_[__i], __a1_[__i]);} 448*58b9f456SAndroid Build Coastguard Worker 449*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 450*58b9f456SAndroid Build Coastguard Worker size_t size() const {return __a0_.size();} 451*58b9f456SAndroid Build Coastguard Worker}; 452*58b9f456SAndroid Build Coastguard Worker 453*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 454*58b9f456SAndroid Build Coastguard Workerclass __scalar_expr 455*58b9f456SAndroid Build Coastguard Worker{ 456*58b9f456SAndroid Build Coastguard Workerpublic: 457*58b9f456SAndroid Build Coastguard Worker typedef _Tp value_type; 458*58b9f456SAndroid Build Coastguard Worker typedef const _Tp& result_type; 459*58b9f456SAndroid Build Coastguard Workerprivate: 460*58b9f456SAndroid Build Coastguard Worker const value_type& __t_; 461*58b9f456SAndroid Build Coastguard Worker size_t __s_; 462*58b9f456SAndroid Build Coastguard Workerpublic: 463*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 464*58b9f456SAndroid Build Coastguard Worker explicit __scalar_expr(const value_type& __t, size_t __s) : __t_(__t), __s_(__s) {} 465*58b9f456SAndroid Build Coastguard Worker 466*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 467*58b9f456SAndroid Build Coastguard Worker result_type operator[](size_t) const {return __t_;} 468*58b9f456SAndroid Build Coastguard Worker 469*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 470*58b9f456SAndroid Build Coastguard Worker size_t size() const {return __s_;} 471*58b9f456SAndroid Build Coastguard Worker}; 472*58b9f456SAndroid Build Coastguard Worker 473*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 474*58b9f456SAndroid Build Coastguard Workerstruct __unary_plus : unary_function<_Tp, _Tp> 475*58b9f456SAndroid Build Coastguard Worker{ 476*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 477*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x) const 478*58b9f456SAndroid Build Coastguard Worker {return +__x;} 479*58b9f456SAndroid Build Coastguard Worker}; 480*58b9f456SAndroid Build Coastguard Worker 481*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 482*58b9f456SAndroid Build Coastguard Workerstruct __bit_not : unary_function<_Tp, _Tp> 483*58b9f456SAndroid Build Coastguard Worker{ 484*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 485*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x) const 486*58b9f456SAndroid Build Coastguard Worker {return ~__x;} 487*58b9f456SAndroid Build Coastguard Worker}; 488*58b9f456SAndroid Build Coastguard Worker 489*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 490*58b9f456SAndroid Build Coastguard Workerstruct __bit_shift_left : binary_function<_Tp, _Tp, _Tp> 491*58b9f456SAndroid Build Coastguard Worker{ 492*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 493*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x, const _Tp& __y) const 494*58b9f456SAndroid Build Coastguard Worker {return __x << __y;} 495*58b9f456SAndroid Build Coastguard Worker}; 496*58b9f456SAndroid Build Coastguard Worker 497*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 498*58b9f456SAndroid Build Coastguard Workerstruct __bit_shift_right : binary_function<_Tp, _Tp, _Tp> 499*58b9f456SAndroid Build Coastguard Worker{ 500*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 501*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x, const _Tp& __y) const 502*58b9f456SAndroid Build Coastguard Worker {return __x >> __y;} 503*58b9f456SAndroid Build Coastguard Worker}; 504*58b9f456SAndroid Build Coastguard Worker 505*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Fp> 506*58b9f456SAndroid Build Coastguard Workerstruct __apply_expr : unary_function<_Tp, _Tp> 507*58b9f456SAndroid Build Coastguard Worker{ 508*58b9f456SAndroid Build Coastguard Workerprivate: 509*58b9f456SAndroid Build Coastguard Worker _Fp __f_; 510*58b9f456SAndroid Build Coastguard Workerpublic: 511*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 512*58b9f456SAndroid Build Coastguard Worker explicit __apply_expr(_Fp __f) : __f_(__f) {} 513*58b9f456SAndroid Build Coastguard Worker 514*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 515*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x) const 516*58b9f456SAndroid Build Coastguard Worker {return __f_(__x);} 517*58b9f456SAndroid Build Coastguard Worker}; 518*58b9f456SAndroid Build Coastguard Worker 519*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 520*58b9f456SAndroid Build Coastguard Workerstruct __abs_expr : unary_function<_Tp, _Tp> 521*58b9f456SAndroid Build Coastguard Worker{ 522*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 523*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x) const 524*58b9f456SAndroid Build Coastguard Worker {return abs(__x);} 525*58b9f456SAndroid Build Coastguard Worker}; 526*58b9f456SAndroid Build Coastguard Worker 527*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 528*58b9f456SAndroid Build Coastguard Workerstruct __acos_expr : unary_function<_Tp, _Tp> 529*58b9f456SAndroid Build Coastguard Worker{ 530*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 531*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x) const 532*58b9f456SAndroid Build Coastguard Worker {return acos(__x);} 533*58b9f456SAndroid Build Coastguard Worker}; 534*58b9f456SAndroid Build Coastguard Worker 535*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 536*58b9f456SAndroid Build Coastguard Workerstruct __asin_expr : unary_function<_Tp, _Tp> 537*58b9f456SAndroid Build Coastguard Worker{ 538*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 539*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x) const 540*58b9f456SAndroid Build Coastguard Worker {return asin(__x);} 541*58b9f456SAndroid Build Coastguard Worker}; 542*58b9f456SAndroid Build Coastguard Worker 543*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 544*58b9f456SAndroid Build Coastguard Workerstruct __atan_expr : unary_function<_Tp, _Tp> 545*58b9f456SAndroid Build Coastguard Worker{ 546*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 547*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x) const 548*58b9f456SAndroid Build Coastguard Worker {return atan(__x);} 549*58b9f456SAndroid Build Coastguard Worker}; 550*58b9f456SAndroid Build Coastguard Worker 551*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 552*58b9f456SAndroid Build Coastguard Workerstruct __atan2_expr : binary_function<_Tp, _Tp, _Tp> 553*58b9f456SAndroid Build Coastguard Worker{ 554*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 555*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x, const _Tp& __y) const 556*58b9f456SAndroid Build Coastguard Worker {return atan2(__x, __y);} 557*58b9f456SAndroid Build Coastguard Worker}; 558*58b9f456SAndroid Build Coastguard Worker 559*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 560*58b9f456SAndroid Build Coastguard Workerstruct __cos_expr : unary_function<_Tp, _Tp> 561*58b9f456SAndroid Build Coastguard Worker{ 562*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 563*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x) const 564*58b9f456SAndroid Build Coastguard Worker {return cos(__x);} 565*58b9f456SAndroid Build Coastguard Worker}; 566*58b9f456SAndroid Build Coastguard Worker 567*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 568*58b9f456SAndroid Build Coastguard Workerstruct __cosh_expr : unary_function<_Tp, _Tp> 569*58b9f456SAndroid Build Coastguard Worker{ 570*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 571*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x) const 572*58b9f456SAndroid Build Coastguard Worker {return cosh(__x);} 573*58b9f456SAndroid Build Coastguard Worker}; 574*58b9f456SAndroid Build Coastguard Worker 575*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 576*58b9f456SAndroid Build Coastguard Workerstruct __exp_expr : unary_function<_Tp, _Tp> 577*58b9f456SAndroid Build Coastguard Worker{ 578*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 579*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x) const 580*58b9f456SAndroid Build Coastguard Worker {return exp(__x);} 581*58b9f456SAndroid Build Coastguard Worker}; 582*58b9f456SAndroid Build Coastguard Worker 583*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 584*58b9f456SAndroid Build Coastguard Workerstruct __log_expr : unary_function<_Tp, _Tp> 585*58b9f456SAndroid Build Coastguard Worker{ 586*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 587*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x) const 588*58b9f456SAndroid Build Coastguard Worker {return log(__x);} 589*58b9f456SAndroid Build Coastguard Worker}; 590*58b9f456SAndroid Build Coastguard Worker 591*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 592*58b9f456SAndroid Build Coastguard Workerstruct __log10_expr : unary_function<_Tp, _Tp> 593*58b9f456SAndroid Build Coastguard Worker{ 594*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 595*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x) const 596*58b9f456SAndroid Build Coastguard Worker {return log10(__x);} 597*58b9f456SAndroid Build Coastguard Worker}; 598*58b9f456SAndroid Build Coastguard Worker 599*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 600*58b9f456SAndroid Build Coastguard Workerstruct __pow_expr : binary_function<_Tp, _Tp, _Tp> 601*58b9f456SAndroid Build Coastguard Worker{ 602*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 603*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x, const _Tp& __y) const 604*58b9f456SAndroid Build Coastguard Worker {return pow(__x, __y);} 605*58b9f456SAndroid Build Coastguard Worker}; 606*58b9f456SAndroid Build Coastguard Worker 607*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 608*58b9f456SAndroid Build Coastguard Workerstruct __sin_expr : unary_function<_Tp, _Tp> 609*58b9f456SAndroid Build Coastguard Worker{ 610*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 611*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x) const 612*58b9f456SAndroid Build Coastguard Worker {return sin(__x);} 613*58b9f456SAndroid Build Coastguard Worker}; 614*58b9f456SAndroid Build Coastguard Worker 615*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 616*58b9f456SAndroid Build Coastguard Workerstruct __sinh_expr : unary_function<_Tp, _Tp> 617*58b9f456SAndroid Build Coastguard Worker{ 618*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 619*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x) const 620*58b9f456SAndroid Build Coastguard Worker {return sinh(__x);} 621*58b9f456SAndroid Build Coastguard Worker}; 622*58b9f456SAndroid Build Coastguard Worker 623*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 624*58b9f456SAndroid Build Coastguard Workerstruct __sqrt_expr : unary_function<_Tp, _Tp> 625*58b9f456SAndroid Build Coastguard Worker{ 626*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 627*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x) const 628*58b9f456SAndroid Build Coastguard Worker {return sqrt(__x);} 629*58b9f456SAndroid Build Coastguard Worker}; 630*58b9f456SAndroid Build Coastguard Worker 631*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 632*58b9f456SAndroid Build Coastguard Workerstruct __tan_expr : unary_function<_Tp, _Tp> 633*58b9f456SAndroid Build Coastguard Worker{ 634*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 635*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x) const 636*58b9f456SAndroid Build Coastguard Worker {return tan(__x);} 637*58b9f456SAndroid Build Coastguard Worker}; 638*58b9f456SAndroid Build Coastguard Worker 639*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 640*58b9f456SAndroid Build Coastguard Workerstruct __tanh_expr : unary_function<_Tp, _Tp> 641*58b9f456SAndroid Build Coastguard Worker{ 642*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 643*58b9f456SAndroid Build Coastguard Worker _Tp operator()(const _Tp& __x) const 644*58b9f456SAndroid Build Coastguard Worker {return tanh(__x);} 645*58b9f456SAndroid Build Coastguard Worker}; 646*58b9f456SAndroid Build Coastguard Worker 647*58b9f456SAndroid Build Coastguard Workertemplate <class _ValExpr> 648*58b9f456SAndroid Build Coastguard Workerclass __slice_expr 649*58b9f456SAndroid Build Coastguard Worker{ 650*58b9f456SAndroid Build Coastguard Worker typedef typename remove_reference<_ValExpr>::type _RmExpr; 651*58b9f456SAndroid Build Coastguard Workerpublic: 652*58b9f456SAndroid Build Coastguard Worker typedef typename _RmExpr::value_type value_type; 653*58b9f456SAndroid Build Coastguard Worker typedef value_type result_type; 654*58b9f456SAndroid Build Coastguard Worker 655*58b9f456SAndroid Build Coastguard Workerprivate: 656*58b9f456SAndroid Build Coastguard Worker _ValExpr __expr_; 657*58b9f456SAndroid Build Coastguard Worker size_t __start_; 658*58b9f456SAndroid Build Coastguard Worker size_t __size_; 659*58b9f456SAndroid Build Coastguard Worker size_t __stride_; 660*58b9f456SAndroid Build Coastguard Worker 661*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 662*58b9f456SAndroid Build Coastguard Worker __slice_expr(const slice& __sl, const _RmExpr& __e) 663*58b9f456SAndroid Build Coastguard Worker : __expr_(__e), 664*58b9f456SAndroid Build Coastguard Worker __start_(__sl.start()), 665*58b9f456SAndroid Build Coastguard Worker __size_(__sl.size()), 666*58b9f456SAndroid Build Coastguard Worker __stride_(__sl.stride()) 667*58b9f456SAndroid Build Coastguard Worker {} 668*58b9f456SAndroid Build Coastguard Workerpublic: 669*58b9f456SAndroid Build Coastguard Worker 670*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 671*58b9f456SAndroid Build Coastguard Worker result_type operator[](size_t __i) const 672*58b9f456SAndroid Build Coastguard Worker {return __expr_[__start_ + __i * __stride_];} 673*58b9f456SAndroid Build Coastguard Worker 674*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 675*58b9f456SAndroid Build Coastguard Worker size_t size() const {return __size_;} 676*58b9f456SAndroid Build Coastguard Worker 677*58b9f456SAndroid Build Coastguard Worker template <class> friend class _LIBCPP_TEMPLATE_VIS valarray; 678*58b9f456SAndroid Build Coastguard Worker}; 679*58b9f456SAndroid Build Coastguard Worker 680*58b9f456SAndroid Build Coastguard Workertemplate <class _ValExpr> 681*58b9f456SAndroid Build Coastguard Workerclass __mask_expr; 682*58b9f456SAndroid Build Coastguard Worker 683*58b9f456SAndroid Build Coastguard Workertemplate <class _ValExpr> 684*58b9f456SAndroid Build Coastguard Workerclass __indirect_expr; 685*58b9f456SAndroid Build Coastguard Worker 686*58b9f456SAndroid Build Coastguard Workertemplate <class _ValExpr> 687*58b9f456SAndroid Build Coastguard Workerclass __shift_expr 688*58b9f456SAndroid Build Coastguard Worker{ 689*58b9f456SAndroid Build Coastguard Worker typedef typename remove_reference<_ValExpr>::type _RmExpr; 690*58b9f456SAndroid Build Coastguard Workerpublic: 691*58b9f456SAndroid Build Coastguard Worker typedef typename _RmExpr::value_type value_type; 692*58b9f456SAndroid Build Coastguard Worker typedef value_type result_type; 693*58b9f456SAndroid Build Coastguard Worker 694*58b9f456SAndroid Build Coastguard Workerprivate: 695*58b9f456SAndroid Build Coastguard Worker _ValExpr __expr_; 696*58b9f456SAndroid Build Coastguard Worker size_t __size_; 697*58b9f456SAndroid Build Coastguard Worker ptrdiff_t __ul_; 698*58b9f456SAndroid Build Coastguard Worker ptrdiff_t __sn_; 699*58b9f456SAndroid Build Coastguard Worker ptrdiff_t __n_; 700*58b9f456SAndroid Build Coastguard Worker static const ptrdiff_t _Np = static_cast<ptrdiff_t>( 701*58b9f456SAndroid Build Coastguard Worker sizeof(ptrdiff_t) * __CHAR_BIT__ - 1); 702*58b9f456SAndroid Build Coastguard Worker 703*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 704*58b9f456SAndroid Build Coastguard Worker __shift_expr(int __n, const _RmExpr& __e) 705*58b9f456SAndroid Build Coastguard Worker : __expr_(__e), 706*58b9f456SAndroid Build Coastguard Worker __size_(__e.size()), 707*58b9f456SAndroid Build Coastguard Worker __n_(__n) 708*58b9f456SAndroid Build Coastguard Worker { 709*58b9f456SAndroid Build Coastguard Worker ptrdiff_t __neg_n = static_cast<ptrdiff_t>(__n_ >> _Np); 710*58b9f456SAndroid Build Coastguard Worker __sn_ = __neg_n | static_cast<ptrdiff_t>(static_cast<size_t>(-__n_) >> _Np); 711*58b9f456SAndroid Build Coastguard Worker __ul_ = ((__size_ - __n_) & ~__neg_n) | ((__n_ + 1) & __neg_n); 712*58b9f456SAndroid Build Coastguard Worker } 713*58b9f456SAndroid Build Coastguard Workerpublic: 714*58b9f456SAndroid Build Coastguard Worker 715*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 716*58b9f456SAndroid Build Coastguard Worker result_type operator[](size_t __j) const 717*58b9f456SAndroid Build Coastguard Worker { 718*58b9f456SAndroid Build Coastguard Worker ptrdiff_t __i = static_cast<ptrdiff_t>(__j); 719*58b9f456SAndroid Build Coastguard Worker ptrdiff_t __m = (__sn_ * __i - __ul_) >> _Np; 720*58b9f456SAndroid Build Coastguard Worker return (__expr_[(__i + __n_) & __m] & __m) | (value_type() & ~__m); 721*58b9f456SAndroid Build Coastguard Worker } 722*58b9f456SAndroid Build Coastguard Worker 723*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 724*58b9f456SAndroid Build Coastguard Worker size_t size() const {return __size_;} 725*58b9f456SAndroid Build Coastguard Worker 726*58b9f456SAndroid Build Coastguard Worker template <class> friend class __val_expr; 727*58b9f456SAndroid Build Coastguard Worker}; 728*58b9f456SAndroid Build Coastguard Worker 729*58b9f456SAndroid Build Coastguard Workertemplate <class _ValExpr> 730*58b9f456SAndroid Build Coastguard Workerclass __cshift_expr 731*58b9f456SAndroid Build Coastguard Worker{ 732*58b9f456SAndroid Build Coastguard Worker typedef typename remove_reference<_ValExpr>::type _RmExpr; 733*58b9f456SAndroid Build Coastguard Workerpublic: 734*58b9f456SAndroid Build Coastguard Worker typedef typename _RmExpr::value_type value_type; 735*58b9f456SAndroid Build Coastguard Worker typedef value_type result_type; 736*58b9f456SAndroid Build Coastguard Worker 737*58b9f456SAndroid Build Coastguard Workerprivate: 738*58b9f456SAndroid Build Coastguard Worker _ValExpr __expr_; 739*58b9f456SAndroid Build Coastguard Worker size_t __size_; 740*58b9f456SAndroid Build Coastguard Worker size_t __m_; 741*58b9f456SAndroid Build Coastguard Worker size_t __o1_; 742*58b9f456SAndroid Build Coastguard Worker size_t __o2_; 743*58b9f456SAndroid Build Coastguard Worker 744*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 745*58b9f456SAndroid Build Coastguard Worker __cshift_expr(int __n, const _RmExpr& __e) 746*58b9f456SAndroid Build Coastguard Worker : __expr_(__e), 747*58b9f456SAndroid Build Coastguard Worker __size_(__e.size()) 748*58b9f456SAndroid Build Coastguard Worker { 749*58b9f456SAndroid Build Coastguard Worker __n %= static_cast<int>(__size_); 750*58b9f456SAndroid Build Coastguard Worker if (__n >= 0) 751*58b9f456SAndroid Build Coastguard Worker { 752*58b9f456SAndroid Build Coastguard Worker __m_ = __size_ - __n; 753*58b9f456SAndroid Build Coastguard Worker __o1_ = __n; 754*58b9f456SAndroid Build Coastguard Worker __o2_ = __n - __size_; 755*58b9f456SAndroid Build Coastguard Worker } 756*58b9f456SAndroid Build Coastguard Worker else 757*58b9f456SAndroid Build Coastguard Worker { 758*58b9f456SAndroid Build Coastguard Worker __m_ = -__n; 759*58b9f456SAndroid Build Coastguard Worker __o1_ = __n + __size_; 760*58b9f456SAndroid Build Coastguard Worker __o2_ = __n; 761*58b9f456SAndroid Build Coastguard Worker } 762*58b9f456SAndroid Build Coastguard Worker } 763*58b9f456SAndroid Build Coastguard Workerpublic: 764*58b9f456SAndroid Build Coastguard Worker 765*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 766*58b9f456SAndroid Build Coastguard Worker result_type operator[](size_t __i) const 767*58b9f456SAndroid Build Coastguard Worker { 768*58b9f456SAndroid Build Coastguard Worker if (__i < __m_) 769*58b9f456SAndroid Build Coastguard Worker return __expr_[__i + __o1_]; 770*58b9f456SAndroid Build Coastguard Worker return __expr_[__i + __o2_]; 771*58b9f456SAndroid Build Coastguard Worker } 772*58b9f456SAndroid Build Coastguard Worker 773*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 774*58b9f456SAndroid Build Coastguard Worker size_t size() const {return __size_;} 775*58b9f456SAndroid Build Coastguard Worker 776*58b9f456SAndroid Build Coastguard Worker template <class> friend class __val_expr; 777*58b9f456SAndroid Build Coastguard Worker}; 778*58b9f456SAndroid Build Coastguard Worker 779*58b9f456SAndroid Build Coastguard Workertemplate<class _ValExpr> 780*58b9f456SAndroid Build Coastguard Workerclass __val_expr; 781*58b9f456SAndroid Build Coastguard Worker 782*58b9f456SAndroid Build Coastguard Workertemplate<class _ValExpr> 783*58b9f456SAndroid Build Coastguard Workerstruct __is_val_expr : false_type {}; 784*58b9f456SAndroid Build Coastguard Worker 785*58b9f456SAndroid Build Coastguard Workertemplate<class _ValExpr> 786*58b9f456SAndroid Build Coastguard Workerstruct __is_val_expr<__val_expr<_ValExpr> > : true_type {}; 787*58b9f456SAndroid Build Coastguard Worker 788*58b9f456SAndroid Build Coastguard Workertemplate<class _Tp> 789*58b9f456SAndroid Build Coastguard Workerstruct __is_val_expr<valarray<_Tp> > : true_type {}; 790*58b9f456SAndroid Build Coastguard Worker 791*58b9f456SAndroid Build Coastguard Workertemplate<class _Tp> 792*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS valarray 793*58b9f456SAndroid Build Coastguard Worker{ 794*58b9f456SAndroid Build Coastguard Workerpublic: 795*58b9f456SAndroid Build Coastguard Worker typedef _Tp value_type; 796*58b9f456SAndroid Build Coastguard Worker typedef _Tp result_type; 797*58b9f456SAndroid Build Coastguard Worker 798*58b9f456SAndroid Build Coastguard Workerprivate: 799*58b9f456SAndroid Build Coastguard Worker value_type* __begin_; 800*58b9f456SAndroid Build Coastguard Worker value_type* __end_; 801*58b9f456SAndroid Build Coastguard Worker 802*58b9f456SAndroid Build Coastguard Workerpublic: 803*58b9f456SAndroid Build Coastguard Worker // construct/destroy: 804*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 805*58b9f456SAndroid Build Coastguard Worker valarray() : __begin_(0), __end_(0) {} 806*58b9f456SAndroid Build Coastguard Worker inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 807*58b9f456SAndroid Build Coastguard Worker explicit valarray(size_t __n); 808*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 809*58b9f456SAndroid Build Coastguard Worker valarray(const value_type& __x, size_t __n); 810*58b9f456SAndroid Build Coastguard Worker valarray(const value_type* __p, size_t __n); 811*58b9f456SAndroid Build Coastguard Worker valarray(const valarray& __v); 812*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 813*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 814*58b9f456SAndroid Build Coastguard Worker valarray(valarray&& __v) _NOEXCEPT; 815*58b9f456SAndroid Build Coastguard Worker valarray(initializer_list<value_type> __il); 816*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 817*58b9f456SAndroid Build Coastguard Worker valarray(const slice_array<value_type>& __sa); 818*58b9f456SAndroid Build Coastguard Worker valarray(const gslice_array<value_type>& __ga); 819*58b9f456SAndroid Build Coastguard Worker valarray(const mask_array<value_type>& __ma); 820*58b9f456SAndroid Build Coastguard Worker valarray(const indirect_array<value_type>& __ia); 821*58b9f456SAndroid Build Coastguard Worker inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 822*58b9f456SAndroid Build Coastguard Worker ~valarray(); 823*58b9f456SAndroid Build Coastguard Worker 824*58b9f456SAndroid Build Coastguard Worker // assignment: 825*58b9f456SAndroid Build Coastguard Worker valarray& operator=(const valarray& __v); 826*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 827*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 828*58b9f456SAndroid Build Coastguard Worker valarray& operator=(valarray&& __v) _NOEXCEPT; 829*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 830*58b9f456SAndroid Build Coastguard Worker valarray& operator=(initializer_list<value_type>); 831*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 832*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 833*58b9f456SAndroid Build Coastguard Worker valarray& operator=(const value_type& __x); 834*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 835*58b9f456SAndroid Build Coastguard Worker valarray& operator=(const slice_array<value_type>& __sa); 836*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 837*58b9f456SAndroid Build Coastguard Worker valarray& operator=(const gslice_array<value_type>& __ga); 838*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 839*58b9f456SAndroid Build Coastguard Worker valarray& operator=(const mask_array<value_type>& __ma); 840*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 841*58b9f456SAndroid Build Coastguard Worker valarray& operator=(const indirect_array<value_type>& __ia); 842*58b9f456SAndroid Build Coastguard Worker template <class _ValExpr> 843*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 844*58b9f456SAndroid Build Coastguard Worker valarray& operator=(const __val_expr<_ValExpr>& __v); 845*58b9f456SAndroid Build Coastguard Worker 846*58b9f456SAndroid Build Coastguard Worker // element access: 847*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 848*58b9f456SAndroid Build Coastguard Worker const value_type& operator[](size_t __i) const {return __begin_[__i];} 849*58b9f456SAndroid Build Coastguard Worker 850*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 851*58b9f456SAndroid Build Coastguard Worker value_type& operator[](size_t __i) {return __begin_[__i];} 852*58b9f456SAndroid Build Coastguard Worker 853*58b9f456SAndroid Build Coastguard Worker // subset operations: 854*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 855*58b9f456SAndroid Build Coastguard Worker __val_expr<__slice_expr<const valarray&> > operator[](slice __s) const; 856*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 857*58b9f456SAndroid Build Coastguard Worker slice_array<value_type> operator[](slice __s); 858*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 859*58b9f456SAndroid Build Coastguard Worker __val_expr<__indirect_expr<const valarray&> > operator[](const gslice& __gs) const; 860*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 861*58b9f456SAndroid Build Coastguard Worker gslice_array<value_type> operator[](const gslice& __gs); 862*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 863*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 864*58b9f456SAndroid Build Coastguard Worker __val_expr<__indirect_expr<const valarray&> > operator[](gslice&& __gs) const; 865*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 866*58b9f456SAndroid Build Coastguard Worker gslice_array<value_type> operator[](gslice&& __gs); 867*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 868*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 869*58b9f456SAndroid Build Coastguard Worker __val_expr<__mask_expr<const valarray&> > operator[](const valarray<bool>& __vb) const; 870*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 871*58b9f456SAndroid Build Coastguard Worker mask_array<value_type> operator[](const valarray<bool>& __vb); 872*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 873*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 874*58b9f456SAndroid Build Coastguard Worker __val_expr<__mask_expr<const valarray&> > operator[](valarray<bool>&& __vb) const; 875*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 876*58b9f456SAndroid Build Coastguard Worker mask_array<value_type> operator[](valarray<bool>&& __vb); 877*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 878*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 879*58b9f456SAndroid Build Coastguard Worker __val_expr<__indirect_expr<const valarray&> > operator[](const valarray<size_t>& __vs) const; 880*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 881*58b9f456SAndroid Build Coastguard Worker indirect_array<value_type> operator[](const valarray<size_t>& __vs); 882*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 883*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 884*58b9f456SAndroid Build Coastguard Worker __val_expr<__indirect_expr<const valarray&> > operator[](valarray<size_t>&& __vs) const; 885*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 886*58b9f456SAndroid Build Coastguard Worker indirect_array<value_type> operator[](valarray<size_t>&& __vs); 887*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 888*58b9f456SAndroid Build Coastguard Worker 889*58b9f456SAndroid Build Coastguard Worker // unary operators: 890*58b9f456SAndroid Build Coastguard Worker valarray operator+() const; 891*58b9f456SAndroid Build Coastguard Worker valarray operator-() const; 892*58b9f456SAndroid Build Coastguard Worker valarray operator~() const; 893*58b9f456SAndroid Build Coastguard Worker valarray<bool> operator!() const; 894*58b9f456SAndroid Build Coastguard Worker 895*58b9f456SAndroid Build Coastguard Worker // computed assignment: 896*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 897*58b9f456SAndroid Build Coastguard Worker valarray& operator*= (const value_type& __x); 898*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 899*58b9f456SAndroid Build Coastguard Worker valarray& operator/= (const value_type& __x); 900*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 901*58b9f456SAndroid Build Coastguard Worker valarray& operator%= (const value_type& __x); 902*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 903*58b9f456SAndroid Build Coastguard Worker valarray& operator+= (const value_type& __x); 904*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 905*58b9f456SAndroid Build Coastguard Worker valarray& operator-= (const value_type& __x); 906*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 907*58b9f456SAndroid Build Coastguard Worker valarray& operator^= (const value_type& __x); 908*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 909*58b9f456SAndroid Build Coastguard Worker valarray& operator&= (const value_type& __x); 910*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 911*58b9f456SAndroid Build Coastguard Worker valarray& operator|= (const value_type& __x); 912*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 913*58b9f456SAndroid Build Coastguard Worker valarray& operator<<=(const value_type& __x); 914*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 915*58b9f456SAndroid Build Coastguard Worker valarray& operator>>=(const value_type& __x); 916*58b9f456SAndroid Build Coastguard Worker 917*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 918*58b9f456SAndroid Build Coastguard Worker typename enable_if 919*58b9f456SAndroid Build Coastguard Worker < 920*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 921*58b9f456SAndroid Build Coastguard Worker valarray& 922*58b9f456SAndroid Build Coastguard Worker >::type 923*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 924*58b9f456SAndroid Build Coastguard Worker operator*= (const _Expr& __v); 925*58b9f456SAndroid Build Coastguard Worker 926*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 927*58b9f456SAndroid Build Coastguard Worker typename enable_if 928*58b9f456SAndroid Build Coastguard Worker < 929*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 930*58b9f456SAndroid Build Coastguard Worker valarray& 931*58b9f456SAndroid Build Coastguard Worker >::type 932*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 933*58b9f456SAndroid Build Coastguard Worker operator/= (const _Expr& __v); 934*58b9f456SAndroid Build Coastguard Worker 935*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 936*58b9f456SAndroid Build Coastguard Worker typename enable_if 937*58b9f456SAndroid Build Coastguard Worker < 938*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 939*58b9f456SAndroid Build Coastguard Worker valarray& 940*58b9f456SAndroid Build Coastguard Worker >::type 941*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 942*58b9f456SAndroid Build Coastguard Worker operator%= (const _Expr& __v); 943*58b9f456SAndroid Build Coastguard Worker 944*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 945*58b9f456SAndroid Build Coastguard Worker typename enable_if 946*58b9f456SAndroid Build Coastguard Worker < 947*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 948*58b9f456SAndroid Build Coastguard Worker valarray& 949*58b9f456SAndroid Build Coastguard Worker >::type 950*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 951*58b9f456SAndroid Build Coastguard Worker operator+= (const _Expr& __v); 952*58b9f456SAndroid Build Coastguard Worker 953*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 954*58b9f456SAndroid Build Coastguard Worker typename enable_if 955*58b9f456SAndroid Build Coastguard Worker < 956*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 957*58b9f456SAndroid Build Coastguard Worker valarray& 958*58b9f456SAndroid Build Coastguard Worker >::type 959*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 960*58b9f456SAndroid Build Coastguard Worker operator-= (const _Expr& __v); 961*58b9f456SAndroid Build Coastguard Worker 962*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 963*58b9f456SAndroid Build Coastguard Worker typename enable_if 964*58b9f456SAndroid Build Coastguard Worker < 965*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 966*58b9f456SAndroid Build Coastguard Worker valarray& 967*58b9f456SAndroid Build Coastguard Worker >::type 968*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 969*58b9f456SAndroid Build Coastguard Worker operator^= (const _Expr& __v); 970*58b9f456SAndroid Build Coastguard Worker 971*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 972*58b9f456SAndroid Build Coastguard Worker typename enable_if 973*58b9f456SAndroid Build Coastguard Worker < 974*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 975*58b9f456SAndroid Build Coastguard Worker valarray& 976*58b9f456SAndroid Build Coastguard Worker >::type 977*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 978*58b9f456SAndroid Build Coastguard Worker operator|= (const _Expr& __v); 979*58b9f456SAndroid Build Coastguard Worker 980*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 981*58b9f456SAndroid Build Coastguard Worker typename enable_if 982*58b9f456SAndroid Build Coastguard Worker < 983*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 984*58b9f456SAndroid Build Coastguard Worker valarray& 985*58b9f456SAndroid Build Coastguard Worker >::type 986*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 987*58b9f456SAndroid Build Coastguard Worker operator&= (const _Expr& __v); 988*58b9f456SAndroid Build Coastguard Worker 989*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 990*58b9f456SAndroid Build Coastguard Worker typename enable_if 991*58b9f456SAndroid Build Coastguard Worker < 992*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 993*58b9f456SAndroid Build Coastguard Worker valarray& 994*58b9f456SAndroid Build Coastguard Worker >::type 995*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 996*58b9f456SAndroid Build Coastguard Worker operator<<= (const _Expr& __v); 997*58b9f456SAndroid Build Coastguard Worker 998*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 999*58b9f456SAndroid Build Coastguard Worker typename enable_if 1000*58b9f456SAndroid Build Coastguard Worker < 1001*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1002*58b9f456SAndroid Build Coastguard Worker valarray& 1003*58b9f456SAndroid Build Coastguard Worker >::type 1004*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1005*58b9f456SAndroid Build Coastguard Worker operator>>= (const _Expr& __v); 1006*58b9f456SAndroid Build Coastguard Worker 1007*58b9f456SAndroid Build Coastguard Worker // member functions: 1008*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1009*58b9f456SAndroid Build Coastguard Worker void swap(valarray& __v) _NOEXCEPT; 1010*58b9f456SAndroid Build Coastguard Worker 1011*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1012*58b9f456SAndroid Build Coastguard Worker size_t size() const {return static_cast<size_t>(__end_ - __begin_);} 1013*58b9f456SAndroid Build Coastguard Worker 1014*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1015*58b9f456SAndroid Build Coastguard Worker value_type sum() const; 1016*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1017*58b9f456SAndroid Build Coastguard Worker value_type min() const; 1018*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1019*58b9f456SAndroid Build Coastguard Worker value_type max() const; 1020*58b9f456SAndroid Build Coastguard Worker 1021*58b9f456SAndroid Build Coastguard Worker valarray shift (int __i) const; 1022*58b9f456SAndroid Build Coastguard Worker valarray cshift(int __i) const; 1023*58b9f456SAndroid Build Coastguard Worker valarray apply(value_type __f(value_type)) const; 1024*58b9f456SAndroid Build Coastguard Worker valarray apply(value_type __f(const value_type&)) const; 1025*58b9f456SAndroid Build Coastguard Worker void resize(size_t __n, value_type __x = value_type()); 1026*58b9f456SAndroid Build Coastguard Worker 1027*58b9f456SAndroid Build Coastguard Workerprivate: 1028*58b9f456SAndroid Build Coastguard Worker template <class> friend class _LIBCPP_TEMPLATE_VIS valarray; 1029*58b9f456SAndroid Build Coastguard Worker template <class> friend class _LIBCPP_TEMPLATE_VIS slice_array; 1030*58b9f456SAndroid Build Coastguard Worker template <class> friend class _LIBCPP_TEMPLATE_VIS gslice_array; 1031*58b9f456SAndroid Build Coastguard Worker template <class> friend class _LIBCPP_TEMPLATE_VIS mask_array; 1032*58b9f456SAndroid Build Coastguard Worker template <class> friend class __mask_expr; 1033*58b9f456SAndroid Build Coastguard Worker template <class> friend class _LIBCPP_TEMPLATE_VIS indirect_array; 1034*58b9f456SAndroid Build Coastguard Worker template <class> friend class __indirect_expr; 1035*58b9f456SAndroid Build Coastguard Worker template <class> friend class __val_expr; 1036*58b9f456SAndroid Build Coastguard Worker 1037*58b9f456SAndroid Build Coastguard Worker template <class _Up> 1038*58b9f456SAndroid Build Coastguard Worker friend 1039*58b9f456SAndroid Build Coastguard Worker _Up* 1040*58b9f456SAndroid Build Coastguard Worker begin(valarray<_Up>& __v); 1041*58b9f456SAndroid Build Coastguard Worker 1042*58b9f456SAndroid Build Coastguard Worker template <class _Up> 1043*58b9f456SAndroid Build Coastguard Worker friend 1044*58b9f456SAndroid Build Coastguard Worker const _Up* 1045*58b9f456SAndroid Build Coastguard Worker begin(const valarray<_Up>& __v); 1046*58b9f456SAndroid Build Coastguard Worker 1047*58b9f456SAndroid Build Coastguard Worker template <class _Up> 1048*58b9f456SAndroid Build Coastguard Worker friend 1049*58b9f456SAndroid Build Coastguard Worker _Up* 1050*58b9f456SAndroid Build Coastguard Worker end(valarray<_Up>& __v); 1051*58b9f456SAndroid Build Coastguard Worker 1052*58b9f456SAndroid Build Coastguard Worker template <class _Up> 1053*58b9f456SAndroid Build Coastguard Worker friend 1054*58b9f456SAndroid Build Coastguard Worker const _Up* 1055*58b9f456SAndroid Build Coastguard Worker end(const valarray<_Up>& __v); 1056*58b9f456SAndroid Build Coastguard Worker 1057*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1058*58b9f456SAndroid Build Coastguard Worker void __clear(size_t __capacity); 1059*58b9f456SAndroid Build Coastguard Worker valarray& __assign_range(const value_type* __f, const value_type* __l); 1060*58b9f456SAndroid Build Coastguard Worker}; 1061*58b9f456SAndroid Build Coastguard Worker 1062*58b9f456SAndroid Build Coastguard Worker_LIBCPP_EXTERN_TEMPLATE(_LIBCPP_FUNC_VIS valarray<size_t>::valarray(size_t)) 1063*58b9f456SAndroid Build Coastguard Worker_LIBCPP_EXTERN_TEMPLATE(_LIBCPP_FUNC_VIS valarray<size_t>::~valarray()) 1064*58b9f456SAndroid Build Coastguard Worker_LIBCPP_EXTERN_TEMPLATE(_LIBCPP_FUNC_VIS void valarray<size_t>::resize(size_t, size_t)) 1065*58b9f456SAndroid Build Coastguard Worker 1066*58b9f456SAndroid Build Coastguard Workertemplate <class _Op, class _Tp> 1067*58b9f456SAndroid Build Coastguard Workerstruct _UnaryOp<_Op, valarray<_Tp> > 1068*58b9f456SAndroid Build Coastguard Worker{ 1069*58b9f456SAndroid Build Coastguard Worker typedef typename _Op::result_type result_type; 1070*58b9f456SAndroid Build Coastguard Worker typedef _Tp value_type; 1071*58b9f456SAndroid Build Coastguard Worker 1072*58b9f456SAndroid Build Coastguard Worker _Op __op_; 1073*58b9f456SAndroid Build Coastguard Worker const valarray<_Tp>& __a0_; 1074*58b9f456SAndroid Build Coastguard Worker 1075*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1076*58b9f456SAndroid Build Coastguard Worker _UnaryOp(const _Op& __op, const valarray<_Tp>& __a0) : __op_(__op), __a0_(__a0) {} 1077*58b9f456SAndroid Build Coastguard Worker 1078*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1079*58b9f456SAndroid Build Coastguard Worker result_type operator[](size_t __i) const {return __op_(__a0_[__i]);} 1080*58b9f456SAndroid Build Coastguard Worker 1081*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1082*58b9f456SAndroid Build Coastguard Worker size_t size() const {return __a0_.size();} 1083*58b9f456SAndroid Build Coastguard Worker}; 1084*58b9f456SAndroid Build Coastguard Worker 1085*58b9f456SAndroid Build Coastguard Workertemplate <class _Op, class _Tp, class _A1> 1086*58b9f456SAndroid Build Coastguard Workerstruct _BinaryOp<_Op, valarray<_Tp>, _A1> 1087*58b9f456SAndroid Build Coastguard Worker{ 1088*58b9f456SAndroid Build Coastguard Worker typedef typename _Op::result_type result_type; 1089*58b9f456SAndroid Build Coastguard Worker typedef _Tp value_type; 1090*58b9f456SAndroid Build Coastguard Worker 1091*58b9f456SAndroid Build Coastguard Worker _Op __op_; 1092*58b9f456SAndroid Build Coastguard Worker const valarray<_Tp>& __a0_; 1093*58b9f456SAndroid Build Coastguard Worker _A1 __a1_; 1094*58b9f456SAndroid Build Coastguard Worker 1095*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1096*58b9f456SAndroid Build Coastguard Worker _BinaryOp(const _Op& __op, const valarray<_Tp>& __a0, const _A1& __a1) 1097*58b9f456SAndroid Build Coastguard Worker : __op_(__op), __a0_(__a0), __a1_(__a1) {} 1098*58b9f456SAndroid Build Coastguard Worker 1099*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1100*58b9f456SAndroid Build Coastguard Worker value_type operator[](size_t __i) const {return __op_(__a0_[__i], __a1_[__i]);} 1101*58b9f456SAndroid Build Coastguard Worker 1102*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1103*58b9f456SAndroid Build Coastguard Worker size_t size() const {return __a0_.size();} 1104*58b9f456SAndroid Build Coastguard Worker}; 1105*58b9f456SAndroid Build Coastguard Worker 1106*58b9f456SAndroid Build Coastguard Workertemplate <class _Op, class _A0, class _Tp> 1107*58b9f456SAndroid Build Coastguard Workerstruct _BinaryOp<_Op, _A0, valarray<_Tp> > 1108*58b9f456SAndroid Build Coastguard Worker{ 1109*58b9f456SAndroid Build Coastguard Worker typedef typename _Op::result_type result_type; 1110*58b9f456SAndroid Build Coastguard Worker typedef _Tp value_type; 1111*58b9f456SAndroid Build Coastguard Worker 1112*58b9f456SAndroid Build Coastguard Worker _Op __op_; 1113*58b9f456SAndroid Build Coastguard Worker _A0 __a0_; 1114*58b9f456SAndroid Build Coastguard Worker const valarray<_Tp>& __a1_; 1115*58b9f456SAndroid Build Coastguard Worker 1116*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1117*58b9f456SAndroid Build Coastguard Worker _BinaryOp(const _Op& __op, const _A0& __a0, const valarray<_Tp>& __a1) 1118*58b9f456SAndroid Build Coastguard Worker : __op_(__op), __a0_(__a0), __a1_(__a1) {} 1119*58b9f456SAndroid Build Coastguard Worker 1120*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1121*58b9f456SAndroid Build Coastguard Worker value_type operator[](size_t __i) const {return __op_(__a0_[__i], __a1_[__i]);} 1122*58b9f456SAndroid Build Coastguard Worker 1123*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1124*58b9f456SAndroid Build Coastguard Worker size_t size() const {return __a0_.size();} 1125*58b9f456SAndroid Build Coastguard Worker}; 1126*58b9f456SAndroid Build Coastguard Worker 1127*58b9f456SAndroid Build Coastguard Workertemplate <class _Op, class _Tp> 1128*58b9f456SAndroid Build Coastguard Workerstruct _BinaryOp<_Op, valarray<_Tp>, valarray<_Tp> > 1129*58b9f456SAndroid Build Coastguard Worker{ 1130*58b9f456SAndroid Build Coastguard Worker typedef typename _Op::result_type result_type; 1131*58b9f456SAndroid Build Coastguard Worker typedef _Tp value_type; 1132*58b9f456SAndroid Build Coastguard Worker 1133*58b9f456SAndroid Build Coastguard Worker _Op __op_; 1134*58b9f456SAndroid Build Coastguard Worker const valarray<_Tp>& __a0_; 1135*58b9f456SAndroid Build Coastguard Worker const valarray<_Tp>& __a1_; 1136*58b9f456SAndroid Build Coastguard Worker 1137*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1138*58b9f456SAndroid Build Coastguard Worker _BinaryOp(const _Op& __op, const valarray<_Tp>& __a0, const valarray<_Tp>& __a1) 1139*58b9f456SAndroid Build Coastguard Worker : __op_(__op), __a0_(__a0), __a1_(__a1) {} 1140*58b9f456SAndroid Build Coastguard Worker 1141*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1142*58b9f456SAndroid Build Coastguard Worker value_type operator[](size_t __i) const {return __op_(__a0_[__i], __a1_[__i]);} 1143*58b9f456SAndroid Build Coastguard Worker 1144*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1145*58b9f456SAndroid Build Coastguard Worker size_t size() const {return __a0_.size();} 1146*58b9f456SAndroid Build Coastguard Worker}; 1147*58b9f456SAndroid Build Coastguard Worker 1148*58b9f456SAndroid Build Coastguard Worker// slice_array 1149*58b9f456SAndroid Build Coastguard Worker 1150*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1151*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS slice_array 1152*58b9f456SAndroid Build Coastguard Worker{ 1153*58b9f456SAndroid Build Coastguard Workerpublic: 1154*58b9f456SAndroid Build Coastguard Worker typedef _Tp value_type; 1155*58b9f456SAndroid Build Coastguard Worker 1156*58b9f456SAndroid Build Coastguard Workerprivate: 1157*58b9f456SAndroid Build Coastguard Worker value_type* __vp_; 1158*58b9f456SAndroid Build Coastguard Worker size_t __size_; 1159*58b9f456SAndroid Build Coastguard Worker size_t __stride_; 1160*58b9f456SAndroid Build Coastguard Worker 1161*58b9f456SAndroid Build Coastguard Workerpublic: 1162*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1163*58b9f456SAndroid Build Coastguard Worker typename enable_if 1164*58b9f456SAndroid Build Coastguard Worker < 1165*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1166*58b9f456SAndroid Build Coastguard Worker void 1167*58b9f456SAndroid Build Coastguard Worker >::type 1168*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1169*58b9f456SAndroid Build Coastguard Worker operator=(const _Expr& __v) const; 1170*58b9f456SAndroid Build Coastguard Worker 1171*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1172*58b9f456SAndroid Build Coastguard Worker typename enable_if 1173*58b9f456SAndroid Build Coastguard Worker < 1174*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1175*58b9f456SAndroid Build Coastguard Worker void 1176*58b9f456SAndroid Build Coastguard Worker >::type 1177*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1178*58b9f456SAndroid Build Coastguard Worker operator*=(const _Expr& __v) const; 1179*58b9f456SAndroid Build Coastguard Worker 1180*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1181*58b9f456SAndroid Build Coastguard Worker typename enable_if 1182*58b9f456SAndroid Build Coastguard Worker < 1183*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1184*58b9f456SAndroid Build Coastguard Worker void 1185*58b9f456SAndroid Build Coastguard Worker >::type 1186*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1187*58b9f456SAndroid Build Coastguard Worker operator/=(const _Expr& __v) const; 1188*58b9f456SAndroid Build Coastguard Worker 1189*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1190*58b9f456SAndroid Build Coastguard Worker typename enable_if 1191*58b9f456SAndroid Build Coastguard Worker < 1192*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1193*58b9f456SAndroid Build Coastguard Worker void 1194*58b9f456SAndroid Build Coastguard Worker >::type 1195*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1196*58b9f456SAndroid Build Coastguard Worker operator%=(const _Expr& __v) const; 1197*58b9f456SAndroid Build Coastguard Worker 1198*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1199*58b9f456SAndroid Build Coastguard Worker typename enable_if 1200*58b9f456SAndroid Build Coastguard Worker < 1201*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1202*58b9f456SAndroid Build Coastguard Worker void 1203*58b9f456SAndroid Build Coastguard Worker >::type 1204*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1205*58b9f456SAndroid Build Coastguard Worker operator+=(const _Expr& __v) const; 1206*58b9f456SAndroid Build Coastguard Worker 1207*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1208*58b9f456SAndroid Build Coastguard Worker typename enable_if 1209*58b9f456SAndroid Build Coastguard Worker < 1210*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1211*58b9f456SAndroid Build Coastguard Worker void 1212*58b9f456SAndroid Build Coastguard Worker >::type 1213*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1214*58b9f456SAndroid Build Coastguard Worker operator-=(const _Expr& __v) const; 1215*58b9f456SAndroid Build Coastguard Worker 1216*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1217*58b9f456SAndroid Build Coastguard Worker typename enable_if 1218*58b9f456SAndroid Build Coastguard Worker < 1219*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1220*58b9f456SAndroid Build Coastguard Worker void 1221*58b9f456SAndroid Build Coastguard Worker >::type 1222*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1223*58b9f456SAndroid Build Coastguard Worker operator^=(const _Expr& __v) const; 1224*58b9f456SAndroid Build Coastguard Worker 1225*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1226*58b9f456SAndroid Build Coastguard Worker typename enable_if 1227*58b9f456SAndroid Build Coastguard Worker < 1228*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1229*58b9f456SAndroid Build Coastguard Worker void 1230*58b9f456SAndroid Build Coastguard Worker >::type 1231*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1232*58b9f456SAndroid Build Coastguard Worker operator&=(const _Expr& __v) const; 1233*58b9f456SAndroid Build Coastguard Worker 1234*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1235*58b9f456SAndroid Build Coastguard Worker typename enable_if 1236*58b9f456SAndroid Build Coastguard Worker < 1237*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1238*58b9f456SAndroid Build Coastguard Worker void 1239*58b9f456SAndroid Build Coastguard Worker >::type 1240*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1241*58b9f456SAndroid Build Coastguard Worker operator|=(const _Expr& __v) const; 1242*58b9f456SAndroid Build Coastguard Worker 1243*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1244*58b9f456SAndroid Build Coastguard Worker typename enable_if 1245*58b9f456SAndroid Build Coastguard Worker < 1246*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1247*58b9f456SAndroid Build Coastguard Worker void 1248*58b9f456SAndroid Build Coastguard Worker >::type 1249*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1250*58b9f456SAndroid Build Coastguard Worker operator<<=(const _Expr& __v) const; 1251*58b9f456SAndroid Build Coastguard Worker 1252*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1253*58b9f456SAndroid Build Coastguard Worker typename enable_if 1254*58b9f456SAndroid Build Coastguard Worker < 1255*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1256*58b9f456SAndroid Build Coastguard Worker void 1257*58b9f456SAndroid Build Coastguard Worker >::type 1258*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1259*58b9f456SAndroid Build Coastguard Worker operator>>=(const _Expr& __v) const; 1260*58b9f456SAndroid Build Coastguard Worker 1261*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1262*58b9f456SAndroid Build Coastguard Worker const slice_array& operator=(const slice_array& __sa) const; 1263*58b9f456SAndroid Build Coastguard Worker 1264*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1265*58b9f456SAndroid Build Coastguard Worker void operator=(const value_type& __x) const; 1266*58b9f456SAndroid Build Coastguard Worker 1267*58b9f456SAndroid Build Coastguard Workerprivate: 1268*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1269*58b9f456SAndroid Build Coastguard Worker slice_array(const slice& __sl, const valarray<value_type>& __v) 1270*58b9f456SAndroid Build Coastguard Worker : __vp_(const_cast<value_type*>(__v.__begin_ + __sl.start())), 1271*58b9f456SAndroid Build Coastguard Worker __size_(__sl.size()), 1272*58b9f456SAndroid Build Coastguard Worker __stride_(__sl.stride()) 1273*58b9f456SAndroid Build Coastguard Worker {} 1274*58b9f456SAndroid Build Coastguard Worker 1275*58b9f456SAndroid Build Coastguard Worker template <class> friend class valarray; 1276*58b9f456SAndroid Build Coastguard Worker template <class> friend class sliceExpr; 1277*58b9f456SAndroid Build Coastguard Worker}; 1278*58b9f456SAndroid Build Coastguard Worker 1279*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1280*58b9f456SAndroid Build Coastguard Workerinline 1281*58b9f456SAndroid Build Coastguard Workerconst slice_array<_Tp>& 1282*58b9f456SAndroid Build Coastguard Workerslice_array<_Tp>::operator=(const slice_array& __sa) const 1283*58b9f456SAndroid Build Coastguard Worker{ 1284*58b9f456SAndroid Build Coastguard Worker value_type* __t = __vp_; 1285*58b9f456SAndroid Build Coastguard Worker const value_type* __s = __sa.__vp_; 1286*58b9f456SAndroid Build Coastguard Worker for (size_t __n = __size_; __n; --__n, __t += __stride_, __s += __sa.__stride_) 1287*58b9f456SAndroid Build Coastguard Worker *__t = *__s; 1288*58b9f456SAndroid Build Coastguard Worker return *this; 1289*58b9f456SAndroid Build Coastguard Worker} 1290*58b9f456SAndroid Build Coastguard Worker 1291*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1292*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1293*58b9f456SAndroid Build Coastguard Workerinline 1294*58b9f456SAndroid Build Coastguard Workertypename enable_if 1295*58b9f456SAndroid Build Coastguard Worker< 1296*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1297*58b9f456SAndroid Build Coastguard Worker void 1298*58b9f456SAndroid Build Coastguard Worker>::type 1299*58b9f456SAndroid Build Coastguard Workerslice_array<_Tp>::operator=(const _Expr& __v) const 1300*58b9f456SAndroid Build Coastguard Worker{ 1301*58b9f456SAndroid Build Coastguard Worker value_type* __t = __vp_; 1302*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 1303*58b9f456SAndroid Build Coastguard Worker *__t = __v[__i]; 1304*58b9f456SAndroid Build Coastguard Worker} 1305*58b9f456SAndroid Build Coastguard Worker 1306*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1307*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1308*58b9f456SAndroid Build Coastguard Workerinline 1309*58b9f456SAndroid Build Coastguard Workertypename enable_if 1310*58b9f456SAndroid Build Coastguard Worker< 1311*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1312*58b9f456SAndroid Build Coastguard Worker void 1313*58b9f456SAndroid Build Coastguard Worker>::type 1314*58b9f456SAndroid Build Coastguard Workerslice_array<_Tp>::operator*=(const _Expr& __v) const 1315*58b9f456SAndroid Build Coastguard Worker{ 1316*58b9f456SAndroid Build Coastguard Worker value_type* __t = __vp_; 1317*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 1318*58b9f456SAndroid Build Coastguard Worker *__t *= __v[__i]; 1319*58b9f456SAndroid Build Coastguard Worker} 1320*58b9f456SAndroid Build Coastguard Worker 1321*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1322*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1323*58b9f456SAndroid Build Coastguard Workerinline 1324*58b9f456SAndroid Build Coastguard Workertypename enable_if 1325*58b9f456SAndroid Build Coastguard Worker< 1326*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1327*58b9f456SAndroid Build Coastguard Worker void 1328*58b9f456SAndroid Build Coastguard Worker>::type 1329*58b9f456SAndroid Build Coastguard Workerslice_array<_Tp>::operator/=(const _Expr& __v) const 1330*58b9f456SAndroid Build Coastguard Worker{ 1331*58b9f456SAndroid Build Coastguard Worker value_type* __t = __vp_; 1332*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 1333*58b9f456SAndroid Build Coastguard Worker *__t /= __v[__i]; 1334*58b9f456SAndroid Build Coastguard Worker} 1335*58b9f456SAndroid Build Coastguard Worker 1336*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1337*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1338*58b9f456SAndroid Build Coastguard Workerinline 1339*58b9f456SAndroid Build Coastguard Workertypename enable_if 1340*58b9f456SAndroid Build Coastguard Worker< 1341*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1342*58b9f456SAndroid Build Coastguard Worker void 1343*58b9f456SAndroid Build Coastguard Worker>::type 1344*58b9f456SAndroid Build Coastguard Workerslice_array<_Tp>::operator%=(const _Expr& __v) const 1345*58b9f456SAndroid Build Coastguard Worker{ 1346*58b9f456SAndroid Build Coastguard Worker value_type* __t = __vp_; 1347*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 1348*58b9f456SAndroid Build Coastguard Worker *__t %= __v[__i]; 1349*58b9f456SAndroid Build Coastguard Worker} 1350*58b9f456SAndroid Build Coastguard Worker 1351*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1352*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1353*58b9f456SAndroid Build Coastguard Workerinline 1354*58b9f456SAndroid Build Coastguard Workertypename enable_if 1355*58b9f456SAndroid Build Coastguard Worker< 1356*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1357*58b9f456SAndroid Build Coastguard Worker void 1358*58b9f456SAndroid Build Coastguard Worker>::type 1359*58b9f456SAndroid Build Coastguard Workerslice_array<_Tp>::operator+=(const _Expr& __v) const 1360*58b9f456SAndroid Build Coastguard Worker{ 1361*58b9f456SAndroid Build Coastguard Worker value_type* __t = __vp_; 1362*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 1363*58b9f456SAndroid Build Coastguard Worker *__t += __v[__i]; 1364*58b9f456SAndroid Build Coastguard Worker} 1365*58b9f456SAndroid Build Coastguard Worker 1366*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1367*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1368*58b9f456SAndroid Build Coastguard Workerinline 1369*58b9f456SAndroid Build Coastguard Workertypename enable_if 1370*58b9f456SAndroid Build Coastguard Worker< 1371*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1372*58b9f456SAndroid Build Coastguard Worker void 1373*58b9f456SAndroid Build Coastguard Worker>::type 1374*58b9f456SAndroid Build Coastguard Workerslice_array<_Tp>::operator-=(const _Expr& __v) const 1375*58b9f456SAndroid Build Coastguard Worker{ 1376*58b9f456SAndroid Build Coastguard Worker value_type* __t = __vp_; 1377*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 1378*58b9f456SAndroid Build Coastguard Worker *__t -= __v[__i]; 1379*58b9f456SAndroid Build Coastguard Worker} 1380*58b9f456SAndroid Build Coastguard Worker 1381*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1382*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1383*58b9f456SAndroid Build Coastguard Workerinline 1384*58b9f456SAndroid Build Coastguard Workertypename enable_if 1385*58b9f456SAndroid Build Coastguard Worker< 1386*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1387*58b9f456SAndroid Build Coastguard Worker void 1388*58b9f456SAndroid Build Coastguard Worker>::type 1389*58b9f456SAndroid Build Coastguard Workerslice_array<_Tp>::operator^=(const _Expr& __v) const 1390*58b9f456SAndroid Build Coastguard Worker{ 1391*58b9f456SAndroid Build Coastguard Worker value_type* __t = __vp_; 1392*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 1393*58b9f456SAndroid Build Coastguard Worker *__t ^= __v[__i]; 1394*58b9f456SAndroid Build Coastguard Worker} 1395*58b9f456SAndroid Build Coastguard Worker 1396*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1397*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1398*58b9f456SAndroid Build Coastguard Workerinline 1399*58b9f456SAndroid Build Coastguard Workertypename enable_if 1400*58b9f456SAndroid Build Coastguard Worker< 1401*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1402*58b9f456SAndroid Build Coastguard Worker void 1403*58b9f456SAndroid Build Coastguard Worker>::type 1404*58b9f456SAndroid Build Coastguard Workerslice_array<_Tp>::operator&=(const _Expr& __v) const 1405*58b9f456SAndroid Build Coastguard Worker{ 1406*58b9f456SAndroid Build Coastguard Worker value_type* __t = __vp_; 1407*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 1408*58b9f456SAndroid Build Coastguard Worker *__t &= __v[__i]; 1409*58b9f456SAndroid Build Coastguard Worker} 1410*58b9f456SAndroid Build Coastguard Worker 1411*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1412*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1413*58b9f456SAndroid Build Coastguard Workerinline 1414*58b9f456SAndroid Build Coastguard Workertypename enable_if 1415*58b9f456SAndroid Build Coastguard Worker< 1416*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1417*58b9f456SAndroid Build Coastguard Worker void 1418*58b9f456SAndroid Build Coastguard Worker>::type 1419*58b9f456SAndroid Build Coastguard Workerslice_array<_Tp>::operator|=(const _Expr& __v) const 1420*58b9f456SAndroid Build Coastguard Worker{ 1421*58b9f456SAndroid Build Coastguard Worker value_type* __t = __vp_; 1422*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 1423*58b9f456SAndroid Build Coastguard Worker *__t |= __v[__i]; 1424*58b9f456SAndroid Build Coastguard Worker} 1425*58b9f456SAndroid Build Coastguard Worker 1426*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1427*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1428*58b9f456SAndroid Build Coastguard Workerinline 1429*58b9f456SAndroid Build Coastguard Workertypename enable_if 1430*58b9f456SAndroid Build Coastguard Worker< 1431*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1432*58b9f456SAndroid Build Coastguard Worker void 1433*58b9f456SAndroid Build Coastguard Worker>::type 1434*58b9f456SAndroid Build Coastguard Workerslice_array<_Tp>::operator<<=(const _Expr& __v) const 1435*58b9f456SAndroid Build Coastguard Worker{ 1436*58b9f456SAndroid Build Coastguard Worker value_type* __t = __vp_; 1437*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 1438*58b9f456SAndroid Build Coastguard Worker *__t <<= __v[__i]; 1439*58b9f456SAndroid Build Coastguard Worker} 1440*58b9f456SAndroid Build Coastguard Worker 1441*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1442*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1443*58b9f456SAndroid Build Coastguard Workerinline 1444*58b9f456SAndroid Build Coastguard Workertypename enable_if 1445*58b9f456SAndroid Build Coastguard Worker< 1446*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1447*58b9f456SAndroid Build Coastguard Worker void 1448*58b9f456SAndroid Build Coastguard Worker>::type 1449*58b9f456SAndroid Build Coastguard Workerslice_array<_Tp>::operator>>=(const _Expr& __v) const 1450*58b9f456SAndroid Build Coastguard Worker{ 1451*58b9f456SAndroid Build Coastguard Worker value_type* __t = __vp_; 1452*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __size_; ++__i, __t += __stride_) 1453*58b9f456SAndroid Build Coastguard Worker *__t >>= __v[__i]; 1454*58b9f456SAndroid Build Coastguard Worker} 1455*58b9f456SAndroid Build Coastguard Worker 1456*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1457*58b9f456SAndroid Build Coastguard Workerinline 1458*58b9f456SAndroid Build Coastguard Workervoid 1459*58b9f456SAndroid Build Coastguard Workerslice_array<_Tp>::operator=(const value_type& __x) const 1460*58b9f456SAndroid Build Coastguard Worker{ 1461*58b9f456SAndroid Build Coastguard Worker value_type* __t = __vp_; 1462*58b9f456SAndroid Build Coastguard Worker for (size_t __n = __size_; __n; --__n, __t += __stride_) 1463*58b9f456SAndroid Build Coastguard Worker *__t = __x; 1464*58b9f456SAndroid Build Coastguard Worker} 1465*58b9f456SAndroid Build Coastguard Worker 1466*58b9f456SAndroid Build Coastguard Worker// gslice 1467*58b9f456SAndroid Build Coastguard Worker 1468*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TYPE_VIS gslice 1469*58b9f456SAndroid Build Coastguard Worker{ 1470*58b9f456SAndroid Build Coastguard Worker valarray<size_t> __size_; 1471*58b9f456SAndroid Build Coastguard Worker valarray<size_t> __stride_; 1472*58b9f456SAndroid Build Coastguard Worker valarray<size_t> __1d_; 1473*58b9f456SAndroid Build Coastguard Worker 1474*58b9f456SAndroid Build Coastguard Workerpublic: 1475*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1476*58b9f456SAndroid Build Coastguard Worker gslice() {} 1477*58b9f456SAndroid Build Coastguard Worker 1478*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1479*58b9f456SAndroid Build Coastguard Worker gslice(size_t __start, const valarray<size_t>& __size, 1480*58b9f456SAndroid Build Coastguard Worker const valarray<size_t>& __stride) 1481*58b9f456SAndroid Build Coastguard Worker : __size_(__size), 1482*58b9f456SAndroid Build Coastguard Worker __stride_(__stride) 1483*58b9f456SAndroid Build Coastguard Worker {__init(__start);} 1484*58b9f456SAndroid Build Coastguard Worker 1485*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 1486*58b9f456SAndroid Build Coastguard Worker 1487*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1488*58b9f456SAndroid Build Coastguard Worker gslice(size_t __start, const valarray<size_t>& __size, 1489*58b9f456SAndroid Build Coastguard Worker valarray<size_t>&& __stride) 1490*58b9f456SAndroid Build Coastguard Worker : __size_(__size), 1491*58b9f456SAndroid Build Coastguard Worker __stride_(move(__stride)) 1492*58b9f456SAndroid Build Coastguard Worker {__init(__start);} 1493*58b9f456SAndroid Build Coastguard Worker 1494*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1495*58b9f456SAndroid Build Coastguard Worker gslice(size_t __start, valarray<size_t>&& __size, 1496*58b9f456SAndroid Build Coastguard Worker const valarray<size_t>& __stride) 1497*58b9f456SAndroid Build Coastguard Worker : __size_(move(__size)), 1498*58b9f456SAndroid Build Coastguard Worker __stride_(__stride) 1499*58b9f456SAndroid Build Coastguard Worker {__init(__start);} 1500*58b9f456SAndroid Build Coastguard Worker 1501*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1502*58b9f456SAndroid Build Coastguard Worker gslice(size_t __start, valarray<size_t>&& __size, 1503*58b9f456SAndroid Build Coastguard Worker valarray<size_t>&& __stride) 1504*58b9f456SAndroid Build Coastguard Worker : __size_(move(__size)), 1505*58b9f456SAndroid Build Coastguard Worker __stride_(move(__stride)) 1506*58b9f456SAndroid Build Coastguard Worker {__init(__start);} 1507*58b9f456SAndroid Build Coastguard Worker 1508*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 1509*58b9f456SAndroid Build Coastguard Worker 1510*58b9f456SAndroid Build Coastguard Worker// gslice(const gslice&) = default; 1511*58b9f456SAndroid Build Coastguard Worker// gslice(gslice&&) = default; 1512*58b9f456SAndroid Build Coastguard Worker// gslice& operator=(const gslice&) = default; 1513*58b9f456SAndroid Build Coastguard Worker// gslice& operator=(gslice&&) = default; 1514*58b9f456SAndroid Build Coastguard Worker 1515*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1516*58b9f456SAndroid Build Coastguard Worker size_t start() const {return __1d_.size() ? __1d_[0] : 0;} 1517*58b9f456SAndroid Build Coastguard Worker 1518*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1519*58b9f456SAndroid Build Coastguard Worker valarray<size_t> size() const {return __size_;} 1520*58b9f456SAndroid Build Coastguard Worker 1521*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1522*58b9f456SAndroid Build Coastguard Worker valarray<size_t> stride() const {return __stride_;} 1523*58b9f456SAndroid Build Coastguard Worker 1524*58b9f456SAndroid Build Coastguard Workerprivate: 1525*58b9f456SAndroid Build Coastguard Worker void __init(size_t __start); 1526*58b9f456SAndroid Build Coastguard Worker 1527*58b9f456SAndroid Build Coastguard Worker template <class> friend class gslice_array; 1528*58b9f456SAndroid Build Coastguard Worker template <class> friend class valarray; 1529*58b9f456SAndroid Build Coastguard Worker template <class> friend class __val_expr; 1530*58b9f456SAndroid Build Coastguard Worker}; 1531*58b9f456SAndroid Build Coastguard Worker 1532*58b9f456SAndroid Build Coastguard Worker// gslice_array 1533*58b9f456SAndroid Build Coastguard Worker 1534*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1535*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS gslice_array 1536*58b9f456SAndroid Build Coastguard Worker{ 1537*58b9f456SAndroid Build Coastguard Workerpublic: 1538*58b9f456SAndroid Build Coastguard Worker typedef _Tp value_type; 1539*58b9f456SAndroid Build Coastguard Worker 1540*58b9f456SAndroid Build Coastguard Workerprivate: 1541*58b9f456SAndroid Build Coastguard Worker value_type* __vp_; 1542*58b9f456SAndroid Build Coastguard Worker valarray<size_t> __1d_; 1543*58b9f456SAndroid Build Coastguard Worker 1544*58b9f456SAndroid Build Coastguard Workerpublic: 1545*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1546*58b9f456SAndroid Build Coastguard Worker typename enable_if 1547*58b9f456SAndroid Build Coastguard Worker < 1548*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1549*58b9f456SAndroid Build Coastguard Worker void 1550*58b9f456SAndroid Build Coastguard Worker >::type 1551*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1552*58b9f456SAndroid Build Coastguard Worker operator=(const _Expr& __v) const; 1553*58b9f456SAndroid Build Coastguard Worker 1554*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1555*58b9f456SAndroid Build Coastguard Worker typename enable_if 1556*58b9f456SAndroid Build Coastguard Worker < 1557*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1558*58b9f456SAndroid Build Coastguard Worker void 1559*58b9f456SAndroid Build Coastguard Worker >::type 1560*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1561*58b9f456SAndroid Build Coastguard Worker operator*=(const _Expr& __v) const; 1562*58b9f456SAndroid Build Coastguard Worker 1563*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1564*58b9f456SAndroid Build Coastguard Worker typename enable_if 1565*58b9f456SAndroid Build Coastguard Worker < 1566*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1567*58b9f456SAndroid Build Coastguard Worker void 1568*58b9f456SAndroid Build Coastguard Worker >::type 1569*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1570*58b9f456SAndroid Build Coastguard Worker operator/=(const _Expr& __v) const; 1571*58b9f456SAndroid Build Coastguard Worker 1572*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1573*58b9f456SAndroid Build Coastguard Worker typename enable_if 1574*58b9f456SAndroid Build Coastguard Worker < 1575*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1576*58b9f456SAndroid Build Coastguard Worker void 1577*58b9f456SAndroid Build Coastguard Worker >::type 1578*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1579*58b9f456SAndroid Build Coastguard Worker operator%=(const _Expr& __v) const; 1580*58b9f456SAndroid Build Coastguard Worker 1581*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1582*58b9f456SAndroid Build Coastguard Worker typename enable_if 1583*58b9f456SAndroid Build Coastguard Worker < 1584*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1585*58b9f456SAndroid Build Coastguard Worker void 1586*58b9f456SAndroid Build Coastguard Worker >::type 1587*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1588*58b9f456SAndroid Build Coastguard Worker operator+=(const _Expr& __v) const; 1589*58b9f456SAndroid Build Coastguard Worker 1590*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1591*58b9f456SAndroid Build Coastguard Worker typename enable_if 1592*58b9f456SAndroid Build Coastguard Worker < 1593*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1594*58b9f456SAndroid Build Coastguard Worker void 1595*58b9f456SAndroid Build Coastguard Worker >::type 1596*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1597*58b9f456SAndroid Build Coastguard Worker operator-=(const _Expr& __v) const; 1598*58b9f456SAndroid Build Coastguard Worker 1599*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1600*58b9f456SAndroid Build Coastguard Worker typename enable_if 1601*58b9f456SAndroid Build Coastguard Worker < 1602*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1603*58b9f456SAndroid Build Coastguard Worker void 1604*58b9f456SAndroid Build Coastguard Worker >::type 1605*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1606*58b9f456SAndroid Build Coastguard Worker operator^=(const _Expr& __v) const; 1607*58b9f456SAndroid Build Coastguard Worker 1608*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1609*58b9f456SAndroid Build Coastguard Worker typename enable_if 1610*58b9f456SAndroid Build Coastguard Worker < 1611*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1612*58b9f456SAndroid Build Coastguard Worker void 1613*58b9f456SAndroid Build Coastguard Worker >::type 1614*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1615*58b9f456SAndroid Build Coastguard Worker operator&=(const _Expr& __v) const; 1616*58b9f456SAndroid Build Coastguard Worker 1617*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1618*58b9f456SAndroid Build Coastguard Worker typename enable_if 1619*58b9f456SAndroid Build Coastguard Worker < 1620*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1621*58b9f456SAndroid Build Coastguard Worker void 1622*58b9f456SAndroid Build Coastguard Worker >::type 1623*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1624*58b9f456SAndroid Build Coastguard Worker operator|=(const _Expr& __v) const; 1625*58b9f456SAndroid Build Coastguard Worker 1626*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1627*58b9f456SAndroid Build Coastguard Worker typename enable_if 1628*58b9f456SAndroid Build Coastguard Worker < 1629*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1630*58b9f456SAndroid Build Coastguard Worker void 1631*58b9f456SAndroid Build Coastguard Worker >::type 1632*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1633*58b9f456SAndroid Build Coastguard Worker operator<<=(const _Expr& __v) const; 1634*58b9f456SAndroid Build Coastguard Worker 1635*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1636*58b9f456SAndroid Build Coastguard Worker typename enable_if 1637*58b9f456SAndroid Build Coastguard Worker < 1638*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1639*58b9f456SAndroid Build Coastguard Worker void 1640*58b9f456SAndroid Build Coastguard Worker >::type 1641*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1642*58b9f456SAndroid Build Coastguard Worker operator>>=(const _Expr& __v) const; 1643*58b9f456SAndroid Build Coastguard Worker 1644*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1645*58b9f456SAndroid Build Coastguard Worker const gslice_array& operator=(const gslice_array& __ga) const; 1646*58b9f456SAndroid Build Coastguard Worker 1647*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1648*58b9f456SAndroid Build Coastguard Worker void operator=(const value_type& __x) const; 1649*58b9f456SAndroid Build Coastguard Worker 1650*58b9f456SAndroid Build Coastguard Worker// gslice_array(const gslice_array&) = default; 1651*58b9f456SAndroid Build Coastguard Worker// gslice_array(gslice_array&&) = default; 1652*58b9f456SAndroid Build Coastguard Worker// gslice_array& operator=(const gslice_array&) = default; 1653*58b9f456SAndroid Build Coastguard Worker// gslice_array& operator=(gslice_array&&) = default; 1654*58b9f456SAndroid Build Coastguard Worker 1655*58b9f456SAndroid Build Coastguard Workerprivate: 1656*58b9f456SAndroid Build Coastguard Worker gslice_array(const gslice& __gs, const valarray<value_type>& __v) 1657*58b9f456SAndroid Build Coastguard Worker : __vp_(const_cast<value_type*>(__v.__begin_)), 1658*58b9f456SAndroid Build Coastguard Worker __1d_(__gs.__1d_) 1659*58b9f456SAndroid Build Coastguard Worker {} 1660*58b9f456SAndroid Build Coastguard Worker 1661*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 1662*58b9f456SAndroid Build Coastguard Worker gslice_array(gslice&& __gs, const valarray<value_type>& __v) 1663*58b9f456SAndroid Build Coastguard Worker : __vp_(const_cast<value_type*>(__v.__begin_)), 1664*58b9f456SAndroid Build Coastguard Worker __1d_(move(__gs.__1d_)) 1665*58b9f456SAndroid Build Coastguard Worker {} 1666*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 1667*58b9f456SAndroid Build Coastguard Worker 1668*58b9f456SAndroid Build Coastguard Worker template <class> friend class valarray; 1669*58b9f456SAndroid Build Coastguard Worker}; 1670*58b9f456SAndroid Build Coastguard Worker 1671*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1672*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1673*58b9f456SAndroid Build Coastguard Workerinline 1674*58b9f456SAndroid Build Coastguard Workertypename enable_if 1675*58b9f456SAndroid Build Coastguard Worker< 1676*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1677*58b9f456SAndroid Build Coastguard Worker void 1678*58b9f456SAndroid Build Coastguard Worker>::type 1679*58b9f456SAndroid Build Coastguard Workergslice_array<_Tp>::operator=(const _Expr& __v) const 1680*58b9f456SAndroid Build Coastguard Worker{ 1681*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 1682*58b9f456SAndroid Build Coastguard Worker size_t __j = 0; 1683*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 1684*58b9f456SAndroid Build Coastguard Worker __vp_[*__i] = __v[__j]; 1685*58b9f456SAndroid Build Coastguard Worker} 1686*58b9f456SAndroid Build Coastguard Worker 1687*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1688*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1689*58b9f456SAndroid Build Coastguard Workerinline 1690*58b9f456SAndroid Build Coastguard Workertypename enable_if 1691*58b9f456SAndroid Build Coastguard Worker< 1692*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1693*58b9f456SAndroid Build Coastguard Worker void 1694*58b9f456SAndroid Build Coastguard Worker>::type 1695*58b9f456SAndroid Build Coastguard Workergslice_array<_Tp>::operator*=(const _Expr& __v) const 1696*58b9f456SAndroid Build Coastguard Worker{ 1697*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 1698*58b9f456SAndroid Build Coastguard Worker size_t __j = 0; 1699*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 1700*58b9f456SAndroid Build Coastguard Worker __vp_[*__i] *= __v[__j]; 1701*58b9f456SAndroid Build Coastguard Worker} 1702*58b9f456SAndroid Build Coastguard Worker 1703*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1704*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1705*58b9f456SAndroid Build Coastguard Workerinline 1706*58b9f456SAndroid Build Coastguard Workertypename enable_if 1707*58b9f456SAndroid Build Coastguard Worker< 1708*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1709*58b9f456SAndroid Build Coastguard Worker void 1710*58b9f456SAndroid Build Coastguard Worker>::type 1711*58b9f456SAndroid Build Coastguard Workergslice_array<_Tp>::operator/=(const _Expr& __v) const 1712*58b9f456SAndroid Build Coastguard Worker{ 1713*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 1714*58b9f456SAndroid Build Coastguard Worker size_t __j = 0; 1715*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 1716*58b9f456SAndroid Build Coastguard Worker __vp_[*__i] /= __v[__j]; 1717*58b9f456SAndroid Build Coastguard Worker} 1718*58b9f456SAndroid Build Coastguard Worker 1719*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1720*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1721*58b9f456SAndroid Build Coastguard Workerinline 1722*58b9f456SAndroid Build Coastguard Workertypename enable_if 1723*58b9f456SAndroid Build Coastguard Worker< 1724*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1725*58b9f456SAndroid Build Coastguard Worker void 1726*58b9f456SAndroid Build Coastguard Worker>::type 1727*58b9f456SAndroid Build Coastguard Workergslice_array<_Tp>::operator%=(const _Expr& __v) const 1728*58b9f456SAndroid Build Coastguard Worker{ 1729*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 1730*58b9f456SAndroid Build Coastguard Worker size_t __j = 0; 1731*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 1732*58b9f456SAndroid Build Coastguard Worker __vp_[*__i] %= __v[__j]; 1733*58b9f456SAndroid Build Coastguard Worker} 1734*58b9f456SAndroid Build Coastguard Worker 1735*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1736*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1737*58b9f456SAndroid Build Coastguard Workerinline 1738*58b9f456SAndroid Build Coastguard Workertypename enable_if 1739*58b9f456SAndroid Build Coastguard Worker< 1740*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1741*58b9f456SAndroid Build Coastguard Worker void 1742*58b9f456SAndroid Build Coastguard Worker>::type 1743*58b9f456SAndroid Build Coastguard Workergslice_array<_Tp>::operator+=(const _Expr& __v) const 1744*58b9f456SAndroid Build Coastguard Worker{ 1745*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 1746*58b9f456SAndroid Build Coastguard Worker size_t __j = 0; 1747*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 1748*58b9f456SAndroid Build Coastguard Worker __vp_[*__i] += __v[__j]; 1749*58b9f456SAndroid Build Coastguard Worker} 1750*58b9f456SAndroid Build Coastguard Worker 1751*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1752*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1753*58b9f456SAndroid Build Coastguard Workerinline 1754*58b9f456SAndroid Build Coastguard Workertypename enable_if 1755*58b9f456SAndroid Build Coastguard Worker< 1756*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1757*58b9f456SAndroid Build Coastguard Worker void 1758*58b9f456SAndroid Build Coastguard Worker>::type 1759*58b9f456SAndroid Build Coastguard Workergslice_array<_Tp>::operator-=(const _Expr& __v) const 1760*58b9f456SAndroid Build Coastguard Worker{ 1761*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 1762*58b9f456SAndroid Build Coastguard Worker size_t __j = 0; 1763*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 1764*58b9f456SAndroid Build Coastguard Worker __vp_[*__i] -= __v[__j]; 1765*58b9f456SAndroid Build Coastguard Worker} 1766*58b9f456SAndroid Build Coastguard Worker 1767*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1768*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1769*58b9f456SAndroid Build Coastguard Workerinline 1770*58b9f456SAndroid Build Coastguard Workertypename enable_if 1771*58b9f456SAndroid Build Coastguard Worker< 1772*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1773*58b9f456SAndroid Build Coastguard Worker void 1774*58b9f456SAndroid Build Coastguard Worker>::type 1775*58b9f456SAndroid Build Coastguard Workergslice_array<_Tp>::operator^=(const _Expr& __v) const 1776*58b9f456SAndroid Build Coastguard Worker{ 1777*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 1778*58b9f456SAndroid Build Coastguard Worker size_t __j = 0; 1779*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 1780*58b9f456SAndroid Build Coastguard Worker __vp_[*__i] ^= __v[__j]; 1781*58b9f456SAndroid Build Coastguard Worker} 1782*58b9f456SAndroid Build Coastguard Worker 1783*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1784*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1785*58b9f456SAndroid Build Coastguard Workerinline 1786*58b9f456SAndroid Build Coastguard Workertypename enable_if 1787*58b9f456SAndroid Build Coastguard Worker< 1788*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1789*58b9f456SAndroid Build Coastguard Worker void 1790*58b9f456SAndroid Build Coastguard Worker>::type 1791*58b9f456SAndroid Build Coastguard Workergslice_array<_Tp>::operator&=(const _Expr& __v) const 1792*58b9f456SAndroid Build Coastguard Worker{ 1793*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 1794*58b9f456SAndroid Build Coastguard Worker size_t __j = 0; 1795*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 1796*58b9f456SAndroid Build Coastguard Worker __vp_[*__i] &= __v[__j]; 1797*58b9f456SAndroid Build Coastguard Worker} 1798*58b9f456SAndroid Build Coastguard Worker 1799*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1800*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1801*58b9f456SAndroid Build Coastguard Workerinline 1802*58b9f456SAndroid Build Coastguard Workertypename enable_if 1803*58b9f456SAndroid Build Coastguard Worker< 1804*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1805*58b9f456SAndroid Build Coastguard Worker void 1806*58b9f456SAndroid Build Coastguard Worker>::type 1807*58b9f456SAndroid Build Coastguard Workergslice_array<_Tp>::operator|=(const _Expr& __v) const 1808*58b9f456SAndroid Build Coastguard Worker{ 1809*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 1810*58b9f456SAndroid Build Coastguard Worker size_t __j = 0; 1811*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 1812*58b9f456SAndroid Build Coastguard Worker __vp_[*__i] |= __v[__j]; 1813*58b9f456SAndroid Build Coastguard Worker} 1814*58b9f456SAndroid Build Coastguard Worker 1815*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1816*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1817*58b9f456SAndroid Build Coastguard Workerinline 1818*58b9f456SAndroid Build Coastguard Workertypename enable_if 1819*58b9f456SAndroid Build Coastguard Worker< 1820*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1821*58b9f456SAndroid Build Coastguard Worker void 1822*58b9f456SAndroid Build Coastguard Worker>::type 1823*58b9f456SAndroid Build Coastguard Workergslice_array<_Tp>::operator<<=(const _Expr& __v) const 1824*58b9f456SAndroid Build Coastguard Worker{ 1825*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 1826*58b9f456SAndroid Build Coastguard Worker size_t __j = 0; 1827*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 1828*58b9f456SAndroid Build Coastguard Worker __vp_[*__i] <<= __v[__j]; 1829*58b9f456SAndroid Build Coastguard Worker} 1830*58b9f456SAndroid Build Coastguard Worker 1831*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1832*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 1833*58b9f456SAndroid Build Coastguard Workerinline 1834*58b9f456SAndroid Build Coastguard Workertypename enable_if 1835*58b9f456SAndroid Build Coastguard Worker< 1836*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1837*58b9f456SAndroid Build Coastguard Worker void 1838*58b9f456SAndroid Build Coastguard Worker>::type 1839*58b9f456SAndroid Build Coastguard Workergslice_array<_Tp>::operator>>=(const _Expr& __v) const 1840*58b9f456SAndroid Build Coastguard Worker{ 1841*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 1842*58b9f456SAndroid Build Coastguard Worker size_t __j = 0; 1843*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i, ++__j) 1844*58b9f456SAndroid Build Coastguard Worker __vp_[*__i] >>= __v[__j]; 1845*58b9f456SAndroid Build Coastguard Worker} 1846*58b9f456SAndroid Build Coastguard Worker 1847*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1848*58b9f456SAndroid Build Coastguard Workerinline 1849*58b9f456SAndroid Build Coastguard Workerconst gslice_array<_Tp>& 1850*58b9f456SAndroid Build Coastguard Workergslice_array<_Tp>::operator=(const gslice_array& __ga) const 1851*58b9f456SAndroid Build Coastguard Worker{ 1852*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 1853*58b9f456SAndroid Build Coastguard Worker const value_type* __s = __ga.__vp_; 1854*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_, __j = __ga.__1d_.__begin_; 1855*58b9f456SAndroid Build Coastguard Worker __i != __e; ++__i, ++__j) 1856*58b9f456SAndroid Build Coastguard Worker __vp_[*__i] = __s[*__j]; 1857*58b9f456SAndroid Build Coastguard Worker return *this; 1858*58b9f456SAndroid Build Coastguard Worker} 1859*58b9f456SAndroid Build Coastguard Worker 1860*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1861*58b9f456SAndroid Build Coastguard Workerinline 1862*58b9f456SAndroid Build Coastguard Workervoid 1863*58b9f456SAndroid Build Coastguard Workergslice_array<_Tp>::operator=(const value_type& __x) const 1864*58b9f456SAndroid Build Coastguard Worker{ 1865*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 1866*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i) 1867*58b9f456SAndroid Build Coastguard Worker __vp_[*__i] = __x; 1868*58b9f456SAndroid Build Coastguard Worker} 1869*58b9f456SAndroid Build Coastguard Worker 1870*58b9f456SAndroid Build Coastguard Worker// mask_array 1871*58b9f456SAndroid Build Coastguard Worker 1872*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 1873*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS mask_array 1874*58b9f456SAndroid Build Coastguard Worker{ 1875*58b9f456SAndroid Build Coastguard Workerpublic: 1876*58b9f456SAndroid Build Coastguard Worker typedef _Tp value_type; 1877*58b9f456SAndroid Build Coastguard Worker 1878*58b9f456SAndroid Build Coastguard Workerprivate: 1879*58b9f456SAndroid Build Coastguard Worker value_type* __vp_; 1880*58b9f456SAndroid Build Coastguard Worker valarray<size_t> __1d_; 1881*58b9f456SAndroid Build Coastguard Worker 1882*58b9f456SAndroid Build Coastguard Workerpublic: 1883*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1884*58b9f456SAndroid Build Coastguard Worker typename enable_if 1885*58b9f456SAndroid Build Coastguard Worker < 1886*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1887*58b9f456SAndroid Build Coastguard Worker void 1888*58b9f456SAndroid Build Coastguard Worker >::type 1889*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1890*58b9f456SAndroid Build Coastguard Worker operator=(const _Expr& __v) const; 1891*58b9f456SAndroid Build Coastguard Worker 1892*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1893*58b9f456SAndroid Build Coastguard Worker typename enable_if 1894*58b9f456SAndroid Build Coastguard Worker < 1895*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1896*58b9f456SAndroid Build Coastguard Worker void 1897*58b9f456SAndroid Build Coastguard Worker >::type 1898*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1899*58b9f456SAndroid Build Coastguard Worker operator*=(const _Expr& __v) const; 1900*58b9f456SAndroid Build Coastguard Worker 1901*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1902*58b9f456SAndroid Build Coastguard Worker typename enable_if 1903*58b9f456SAndroid Build Coastguard Worker < 1904*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1905*58b9f456SAndroid Build Coastguard Worker void 1906*58b9f456SAndroid Build Coastguard Worker >::type 1907*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1908*58b9f456SAndroid Build Coastguard Worker operator/=(const _Expr& __v) const; 1909*58b9f456SAndroid Build Coastguard Worker 1910*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1911*58b9f456SAndroid Build Coastguard Worker typename enable_if 1912*58b9f456SAndroid Build Coastguard Worker < 1913*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1914*58b9f456SAndroid Build Coastguard Worker void 1915*58b9f456SAndroid Build Coastguard Worker >::type 1916*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1917*58b9f456SAndroid Build Coastguard Worker operator%=(const _Expr& __v) const; 1918*58b9f456SAndroid Build Coastguard Worker 1919*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1920*58b9f456SAndroid Build Coastguard Worker typename enable_if 1921*58b9f456SAndroid Build Coastguard Worker < 1922*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1923*58b9f456SAndroid Build Coastguard Worker void 1924*58b9f456SAndroid Build Coastguard Worker >::type 1925*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1926*58b9f456SAndroid Build Coastguard Worker operator+=(const _Expr& __v) const; 1927*58b9f456SAndroid Build Coastguard Worker 1928*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1929*58b9f456SAndroid Build Coastguard Worker typename enable_if 1930*58b9f456SAndroid Build Coastguard Worker < 1931*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1932*58b9f456SAndroid Build Coastguard Worker void 1933*58b9f456SAndroid Build Coastguard Worker >::type 1934*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1935*58b9f456SAndroid Build Coastguard Worker operator-=(const _Expr& __v) const; 1936*58b9f456SAndroid Build Coastguard Worker 1937*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1938*58b9f456SAndroid Build Coastguard Worker typename enable_if 1939*58b9f456SAndroid Build Coastguard Worker < 1940*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1941*58b9f456SAndroid Build Coastguard Worker void 1942*58b9f456SAndroid Build Coastguard Worker >::type 1943*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1944*58b9f456SAndroid Build Coastguard Worker operator^=(const _Expr& __v) const; 1945*58b9f456SAndroid Build Coastguard Worker 1946*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1947*58b9f456SAndroid Build Coastguard Worker typename enable_if 1948*58b9f456SAndroid Build Coastguard Worker < 1949*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1950*58b9f456SAndroid Build Coastguard Worker void 1951*58b9f456SAndroid Build Coastguard Worker >::type 1952*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1953*58b9f456SAndroid Build Coastguard Worker operator&=(const _Expr& __v) const; 1954*58b9f456SAndroid Build Coastguard Worker 1955*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1956*58b9f456SAndroid Build Coastguard Worker typename enable_if 1957*58b9f456SAndroid Build Coastguard Worker < 1958*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1959*58b9f456SAndroid Build Coastguard Worker void 1960*58b9f456SAndroid Build Coastguard Worker >::type 1961*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1962*58b9f456SAndroid Build Coastguard Worker operator|=(const _Expr& __v) const; 1963*58b9f456SAndroid Build Coastguard Worker 1964*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1965*58b9f456SAndroid Build Coastguard Worker typename enable_if 1966*58b9f456SAndroid Build Coastguard Worker < 1967*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1968*58b9f456SAndroid Build Coastguard Worker void 1969*58b9f456SAndroid Build Coastguard Worker >::type 1970*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1971*58b9f456SAndroid Build Coastguard Worker operator<<=(const _Expr& __v) const; 1972*58b9f456SAndroid Build Coastguard Worker 1973*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 1974*58b9f456SAndroid Build Coastguard Worker typename enable_if 1975*58b9f456SAndroid Build Coastguard Worker < 1976*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 1977*58b9f456SAndroid Build Coastguard Worker void 1978*58b9f456SAndroid Build Coastguard Worker >::type 1979*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1980*58b9f456SAndroid Build Coastguard Worker operator>>=(const _Expr& __v) const; 1981*58b9f456SAndroid Build Coastguard Worker 1982*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1983*58b9f456SAndroid Build Coastguard Worker const mask_array& operator=(const mask_array& __ma) const; 1984*58b9f456SAndroid Build Coastguard Worker 1985*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1986*58b9f456SAndroid Build Coastguard Worker void operator=(const value_type& __x) const; 1987*58b9f456SAndroid Build Coastguard Worker 1988*58b9f456SAndroid Build Coastguard Worker// mask_array(const mask_array&) = default; 1989*58b9f456SAndroid Build Coastguard Worker// mask_array(mask_array&&) = default; 1990*58b9f456SAndroid Build Coastguard Worker// mask_array& operator=(const mask_array&) = default; 1991*58b9f456SAndroid Build Coastguard Worker// mask_array& operator=(mask_array&&) = default; 1992*58b9f456SAndroid Build Coastguard Worker 1993*58b9f456SAndroid Build Coastguard Workerprivate: 1994*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1995*58b9f456SAndroid Build Coastguard Worker mask_array(const valarray<bool>& __vb, const valarray<value_type>& __v) 1996*58b9f456SAndroid Build Coastguard Worker : __vp_(const_cast<value_type*>(__v.__begin_)), 1997*58b9f456SAndroid Build Coastguard Worker __1d_(static_cast<size_t>(count(__vb.__begin_, __vb.__end_, true))) 1998*58b9f456SAndroid Build Coastguard Worker { 1999*58b9f456SAndroid Build Coastguard Worker size_t __j = 0; 2000*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __vb.size(); ++__i) 2001*58b9f456SAndroid Build Coastguard Worker if (__vb[__i]) 2002*58b9f456SAndroid Build Coastguard Worker __1d_[__j++] = __i; 2003*58b9f456SAndroid Build Coastguard Worker } 2004*58b9f456SAndroid Build Coastguard Worker 2005*58b9f456SAndroid Build Coastguard Worker template <class> friend class valarray; 2006*58b9f456SAndroid Build Coastguard Worker}; 2007*58b9f456SAndroid Build Coastguard Worker 2008*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2009*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2010*58b9f456SAndroid Build Coastguard Workerinline 2011*58b9f456SAndroid Build Coastguard Workertypename enable_if 2012*58b9f456SAndroid Build Coastguard Worker< 2013*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2014*58b9f456SAndroid Build Coastguard Worker void 2015*58b9f456SAndroid Build Coastguard Worker>::type 2016*58b9f456SAndroid Build Coastguard Workermask_array<_Tp>::operator=(const _Expr& __v) const 2017*58b9f456SAndroid Build Coastguard Worker{ 2018*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2019*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2020*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] = __v[__i]; 2021*58b9f456SAndroid Build Coastguard Worker} 2022*58b9f456SAndroid Build Coastguard Worker 2023*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2024*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2025*58b9f456SAndroid Build Coastguard Workerinline 2026*58b9f456SAndroid Build Coastguard Workertypename enable_if 2027*58b9f456SAndroid Build Coastguard Worker< 2028*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2029*58b9f456SAndroid Build Coastguard Worker void 2030*58b9f456SAndroid Build Coastguard Worker>::type 2031*58b9f456SAndroid Build Coastguard Workermask_array<_Tp>::operator*=(const _Expr& __v) const 2032*58b9f456SAndroid Build Coastguard Worker{ 2033*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2034*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2035*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] *= __v[__i]; 2036*58b9f456SAndroid Build Coastguard Worker} 2037*58b9f456SAndroid Build Coastguard Worker 2038*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2039*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2040*58b9f456SAndroid Build Coastguard Workerinline 2041*58b9f456SAndroid Build Coastguard Workertypename enable_if 2042*58b9f456SAndroid Build Coastguard Worker< 2043*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2044*58b9f456SAndroid Build Coastguard Worker void 2045*58b9f456SAndroid Build Coastguard Worker>::type 2046*58b9f456SAndroid Build Coastguard Workermask_array<_Tp>::operator/=(const _Expr& __v) const 2047*58b9f456SAndroid Build Coastguard Worker{ 2048*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2049*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2050*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] /= __v[__i]; 2051*58b9f456SAndroid Build Coastguard Worker} 2052*58b9f456SAndroid Build Coastguard Worker 2053*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2054*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2055*58b9f456SAndroid Build Coastguard Workerinline 2056*58b9f456SAndroid Build Coastguard Workertypename enable_if 2057*58b9f456SAndroid Build Coastguard Worker< 2058*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2059*58b9f456SAndroid Build Coastguard Worker void 2060*58b9f456SAndroid Build Coastguard Worker>::type 2061*58b9f456SAndroid Build Coastguard Workermask_array<_Tp>::operator%=(const _Expr& __v) const 2062*58b9f456SAndroid Build Coastguard Worker{ 2063*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2064*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2065*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] %= __v[__i]; 2066*58b9f456SAndroid Build Coastguard Worker} 2067*58b9f456SAndroid Build Coastguard Worker 2068*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2069*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2070*58b9f456SAndroid Build Coastguard Workerinline 2071*58b9f456SAndroid Build Coastguard Workertypename enable_if 2072*58b9f456SAndroid Build Coastguard Worker< 2073*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2074*58b9f456SAndroid Build Coastguard Worker void 2075*58b9f456SAndroid Build Coastguard Worker>::type 2076*58b9f456SAndroid Build Coastguard Workermask_array<_Tp>::operator+=(const _Expr& __v) const 2077*58b9f456SAndroid Build Coastguard Worker{ 2078*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2079*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2080*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] += __v[__i]; 2081*58b9f456SAndroid Build Coastguard Worker} 2082*58b9f456SAndroid Build Coastguard Worker 2083*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2084*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2085*58b9f456SAndroid Build Coastguard Workerinline 2086*58b9f456SAndroid Build Coastguard Workertypename enable_if 2087*58b9f456SAndroid Build Coastguard Worker< 2088*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2089*58b9f456SAndroid Build Coastguard Worker void 2090*58b9f456SAndroid Build Coastguard Worker>::type 2091*58b9f456SAndroid Build Coastguard Workermask_array<_Tp>::operator-=(const _Expr& __v) const 2092*58b9f456SAndroid Build Coastguard Worker{ 2093*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2094*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2095*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] -= __v[__i]; 2096*58b9f456SAndroid Build Coastguard Worker} 2097*58b9f456SAndroid Build Coastguard Worker 2098*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2099*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2100*58b9f456SAndroid Build Coastguard Workerinline 2101*58b9f456SAndroid Build Coastguard Workertypename enable_if 2102*58b9f456SAndroid Build Coastguard Worker< 2103*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2104*58b9f456SAndroid Build Coastguard Worker void 2105*58b9f456SAndroid Build Coastguard Worker>::type 2106*58b9f456SAndroid Build Coastguard Workermask_array<_Tp>::operator^=(const _Expr& __v) const 2107*58b9f456SAndroid Build Coastguard Worker{ 2108*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2109*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2110*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] ^= __v[__i]; 2111*58b9f456SAndroid Build Coastguard Worker} 2112*58b9f456SAndroid Build Coastguard Worker 2113*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2114*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2115*58b9f456SAndroid Build Coastguard Workerinline 2116*58b9f456SAndroid Build Coastguard Workertypename enable_if 2117*58b9f456SAndroid Build Coastguard Worker< 2118*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2119*58b9f456SAndroid Build Coastguard Worker void 2120*58b9f456SAndroid Build Coastguard Worker>::type 2121*58b9f456SAndroid Build Coastguard Workermask_array<_Tp>::operator&=(const _Expr& __v) const 2122*58b9f456SAndroid Build Coastguard Worker{ 2123*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2124*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2125*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] &= __v[__i]; 2126*58b9f456SAndroid Build Coastguard Worker} 2127*58b9f456SAndroid Build Coastguard Worker 2128*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2129*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2130*58b9f456SAndroid Build Coastguard Workerinline 2131*58b9f456SAndroid Build Coastguard Workertypename enable_if 2132*58b9f456SAndroid Build Coastguard Worker< 2133*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2134*58b9f456SAndroid Build Coastguard Worker void 2135*58b9f456SAndroid Build Coastguard Worker>::type 2136*58b9f456SAndroid Build Coastguard Workermask_array<_Tp>::operator|=(const _Expr& __v) const 2137*58b9f456SAndroid Build Coastguard Worker{ 2138*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2139*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2140*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] |= __v[__i]; 2141*58b9f456SAndroid Build Coastguard Worker} 2142*58b9f456SAndroid Build Coastguard Worker 2143*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2144*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2145*58b9f456SAndroid Build Coastguard Workerinline 2146*58b9f456SAndroid Build Coastguard Workertypename enable_if 2147*58b9f456SAndroid Build Coastguard Worker< 2148*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2149*58b9f456SAndroid Build Coastguard Worker void 2150*58b9f456SAndroid Build Coastguard Worker>::type 2151*58b9f456SAndroid Build Coastguard Workermask_array<_Tp>::operator<<=(const _Expr& __v) const 2152*58b9f456SAndroid Build Coastguard Worker{ 2153*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2154*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2155*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] <<= __v[__i]; 2156*58b9f456SAndroid Build Coastguard Worker} 2157*58b9f456SAndroid Build Coastguard Worker 2158*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2159*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2160*58b9f456SAndroid Build Coastguard Workerinline 2161*58b9f456SAndroid Build Coastguard Workertypename enable_if 2162*58b9f456SAndroid Build Coastguard Worker< 2163*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2164*58b9f456SAndroid Build Coastguard Worker void 2165*58b9f456SAndroid Build Coastguard Worker>::type 2166*58b9f456SAndroid Build Coastguard Workermask_array<_Tp>::operator>>=(const _Expr& __v) const 2167*58b9f456SAndroid Build Coastguard Worker{ 2168*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2169*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2170*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] >>= __v[__i]; 2171*58b9f456SAndroid Build Coastguard Worker} 2172*58b9f456SAndroid Build Coastguard Worker 2173*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2174*58b9f456SAndroid Build Coastguard Workerinline 2175*58b9f456SAndroid Build Coastguard Workerconst mask_array<_Tp>& 2176*58b9f456SAndroid Build Coastguard Workermask_array<_Tp>::operator=(const mask_array& __ma) const 2177*58b9f456SAndroid Build Coastguard Worker{ 2178*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2179*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2180*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] = __ma.__vp_[__1d_[__i]]; 2181*58b9f456SAndroid Build Coastguard Worker return *this; 2182*58b9f456SAndroid Build Coastguard Worker} 2183*58b9f456SAndroid Build Coastguard Worker 2184*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2185*58b9f456SAndroid Build Coastguard Workerinline 2186*58b9f456SAndroid Build Coastguard Workervoid 2187*58b9f456SAndroid Build Coastguard Workermask_array<_Tp>::operator=(const value_type& __x) const 2188*58b9f456SAndroid Build Coastguard Worker{ 2189*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2190*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2191*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] = __x; 2192*58b9f456SAndroid Build Coastguard Worker} 2193*58b9f456SAndroid Build Coastguard Worker 2194*58b9f456SAndroid Build Coastguard Workertemplate <class _ValExpr> 2195*58b9f456SAndroid Build Coastguard Workerclass __mask_expr 2196*58b9f456SAndroid Build Coastguard Worker{ 2197*58b9f456SAndroid Build Coastguard Worker typedef typename remove_reference<_ValExpr>::type _RmExpr; 2198*58b9f456SAndroid Build Coastguard Workerpublic: 2199*58b9f456SAndroid Build Coastguard Worker typedef typename _RmExpr::value_type value_type; 2200*58b9f456SAndroid Build Coastguard Worker typedef value_type result_type; 2201*58b9f456SAndroid Build Coastguard Worker 2202*58b9f456SAndroid Build Coastguard Workerprivate: 2203*58b9f456SAndroid Build Coastguard Worker _ValExpr __expr_; 2204*58b9f456SAndroid Build Coastguard Worker valarray<size_t> __1d_; 2205*58b9f456SAndroid Build Coastguard Worker 2206*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2207*58b9f456SAndroid Build Coastguard Worker __mask_expr(const valarray<bool>& __vb, const _RmExpr& __e) 2208*58b9f456SAndroid Build Coastguard Worker : __expr_(__e), 2209*58b9f456SAndroid Build Coastguard Worker __1d_(static_cast<size_t>(count(__vb.__begin_, __vb.__end_, true))) 2210*58b9f456SAndroid Build Coastguard Worker { 2211*58b9f456SAndroid Build Coastguard Worker size_t __j = 0; 2212*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __vb.size(); ++__i) 2213*58b9f456SAndroid Build Coastguard Worker if (__vb[__i]) 2214*58b9f456SAndroid Build Coastguard Worker __1d_[__j++] = __i; 2215*58b9f456SAndroid Build Coastguard Worker } 2216*58b9f456SAndroid Build Coastguard Worker 2217*58b9f456SAndroid Build Coastguard Workerpublic: 2218*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2219*58b9f456SAndroid Build Coastguard Worker result_type operator[](size_t __i) const 2220*58b9f456SAndroid Build Coastguard Worker {return __expr_[__1d_[__i]];} 2221*58b9f456SAndroid Build Coastguard Worker 2222*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2223*58b9f456SAndroid Build Coastguard Worker size_t size() const {return __1d_.size();} 2224*58b9f456SAndroid Build Coastguard Worker 2225*58b9f456SAndroid Build Coastguard Worker template <class> friend class valarray; 2226*58b9f456SAndroid Build Coastguard Worker}; 2227*58b9f456SAndroid Build Coastguard Worker 2228*58b9f456SAndroid Build Coastguard Worker// indirect_array 2229*58b9f456SAndroid Build Coastguard Worker 2230*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2231*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS indirect_array 2232*58b9f456SAndroid Build Coastguard Worker{ 2233*58b9f456SAndroid Build Coastguard Workerpublic: 2234*58b9f456SAndroid Build Coastguard Worker typedef _Tp value_type; 2235*58b9f456SAndroid Build Coastguard Worker 2236*58b9f456SAndroid Build Coastguard Workerprivate: 2237*58b9f456SAndroid Build Coastguard Worker value_type* __vp_; 2238*58b9f456SAndroid Build Coastguard Worker valarray<size_t> __1d_; 2239*58b9f456SAndroid Build Coastguard Worker 2240*58b9f456SAndroid Build Coastguard Workerpublic: 2241*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 2242*58b9f456SAndroid Build Coastguard Worker typename enable_if 2243*58b9f456SAndroid Build Coastguard Worker < 2244*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2245*58b9f456SAndroid Build Coastguard Worker void 2246*58b9f456SAndroid Build Coastguard Worker >::type 2247*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2248*58b9f456SAndroid Build Coastguard Worker operator=(const _Expr& __v) const; 2249*58b9f456SAndroid Build Coastguard Worker 2250*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 2251*58b9f456SAndroid Build Coastguard Worker typename enable_if 2252*58b9f456SAndroid Build Coastguard Worker < 2253*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2254*58b9f456SAndroid Build Coastguard Worker void 2255*58b9f456SAndroid Build Coastguard Worker >::type 2256*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2257*58b9f456SAndroid Build Coastguard Worker operator*=(const _Expr& __v) const; 2258*58b9f456SAndroid Build Coastguard Worker 2259*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 2260*58b9f456SAndroid Build Coastguard Worker typename enable_if 2261*58b9f456SAndroid Build Coastguard Worker < 2262*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2263*58b9f456SAndroid Build Coastguard Worker void 2264*58b9f456SAndroid Build Coastguard Worker >::type 2265*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2266*58b9f456SAndroid Build Coastguard Worker operator/=(const _Expr& __v) const; 2267*58b9f456SAndroid Build Coastguard Worker 2268*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 2269*58b9f456SAndroid Build Coastguard Worker typename enable_if 2270*58b9f456SAndroid Build Coastguard Worker < 2271*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2272*58b9f456SAndroid Build Coastguard Worker void 2273*58b9f456SAndroid Build Coastguard Worker >::type 2274*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2275*58b9f456SAndroid Build Coastguard Worker operator%=(const _Expr& __v) const; 2276*58b9f456SAndroid Build Coastguard Worker 2277*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 2278*58b9f456SAndroid Build Coastguard Worker typename enable_if 2279*58b9f456SAndroid Build Coastguard Worker < 2280*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2281*58b9f456SAndroid Build Coastguard Worker void 2282*58b9f456SAndroid Build Coastguard Worker >::type 2283*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2284*58b9f456SAndroid Build Coastguard Worker operator+=(const _Expr& __v) const; 2285*58b9f456SAndroid Build Coastguard Worker 2286*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 2287*58b9f456SAndroid Build Coastguard Worker typename enable_if 2288*58b9f456SAndroid Build Coastguard Worker < 2289*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2290*58b9f456SAndroid Build Coastguard Worker void 2291*58b9f456SAndroid Build Coastguard Worker >::type 2292*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2293*58b9f456SAndroid Build Coastguard Worker operator-=(const _Expr& __v) const; 2294*58b9f456SAndroid Build Coastguard Worker 2295*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 2296*58b9f456SAndroid Build Coastguard Worker typename enable_if 2297*58b9f456SAndroid Build Coastguard Worker < 2298*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2299*58b9f456SAndroid Build Coastguard Worker void 2300*58b9f456SAndroid Build Coastguard Worker >::type 2301*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2302*58b9f456SAndroid Build Coastguard Worker operator^=(const _Expr& __v) const; 2303*58b9f456SAndroid Build Coastguard Worker 2304*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 2305*58b9f456SAndroid Build Coastguard Worker typename enable_if 2306*58b9f456SAndroid Build Coastguard Worker < 2307*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2308*58b9f456SAndroid Build Coastguard Worker void 2309*58b9f456SAndroid Build Coastguard Worker >::type 2310*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2311*58b9f456SAndroid Build Coastguard Worker operator&=(const _Expr& __v) const; 2312*58b9f456SAndroid Build Coastguard Worker 2313*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 2314*58b9f456SAndroid Build Coastguard Worker typename enable_if 2315*58b9f456SAndroid Build Coastguard Worker < 2316*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2317*58b9f456SAndroid Build Coastguard Worker void 2318*58b9f456SAndroid Build Coastguard Worker >::type 2319*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2320*58b9f456SAndroid Build Coastguard Worker operator|=(const _Expr& __v) const; 2321*58b9f456SAndroid Build Coastguard Worker 2322*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 2323*58b9f456SAndroid Build Coastguard Worker typename enable_if 2324*58b9f456SAndroid Build Coastguard Worker < 2325*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2326*58b9f456SAndroid Build Coastguard Worker void 2327*58b9f456SAndroid Build Coastguard Worker >::type 2328*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2329*58b9f456SAndroid Build Coastguard Worker operator<<=(const _Expr& __v) const; 2330*58b9f456SAndroid Build Coastguard Worker 2331*58b9f456SAndroid Build Coastguard Worker template <class _Expr> 2332*58b9f456SAndroid Build Coastguard Worker typename enable_if 2333*58b9f456SAndroid Build Coastguard Worker < 2334*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2335*58b9f456SAndroid Build Coastguard Worker void 2336*58b9f456SAndroid Build Coastguard Worker >::type 2337*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2338*58b9f456SAndroid Build Coastguard Worker operator>>=(const _Expr& __v) const; 2339*58b9f456SAndroid Build Coastguard Worker 2340*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2341*58b9f456SAndroid Build Coastguard Worker const indirect_array& operator=(const indirect_array& __ia) const; 2342*58b9f456SAndroid Build Coastguard Worker 2343*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2344*58b9f456SAndroid Build Coastguard Worker void operator=(const value_type& __x) const; 2345*58b9f456SAndroid Build Coastguard Worker 2346*58b9f456SAndroid Build Coastguard Worker// indirect_array(const indirect_array&) = default; 2347*58b9f456SAndroid Build Coastguard Worker// indirect_array(indirect_array&&) = default; 2348*58b9f456SAndroid Build Coastguard Worker// indirect_array& operator=(const indirect_array&) = default; 2349*58b9f456SAndroid Build Coastguard Worker// indirect_array& operator=(indirect_array&&) = default; 2350*58b9f456SAndroid Build Coastguard Worker 2351*58b9f456SAndroid Build Coastguard Workerprivate: 2352*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2353*58b9f456SAndroid Build Coastguard Worker indirect_array(const valarray<size_t>& __ia, const valarray<value_type>& __v) 2354*58b9f456SAndroid Build Coastguard Worker : __vp_(const_cast<value_type*>(__v.__begin_)), 2355*58b9f456SAndroid Build Coastguard Worker __1d_(__ia) 2356*58b9f456SAndroid Build Coastguard Worker {} 2357*58b9f456SAndroid Build Coastguard Worker 2358*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 2359*58b9f456SAndroid Build Coastguard Worker 2360*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2361*58b9f456SAndroid Build Coastguard Worker indirect_array(valarray<size_t>&& __ia, const valarray<value_type>& __v) 2362*58b9f456SAndroid Build Coastguard Worker : __vp_(const_cast<value_type*>(__v.__begin_)), 2363*58b9f456SAndroid Build Coastguard Worker __1d_(move(__ia)) 2364*58b9f456SAndroid Build Coastguard Worker {} 2365*58b9f456SAndroid Build Coastguard Worker 2366*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 2367*58b9f456SAndroid Build Coastguard Worker 2368*58b9f456SAndroid Build Coastguard Worker template <class> friend class valarray; 2369*58b9f456SAndroid Build Coastguard Worker}; 2370*58b9f456SAndroid Build Coastguard Worker 2371*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2372*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2373*58b9f456SAndroid Build Coastguard Workerinline 2374*58b9f456SAndroid Build Coastguard Workertypename enable_if 2375*58b9f456SAndroid Build Coastguard Worker< 2376*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2377*58b9f456SAndroid Build Coastguard Worker void 2378*58b9f456SAndroid Build Coastguard Worker>::type 2379*58b9f456SAndroid Build Coastguard Workerindirect_array<_Tp>::operator=(const _Expr& __v) const 2380*58b9f456SAndroid Build Coastguard Worker{ 2381*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2382*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2383*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] = __v[__i]; 2384*58b9f456SAndroid Build Coastguard Worker} 2385*58b9f456SAndroid Build Coastguard Worker 2386*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2387*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2388*58b9f456SAndroid Build Coastguard Workerinline 2389*58b9f456SAndroid Build Coastguard Workertypename enable_if 2390*58b9f456SAndroid Build Coastguard Worker< 2391*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2392*58b9f456SAndroid Build Coastguard Worker void 2393*58b9f456SAndroid Build Coastguard Worker>::type 2394*58b9f456SAndroid Build Coastguard Workerindirect_array<_Tp>::operator*=(const _Expr& __v) const 2395*58b9f456SAndroid Build Coastguard Worker{ 2396*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2397*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2398*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] *= __v[__i]; 2399*58b9f456SAndroid Build Coastguard Worker} 2400*58b9f456SAndroid Build Coastguard Worker 2401*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2402*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2403*58b9f456SAndroid Build Coastguard Workerinline 2404*58b9f456SAndroid Build Coastguard Workertypename enable_if 2405*58b9f456SAndroid Build Coastguard Worker< 2406*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2407*58b9f456SAndroid Build Coastguard Worker void 2408*58b9f456SAndroid Build Coastguard Worker>::type 2409*58b9f456SAndroid Build Coastguard Workerindirect_array<_Tp>::operator/=(const _Expr& __v) const 2410*58b9f456SAndroid Build Coastguard Worker{ 2411*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2412*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2413*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] /= __v[__i]; 2414*58b9f456SAndroid Build Coastguard Worker} 2415*58b9f456SAndroid Build Coastguard Worker 2416*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2417*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2418*58b9f456SAndroid Build Coastguard Workerinline 2419*58b9f456SAndroid Build Coastguard Workertypename enable_if 2420*58b9f456SAndroid Build Coastguard Worker< 2421*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2422*58b9f456SAndroid Build Coastguard Worker void 2423*58b9f456SAndroid Build Coastguard Worker>::type 2424*58b9f456SAndroid Build Coastguard Workerindirect_array<_Tp>::operator%=(const _Expr& __v) const 2425*58b9f456SAndroid Build Coastguard Worker{ 2426*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2427*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2428*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] %= __v[__i]; 2429*58b9f456SAndroid Build Coastguard Worker} 2430*58b9f456SAndroid Build Coastguard Worker 2431*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2432*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2433*58b9f456SAndroid Build Coastguard Workerinline 2434*58b9f456SAndroid Build Coastguard Workertypename enable_if 2435*58b9f456SAndroid Build Coastguard Worker< 2436*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2437*58b9f456SAndroid Build Coastguard Worker void 2438*58b9f456SAndroid Build Coastguard Worker>::type 2439*58b9f456SAndroid Build Coastguard Workerindirect_array<_Tp>::operator+=(const _Expr& __v) const 2440*58b9f456SAndroid Build Coastguard Worker{ 2441*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2442*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2443*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] += __v[__i]; 2444*58b9f456SAndroid Build Coastguard Worker} 2445*58b9f456SAndroid Build Coastguard Worker 2446*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2447*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2448*58b9f456SAndroid Build Coastguard Workerinline 2449*58b9f456SAndroid Build Coastguard Workertypename enable_if 2450*58b9f456SAndroid Build Coastguard Worker< 2451*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2452*58b9f456SAndroid Build Coastguard Worker void 2453*58b9f456SAndroid Build Coastguard Worker>::type 2454*58b9f456SAndroid Build Coastguard Workerindirect_array<_Tp>::operator-=(const _Expr& __v) const 2455*58b9f456SAndroid Build Coastguard Worker{ 2456*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2457*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2458*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] -= __v[__i]; 2459*58b9f456SAndroid Build Coastguard Worker} 2460*58b9f456SAndroid Build Coastguard Worker 2461*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2462*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2463*58b9f456SAndroid Build Coastguard Workerinline 2464*58b9f456SAndroid Build Coastguard Workertypename enable_if 2465*58b9f456SAndroid Build Coastguard Worker< 2466*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2467*58b9f456SAndroid Build Coastguard Worker void 2468*58b9f456SAndroid Build Coastguard Worker>::type 2469*58b9f456SAndroid Build Coastguard Workerindirect_array<_Tp>::operator^=(const _Expr& __v) const 2470*58b9f456SAndroid Build Coastguard Worker{ 2471*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2472*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2473*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] ^= __v[__i]; 2474*58b9f456SAndroid Build Coastguard Worker} 2475*58b9f456SAndroid Build Coastguard Worker 2476*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2477*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2478*58b9f456SAndroid Build Coastguard Workerinline 2479*58b9f456SAndroid Build Coastguard Workertypename enable_if 2480*58b9f456SAndroid Build Coastguard Worker< 2481*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2482*58b9f456SAndroid Build Coastguard Worker void 2483*58b9f456SAndroid Build Coastguard Worker>::type 2484*58b9f456SAndroid Build Coastguard Workerindirect_array<_Tp>::operator&=(const _Expr& __v) const 2485*58b9f456SAndroid Build Coastguard Worker{ 2486*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2487*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2488*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] &= __v[__i]; 2489*58b9f456SAndroid Build Coastguard Worker} 2490*58b9f456SAndroid Build Coastguard Worker 2491*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2492*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2493*58b9f456SAndroid Build Coastguard Workerinline 2494*58b9f456SAndroid Build Coastguard Workertypename enable_if 2495*58b9f456SAndroid Build Coastguard Worker< 2496*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2497*58b9f456SAndroid Build Coastguard Worker void 2498*58b9f456SAndroid Build Coastguard Worker>::type 2499*58b9f456SAndroid Build Coastguard Workerindirect_array<_Tp>::operator|=(const _Expr& __v) const 2500*58b9f456SAndroid Build Coastguard Worker{ 2501*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2502*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2503*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] |= __v[__i]; 2504*58b9f456SAndroid Build Coastguard Worker} 2505*58b9f456SAndroid Build Coastguard Worker 2506*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2507*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2508*58b9f456SAndroid Build Coastguard Workerinline 2509*58b9f456SAndroid Build Coastguard Workertypename enable_if 2510*58b9f456SAndroid Build Coastguard Worker< 2511*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2512*58b9f456SAndroid Build Coastguard Worker void 2513*58b9f456SAndroid Build Coastguard Worker>::type 2514*58b9f456SAndroid Build Coastguard Workerindirect_array<_Tp>::operator<<=(const _Expr& __v) const 2515*58b9f456SAndroid Build Coastguard Worker{ 2516*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2517*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2518*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] <<= __v[__i]; 2519*58b9f456SAndroid Build Coastguard Worker} 2520*58b9f456SAndroid Build Coastguard Worker 2521*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2522*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 2523*58b9f456SAndroid Build Coastguard Workerinline 2524*58b9f456SAndroid Build Coastguard Workertypename enable_if 2525*58b9f456SAndroid Build Coastguard Worker< 2526*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 2527*58b9f456SAndroid Build Coastguard Worker void 2528*58b9f456SAndroid Build Coastguard Worker>::type 2529*58b9f456SAndroid Build Coastguard Workerindirect_array<_Tp>::operator>>=(const _Expr& __v) const 2530*58b9f456SAndroid Build Coastguard Worker{ 2531*58b9f456SAndroid Build Coastguard Worker size_t __n = __1d_.size(); 2532*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i < __n; ++__i) 2533*58b9f456SAndroid Build Coastguard Worker __vp_[__1d_[__i]] >>= __v[__i]; 2534*58b9f456SAndroid Build Coastguard Worker} 2535*58b9f456SAndroid Build Coastguard Worker 2536*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2537*58b9f456SAndroid Build Coastguard Workerinline 2538*58b9f456SAndroid Build Coastguard Workerconst indirect_array<_Tp>& 2539*58b9f456SAndroid Build Coastguard Workerindirect_array<_Tp>::operator=(const indirect_array& __ia) const 2540*58b9f456SAndroid Build Coastguard Worker{ 2541*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 2542*58b9f456SAndroid Build Coastguard Worker const value_type* __s = __ia.__vp_; 2543*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_, __j = __ia.__1d_.__begin_; 2544*58b9f456SAndroid Build Coastguard Worker __i != __e; ++__i, ++__j) 2545*58b9f456SAndroid Build Coastguard Worker __vp_[*__i] = __s[*__j]; 2546*58b9f456SAndroid Build Coastguard Worker return *this; 2547*58b9f456SAndroid Build Coastguard Worker} 2548*58b9f456SAndroid Build Coastguard Worker 2549*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2550*58b9f456SAndroid Build Coastguard Workerinline 2551*58b9f456SAndroid Build Coastguard Workervoid 2552*58b9f456SAndroid Build Coastguard Workerindirect_array<_Tp>::operator=(const value_type& __x) const 2553*58b9f456SAndroid Build Coastguard Worker{ 2554*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 2555*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __1d_.__begin_, __e = __1d_.__end_; __i != __e; ++__i) 2556*58b9f456SAndroid Build Coastguard Worker __vp_[*__i] = __x; 2557*58b9f456SAndroid Build Coastguard Worker} 2558*58b9f456SAndroid Build Coastguard Worker 2559*58b9f456SAndroid Build Coastguard Workertemplate <class _ValExpr> 2560*58b9f456SAndroid Build Coastguard Workerclass __indirect_expr 2561*58b9f456SAndroid Build Coastguard Worker{ 2562*58b9f456SAndroid Build Coastguard Worker typedef typename remove_reference<_ValExpr>::type _RmExpr; 2563*58b9f456SAndroid Build Coastguard Workerpublic: 2564*58b9f456SAndroid Build Coastguard Worker typedef typename _RmExpr::value_type value_type; 2565*58b9f456SAndroid Build Coastguard Worker typedef value_type result_type; 2566*58b9f456SAndroid Build Coastguard Worker 2567*58b9f456SAndroid Build Coastguard Workerprivate: 2568*58b9f456SAndroid Build Coastguard Worker _ValExpr __expr_; 2569*58b9f456SAndroid Build Coastguard Worker valarray<size_t> __1d_; 2570*58b9f456SAndroid Build Coastguard Worker 2571*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2572*58b9f456SAndroid Build Coastguard Worker __indirect_expr(const valarray<size_t>& __ia, const _RmExpr& __e) 2573*58b9f456SAndroid Build Coastguard Worker : __expr_(__e), 2574*58b9f456SAndroid Build Coastguard Worker __1d_(__ia) 2575*58b9f456SAndroid Build Coastguard Worker {} 2576*58b9f456SAndroid Build Coastguard Worker 2577*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 2578*58b9f456SAndroid Build Coastguard Worker 2579*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2580*58b9f456SAndroid Build Coastguard Worker __indirect_expr(valarray<size_t>&& __ia, const _RmExpr& __e) 2581*58b9f456SAndroid Build Coastguard Worker : __expr_(__e), 2582*58b9f456SAndroid Build Coastguard Worker __1d_(move(__ia)) 2583*58b9f456SAndroid Build Coastguard Worker {} 2584*58b9f456SAndroid Build Coastguard Worker 2585*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 2586*58b9f456SAndroid Build Coastguard Worker 2587*58b9f456SAndroid Build Coastguard Workerpublic: 2588*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2589*58b9f456SAndroid Build Coastguard Worker result_type operator[](size_t __i) const 2590*58b9f456SAndroid Build Coastguard Worker {return __expr_[__1d_[__i]];} 2591*58b9f456SAndroid Build Coastguard Worker 2592*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2593*58b9f456SAndroid Build Coastguard Worker size_t size() const {return __1d_.size();} 2594*58b9f456SAndroid Build Coastguard Worker 2595*58b9f456SAndroid Build Coastguard Worker template <class> friend class _LIBCPP_TEMPLATE_VIS valarray; 2596*58b9f456SAndroid Build Coastguard Worker}; 2597*58b9f456SAndroid Build Coastguard Worker 2598*58b9f456SAndroid Build Coastguard Workertemplate<class _ValExpr> 2599*58b9f456SAndroid Build Coastguard Workerclass __val_expr 2600*58b9f456SAndroid Build Coastguard Worker{ 2601*58b9f456SAndroid Build Coastguard Worker typedef typename remove_reference<_ValExpr>::type _RmExpr; 2602*58b9f456SAndroid Build Coastguard Worker 2603*58b9f456SAndroid Build Coastguard Worker _ValExpr __expr_; 2604*58b9f456SAndroid Build Coastguard Workerpublic: 2605*58b9f456SAndroid Build Coastguard Worker typedef typename _RmExpr::value_type value_type; 2606*58b9f456SAndroid Build Coastguard Worker typedef typename _RmExpr::result_type result_type; 2607*58b9f456SAndroid Build Coastguard Worker 2608*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2609*58b9f456SAndroid Build Coastguard Worker explicit __val_expr(const _RmExpr& __e) : __expr_(__e) {} 2610*58b9f456SAndroid Build Coastguard Worker 2611*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2612*58b9f456SAndroid Build Coastguard Worker result_type operator[](size_t __i) const 2613*58b9f456SAndroid Build Coastguard Worker {return __expr_[__i];} 2614*58b9f456SAndroid Build Coastguard Worker 2615*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2616*58b9f456SAndroid Build Coastguard Worker __val_expr<__slice_expr<_ValExpr> > operator[](slice __s) const 2617*58b9f456SAndroid Build Coastguard Worker {return __val_expr<__slice_expr<_ValExpr> >(__expr_, __s);} 2618*58b9f456SAndroid Build Coastguard Worker 2619*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2620*58b9f456SAndroid Build Coastguard Worker __val_expr<__indirect_expr<_ValExpr> > operator[](const gslice& __gs) const 2621*58b9f456SAndroid Build Coastguard Worker {return __val_expr<__indirect_expr<_ValExpr> >(__expr_, __gs.__1d_);} 2622*58b9f456SAndroid Build Coastguard Worker 2623*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2624*58b9f456SAndroid Build Coastguard Worker __val_expr<__mask_expr<_ValExpr> > operator[](const valarray<bool>& __vb) const 2625*58b9f456SAndroid Build Coastguard Worker {return __val_expr<__mask_expr<_ValExpr> >(__expr_, __vb);} 2626*58b9f456SAndroid Build Coastguard Worker 2627*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2628*58b9f456SAndroid Build Coastguard Worker __val_expr<__indirect_expr<_ValExpr> > operator[](const valarray<size_t>& __vs) const 2629*58b9f456SAndroid Build Coastguard Worker {return __val_expr<__indirect_expr<_ValExpr> >(__expr_, __vs);} 2630*58b9f456SAndroid Build Coastguard Worker 2631*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2632*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<__unary_plus<value_type>, _ValExpr> > 2633*58b9f456SAndroid Build Coastguard Worker operator+() const 2634*58b9f456SAndroid Build Coastguard Worker { 2635*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<__unary_plus<value_type>, _ValExpr> _NewExpr; 2636*58b9f456SAndroid Build Coastguard Worker return __val_expr<_NewExpr>(_NewExpr(__unary_plus<value_type>(), __expr_)); 2637*58b9f456SAndroid Build Coastguard Worker } 2638*58b9f456SAndroid Build Coastguard Worker 2639*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2640*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<negate<value_type>, _ValExpr> > 2641*58b9f456SAndroid Build Coastguard Worker operator-() const 2642*58b9f456SAndroid Build Coastguard Worker { 2643*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<negate<value_type>, _ValExpr> _NewExpr; 2644*58b9f456SAndroid Build Coastguard Worker return __val_expr<_NewExpr>(_NewExpr(negate<value_type>(), __expr_)); 2645*58b9f456SAndroid Build Coastguard Worker } 2646*58b9f456SAndroid Build Coastguard Worker 2647*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2648*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<__bit_not<value_type>, _ValExpr> > 2649*58b9f456SAndroid Build Coastguard Worker operator~() const 2650*58b9f456SAndroid Build Coastguard Worker { 2651*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<__bit_not<value_type>, _ValExpr> _NewExpr; 2652*58b9f456SAndroid Build Coastguard Worker return __val_expr<_NewExpr>(_NewExpr(__bit_not<value_type>(), __expr_)); 2653*58b9f456SAndroid Build Coastguard Worker } 2654*58b9f456SAndroid Build Coastguard Worker 2655*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2656*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<logical_not<value_type>, _ValExpr> > 2657*58b9f456SAndroid Build Coastguard Worker operator!() const 2658*58b9f456SAndroid Build Coastguard Worker { 2659*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<logical_not<value_type>, _ValExpr> _NewExpr; 2660*58b9f456SAndroid Build Coastguard Worker return __val_expr<_NewExpr>(_NewExpr(logical_not<value_type>(), __expr_)); 2661*58b9f456SAndroid Build Coastguard Worker } 2662*58b9f456SAndroid Build Coastguard Worker 2663*58b9f456SAndroid Build Coastguard Worker operator valarray<result_type>() const; 2664*58b9f456SAndroid Build Coastguard Worker 2665*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2666*58b9f456SAndroid Build Coastguard Worker size_t size() const {return __expr_.size();} 2667*58b9f456SAndroid Build Coastguard Worker 2668*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2669*58b9f456SAndroid Build Coastguard Worker result_type sum() const 2670*58b9f456SAndroid Build Coastguard Worker { 2671*58b9f456SAndroid Build Coastguard Worker size_t __n = __expr_.size(); 2672*58b9f456SAndroid Build Coastguard Worker result_type __r = __n ? __expr_[0] : result_type(); 2673*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 1; __i < __n; ++__i) 2674*58b9f456SAndroid Build Coastguard Worker __r += __expr_[__i]; 2675*58b9f456SAndroid Build Coastguard Worker return __r; 2676*58b9f456SAndroid Build Coastguard Worker } 2677*58b9f456SAndroid Build Coastguard Worker 2678*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2679*58b9f456SAndroid Build Coastguard Worker result_type min() const 2680*58b9f456SAndroid Build Coastguard Worker { 2681*58b9f456SAndroid Build Coastguard Worker size_t __n = size(); 2682*58b9f456SAndroid Build Coastguard Worker result_type __r = __n ? (*this)[0] : result_type(); 2683*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 1; __i < __n; ++__i) 2684*58b9f456SAndroid Build Coastguard Worker { 2685*58b9f456SAndroid Build Coastguard Worker result_type __x = __expr_[__i]; 2686*58b9f456SAndroid Build Coastguard Worker if (__x < __r) 2687*58b9f456SAndroid Build Coastguard Worker __r = __x; 2688*58b9f456SAndroid Build Coastguard Worker } 2689*58b9f456SAndroid Build Coastguard Worker return __r; 2690*58b9f456SAndroid Build Coastguard Worker } 2691*58b9f456SAndroid Build Coastguard Worker 2692*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2693*58b9f456SAndroid Build Coastguard Worker result_type max() const 2694*58b9f456SAndroid Build Coastguard Worker { 2695*58b9f456SAndroid Build Coastguard Worker size_t __n = size(); 2696*58b9f456SAndroid Build Coastguard Worker result_type __r = __n ? (*this)[0] : result_type(); 2697*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 1; __i < __n; ++__i) 2698*58b9f456SAndroid Build Coastguard Worker { 2699*58b9f456SAndroid Build Coastguard Worker result_type __x = __expr_[__i]; 2700*58b9f456SAndroid Build Coastguard Worker if (__r < __x) 2701*58b9f456SAndroid Build Coastguard Worker __r = __x; 2702*58b9f456SAndroid Build Coastguard Worker } 2703*58b9f456SAndroid Build Coastguard Worker return __r; 2704*58b9f456SAndroid Build Coastguard Worker } 2705*58b9f456SAndroid Build Coastguard Worker 2706*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2707*58b9f456SAndroid Build Coastguard Worker __val_expr<__shift_expr<_ValExpr> > shift (int __i) const 2708*58b9f456SAndroid Build Coastguard Worker {return __val_expr<__shift_expr<_ValExpr> >(__shift_expr<_ValExpr>(__i, __expr_));} 2709*58b9f456SAndroid Build Coastguard Worker 2710*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2711*58b9f456SAndroid Build Coastguard Worker __val_expr<__cshift_expr<_ValExpr> > cshift(int __i) const 2712*58b9f456SAndroid Build Coastguard Worker {return __val_expr<__cshift_expr<_ValExpr> >(__cshift_expr<_ValExpr>(__i, __expr_));} 2713*58b9f456SAndroid Build Coastguard Worker 2714*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2715*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<__apply_expr<value_type, value_type(*)(value_type)>, _ValExpr> > 2716*58b9f456SAndroid Build Coastguard Worker apply(value_type __f(value_type)) const 2717*58b9f456SAndroid Build Coastguard Worker { 2718*58b9f456SAndroid Build Coastguard Worker typedef __apply_expr<value_type, value_type(*)(value_type)> _Op; 2719*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<_Op, _ValExpr> _NewExpr; 2720*58b9f456SAndroid Build Coastguard Worker return __val_expr<_NewExpr>(_NewExpr(_Op(__f), __expr_)); 2721*58b9f456SAndroid Build Coastguard Worker } 2722*58b9f456SAndroid Build Coastguard Worker 2723*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 2724*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<__apply_expr<value_type, value_type(*)(const value_type&)>, _ValExpr> > 2725*58b9f456SAndroid Build Coastguard Worker apply(value_type __f(const value_type&)) const 2726*58b9f456SAndroid Build Coastguard Worker { 2727*58b9f456SAndroid Build Coastguard Worker typedef __apply_expr<value_type, value_type(*)(const value_type&)> _Op; 2728*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<_Op, _ValExpr> _NewExpr; 2729*58b9f456SAndroid Build Coastguard Worker return __val_expr<_NewExpr>(_NewExpr(_Op(__f), __expr_)); 2730*58b9f456SAndroid Build Coastguard Worker } 2731*58b9f456SAndroid Build Coastguard Worker}; 2732*58b9f456SAndroid Build Coastguard Worker 2733*58b9f456SAndroid Build Coastguard Workertemplate<class _ValExpr> 2734*58b9f456SAndroid Build Coastguard Worker__val_expr<_ValExpr>::operator valarray<__val_expr::result_type>() const 2735*58b9f456SAndroid Build Coastguard Worker{ 2736*58b9f456SAndroid Build Coastguard Worker valarray<result_type> __r; 2737*58b9f456SAndroid Build Coastguard Worker size_t __n = __expr_.size(); 2738*58b9f456SAndroid Build Coastguard Worker if (__n) 2739*58b9f456SAndroid Build Coastguard Worker { 2740*58b9f456SAndroid Build Coastguard Worker __r.__begin_ = 2741*58b9f456SAndroid Build Coastguard Worker __r.__end_ = 2742*58b9f456SAndroid Build Coastguard Worker static_cast<result_type*>( 2743*58b9f456SAndroid Build Coastguard Worker _VSTD::__libcpp_allocate(__n * sizeof(result_type), __alignof(result_type))); 2744*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i != __n; ++__r.__end_, ++__i) 2745*58b9f456SAndroid Build Coastguard Worker ::new (__r.__end_) result_type(__expr_[__i]); 2746*58b9f456SAndroid Build Coastguard Worker } 2747*58b9f456SAndroid Build Coastguard Worker return __r; 2748*58b9f456SAndroid Build Coastguard Worker} 2749*58b9f456SAndroid Build Coastguard Worker 2750*58b9f456SAndroid Build Coastguard Worker// valarray 2751*58b9f456SAndroid Build Coastguard Worker 2752*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2753*58b9f456SAndroid Build Coastguard Workerinline 2754*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::valarray(size_t __n) 2755*58b9f456SAndroid Build Coastguard Worker : __begin_(0), 2756*58b9f456SAndroid Build Coastguard Worker __end_(0) 2757*58b9f456SAndroid Build Coastguard Worker{ 2758*58b9f456SAndroid Build Coastguard Worker if (__n) 2759*58b9f456SAndroid Build Coastguard Worker { 2760*58b9f456SAndroid Build Coastguard Worker __begin_ = __end_ = static_cast<value_type*>( 2761*58b9f456SAndroid Build Coastguard Worker _VSTD::__libcpp_allocate(__n * sizeof(value_type), __alignof(value_type))); 2762*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2763*58b9f456SAndroid Build Coastguard Worker try 2764*58b9f456SAndroid Build Coastguard Worker { 2765*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2766*58b9f456SAndroid Build Coastguard Worker for (size_t __n_left = __n; __n_left; --__n_left, ++__end_) 2767*58b9f456SAndroid Build Coastguard Worker ::new (__end_) value_type(); 2768*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2769*58b9f456SAndroid Build Coastguard Worker } 2770*58b9f456SAndroid Build Coastguard Worker catch (...) 2771*58b9f456SAndroid Build Coastguard Worker { 2772*58b9f456SAndroid Build Coastguard Worker __clear(__n); 2773*58b9f456SAndroid Build Coastguard Worker throw; 2774*58b9f456SAndroid Build Coastguard Worker } 2775*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2776*58b9f456SAndroid Build Coastguard Worker } 2777*58b9f456SAndroid Build Coastguard Worker} 2778*58b9f456SAndroid Build Coastguard Worker 2779*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2780*58b9f456SAndroid Build Coastguard Workerinline 2781*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::valarray(const value_type& __x, size_t __n) 2782*58b9f456SAndroid Build Coastguard Worker : __begin_(0), 2783*58b9f456SAndroid Build Coastguard Worker __end_(0) 2784*58b9f456SAndroid Build Coastguard Worker{ 2785*58b9f456SAndroid Build Coastguard Worker resize(__n, __x); 2786*58b9f456SAndroid Build Coastguard Worker} 2787*58b9f456SAndroid Build Coastguard Worker 2788*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2789*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::valarray(const value_type* __p, size_t __n) 2790*58b9f456SAndroid Build Coastguard Worker : __begin_(0), 2791*58b9f456SAndroid Build Coastguard Worker __end_(0) 2792*58b9f456SAndroid Build Coastguard Worker{ 2793*58b9f456SAndroid Build Coastguard Worker if (__n) 2794*58b9f456SAndroid Build Coastguard Worker { 2795*58b9f456SAndroid Build Coastguard Worker __begin_ = __end_ = static_cast<value_type*>( 2796*58b9f456SAndroid Build Coastguard Worker _VSTD::__libcpp_allocate(__n * sizeof(value_type), __alignof(value_type))); 2797*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2798*58b9f456SAndroid Build Coastguard Worker try 2799*58b9f456SAndroid Build Coastguard Worker { 2800*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2801*58b9f456SAndroid Build Coastguard Worker for (size_t __n_left = __n; __n_left; ++__end_, ++__p, --__n_left) 2802*58b9f456SAndroid Build Coastguard Worker ::new (__end_) value_type(*__p); 2803*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2804*58b9f456SAndroid Build Coastguard Worker } 2805*58b9f456SAndroid Build Coastguard Worker catch (...) 2806*58b9f456SAndroid Build Coastguard Worker { 2807*58b9f456SAndroid Build Coastguard Worker __clear(__n); 2808*58b9f456SAndroid Build Coastguard Worker throw; 2809*58b9f456SAndroid Build Coastguard Worker } 2810*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2811*58b9f456SAndroid Build Coastguard Worker } 2812*58b9f456SAndroid Build Coastguard Worker} 2813*58b9f456SAndroid Build Coastguard Worker 2814*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2815*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::valarray(const valarray& __v) 2816*58b9f456SAndroid Build Coastguard Worker : __begin_(0), 2817*58b9f456SAndroid Build Coastguard Worker __end_(0) 2818*58b9f456SAndroid Build Coastguard Worker{ 2819*58b9f456SAndroid Build Coastguard Worker if (__v.size()) 2820*58b9f456SAndroid Build Coastguard Worker { 2821*58b9f456SAndroid Build Coastguard Worker __begin_ = __end_ = static_cast<value_type*>( 2822*58b9f456SAndroid Build Coastguard Worker _VSTD::__libcpp_allocate(__v.size() * sizeof(value_type), __alignof(value_type))); 2823*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2824*58b9f456SAndroid Build Coastguard Worker try 2825*58b9f456SAndroid Build Coastguard Worker { 2826*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2827*58b9f456SAndroid Build Coastguard Worker for (value_type* __p = __v.__begin_; __p != __v.__end_; ++__end_, ++__p) 2828*58b9f456SAndroid Build Coastguard Worker ::new (__end_) value_type(*__p); 2829*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2830*58b9f456SAndroid Build Coastguard Worker } 2831*58b9f456SAndroid Build Coastguard Worker catch (...) 2832*58b9f456SAndroid Build Coastguard Worker { 2833*58b9f456SAndroid Build Coastguard Worker __clear(__v.size()); 2834*58b9f456SAndroid Build Coastguard Worker throw; 2835*58b9f456SAndroid Build Coastguard Worker } 2836*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2837*58b9f456SAndroid Build Coastguard Worker } 2838*58b9f456SAndroid Build Coastguard Worker} 2839*58b9f456SAndroid Build Coastguard Worker 2840*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 2841*58b9f456SAndroid Build Coastguard Worker 2842*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2843*58b9f456SAndroid Build Coastguard Workerinline 2844*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::valarray(valarray&& __v) _NOEXCEPT 2845*58b9f456SAndroid Build Coastguard Worker : __begin_(__v.__begin_), 2846*58b9f456SAndroid Build Coastguard Worker __end_(__v.__end_) 2847*58b9f456SAndroid Build Coastguard Worker{ 2848*58b9f456SAndroid Build Coastguard Worker __v.__begin_ = __v.__end_ = nullptr; 2849*58b9f456SAndroid Build Coastguard Worker} 2850*58b9f456SAndroid Build Coastguard Worker 2851*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2852*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::valarray(initializer_list<value_type> __il) 2853*58b9f456SAndroid Build Coastguard Worker : __begin_(0), 2854*58b9f456SAndroid Build Coastguard Worker __end_(0) 2855*58b9f456SAndroid Build Coastguard Worker{ 2856*58b9f456SAndroid Build Coastguard Worker const size_t __n = __il.size(); 2857*58b9f456SAndroid Build Coastguard Worker if (__n) 2858*58b9f456SAndroid Build Coastguard Worker { 2859*58b9f456SAndroid Build Coastguard Worker __begin_ = __end_ = static_cast<value_type*>( 2860*58b9f456SAndroid Build Coastguard Worker_VSTD::__libcpp_allocate(__n * sizeof(value_type), __alignof(value_type))); 2861*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2862*58b9f456SAndroid Build Coastguard Worker try 2863*58b9f456SAndroid Build Coastguard Worker { 2864*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2865*58b9f456SAndroid Build Coastguard Worker size_t __n_left = __n; 2866*58b9f456SAndroid Build Coastguard Worker for (const value_type* __p = __il.begin(); __n_left; ++__end_, ++__p, --__n_left) 2867*58b9f456SAndroid Build Coastguard Worker ::new (__end_) value_type(*__p); 2868*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2869*58b9f456SAndroid Build Coastguard Worker } 2870*58b9f456SAndroid Build Coastguard Worker catch (...) 2871*58b9f456SAndroid Build Coastguard Worker { 2872*58b9f456SAndroid Build Coastguard Worker __clear(__n); 2873*58b9f456SAndroid Build Coastguard Worker throw; 2874*58b9f456SAndroid Build Coastguard Worker } 2875*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2876*58b9f456SAndroid Build Coastguard Worker } 2877*58b9f456SAndroid Build Coastguard Worker} 2878*58b9f456SAndroid Build Coastguard Worker 2879*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 2880*58b9f456SAndroid Build Coastguard Worker 2881*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2882*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::valarray(const slice_array<value_type>& __sa) 2883*58b9f456SAndroid Build Coastguard Worker : __begin_(0), 2884*58b9f456SAndroid Build Coastguard Worker __end_(0) 2885*58b9f456SAndroid Build Coastguard Worker{ 2886*58b9f456SAndroid Build Coastguard Worker const size_t __n = __sa.__size_; 2887*58b9f456SAndroid Build Coastguard Worker if (__n) 2888*58b9f456SAndroid Build Coastguard Worker { 2889*58b9f456SAndroid Build Coastguard Worker __begin_ = __end_ = static_cast<value_type*>( 2890*58b9f456SAndroid Build Coastguard Worker _VSTD::__libcpp_allocate(__n * sizeof(value_type), __alignof(value_type))); 2891*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2892*58b9f456SAndroid Build Coastguard Worker try 2893*58b9f456SAndroid Build Coastguard Worker { 2894*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2895*58b9f456SAndroid Build Coastguard Worker size_t __n_left = __n; 2896*58b9f456SAndroid Build Coastguard Worker for (const value_type* __p = __sa.__vp_; __n_left; ++__end_, __p += __sa.__stride_, --__n_left) 2897*58b9f456SAndroid Build Coastguard Worker ::new (__end_) value_type(*__p); 2898*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2899*58b9f456SAndroid Build Coastguard Worker } 2900*58b9f456SAndroid Build Coastguard Worker catch (...) 2901*58b9f456SAndroid Build Coastguard Worker { 2902*58b9f456SAndroid Build Coastguard Worker __clear(__n); 2903*58b9f456SAndroid Build Coastguard Worker throw; 2904*58b9f456SAndroid Build Coastguard Worker } 2905*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2906*58b9f456SAndroid Build Coastguard Worker } 2907*58b9f456SAndroid Build Coastguard Worker} 2908*58b9f456SAndroid Build Coastguard Worker 2909*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2910*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::valarray(const gslice_array<value_type>& __ga) 2911*58b9f456SAndroid Build Coastguard Worker : __begin_(0), 2912*58b9f456SAndroid Build Coastguard Worker __end_(0) 2913*58b9f456SAndroid Build Coastguard Worker{ 2914*58b9f456SAndroid Build Coastguard Worker const size_t __n = __ga.__1d_.size(); 2915*58b9f456SAndroid Build Coastguard Worker if (__n) 2916*58b9f456SAndroid Build Coastguard Worker { 2917*58b9f456SAndroid Build Coastguard Worker __begin_ = __end_ = static_cast<value_type*>( 2918*58b9f456SAndroid Build Coastguard Worker _VSTD::__libcpp_allocate(__n * sizeof(value_type), __alignof(value_type))); 2919*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2920*58b9f456SAndroid Build Coastguard Worker try 2921*58b9f456SAndroid Build Coastguard Worker { 2922*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2923*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 2924*58b9f456SAndroid Build Coastguard Worker const value_type* __s = __ga.__vp_; 2925*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __ga.__1d_.__begin_, __e = __ga.__1d_.__end_; 2926*58b9f456SAndroid Build Coastguard Worker __i != __e; ++__i, ++__end_) 2927*58b9f456SAndroid Build Coastguard Worker ::new (__end_) value_type(__s[*__i]); 2928*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2929*58b9f456SAndroid Build Coastguard Worker } 2930*58b9f456SAndroid Build Coastguard Worker catch (...) 2931*58b9f456SAndroid Build Coastguard Worker { 2932*58b9f456SAndroid Build Coastguard Worker __clear(__n); 2933*58b9f456SAndroid Build Coastguard Worker throw; 2934*58b9f456SAndroid Build Coastguard Worker } 2935*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2936*58b9f456SAndroid Build Coastguard Worker } 2937*58b9f456SAndroid Build Coastguard Worker} 2938*58b9f456SAndroid Build Coastguard Worker 2939*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2940*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::valarray(const mask_array<value_type>& __ma) 2941*58b9f456SAndroid Build Coastguard Worker : __begin_(0), 2942*58b9f456SAndroid Build Coastguard Worker __end_(0) 2943*58b9f456SAndroid Build Coastguard Worker{ 2944*58b9f456SAndroid Build Coastguard Worker const size_t __n = __ma.__1d_.size(); 2945*58b9f456SAndroid Build Coastguard Worker if (__n) 2946*58b9f456SAndroid Build Coastguard Worker { 2947*58b9f456SAndroid Build Coastguard Worker __begin_ = __end_ = static_cast<value_type*>( 2948*58b9f456SAndroid Build Coastguard Worker _VSTD::__libcpp_allocate(__n * sizeof(value_type), __alignof(value_type))); 2949*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2950*58b9f456SAndroid Build Coastguard Worker try 2951*58b9f456SAndroid Build Coastguard Worker { 2952*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2953*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 2954*58b9f456SAndroid Build Coastguard Worker const value_type* __s = __ma.__vp_; 2955*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __ma.__1d_.__begin_, __e = __ma.__1d_.__end_; 2956*58b9f456SAndroid Build Coastguard Worker __i != __e; ++__i, ++__end_) 2957*58b9f456SAndroid Build Coastguard Worker ::new (__end_) value_type(__s[*__i]); 2958*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2959*58b9f456SAndroid Build Coastguard Worker } 2960*58b9f456SAndroid Build Coastguard Worker catch (...) 2961*58b9f456SAndroid Build Coastguard Worker { 2962*58b9f456SAndroid Build Coastguard Worker __clear(__n); 2963*58b9f456SAndroid Build Coastguard Worker throw; 2964*58b9f456SAndroid Build Coastguard Worker } 2965*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2966*58b9f456SAndroid Build Coastguard Worker } 2967*58b9f456SAndroid Build Coastguard Worker} 2968*58b9f456SAndroid Build Coastguard Worker 2969*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 2970*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::valarray(const indirect_array<value_type>& __ia) 2971*58b9f456SAndroid Build Coastguard Worker : __begin_(0), 2972*58b9f456SAndroid Build Coastguard Worker __end_(0) 2973*58b9f456SAndroid Build Coastguard Worker{ 2974*58b9f456SAndroid Build Coastguard Worker const size_t __n = __ia.__1d_.size(); 2975*58b9f456SAndroid Build Coastguard Worker if (__n) 2976*58b9f456SAndroid Build Coastguard Worker { 2977*58b9f456SAndroid Build Coastguard Worker __begin_ = __end_ = static_cast<value_type*>( 2978*58b9f456SAndroid Build Coastguard Worker _VSTD::__libcpp_allocate(__n * sizeof(value_type), __alignof(value_type))); 2979*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2980*58b9f456SAndroid Build Coastguard Worker try 2981*58b9f456SAndroid Build Coastguard Worker { 2982*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2983*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 2984*58b9f456SAndroid Build Coastguard Worker const value_type* __s = __ia.__vp_; 2985*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __ia.__1d_.__begin_, __e = __ia.__1d_.__end_; 2986*58b9f456SAndroid Build Coastguard Worker __i != __e; ++__i, ++__end_) 2987*58b9f456SAndroid Build Coastguard Worker ::new (__end_) value_type(__s[*__i]); 2988*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2989*58b9f456SAndroid Build Coastguard Worker } 2990*58b9f456SAndroid Build Coastguard Worker catch (...) 2991*58b9f456SAndroid Build Coastguard Worker { 2992*58b9f456SAndroid Build Coastguard Worker __clear(__n); 2993*58b9f456SAndroid Build Coastguard Worker throw; 2994*58b9f456SAndroid Build Coastguard Worker } 2995*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2996*58b9f456SAndroid Build Coastguard Worker } 2997*58b9f456SAndroid Build Coastguard Worker} 2998*58b9f456SAndroid Build Coastguard Worker 2999*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3000*58b9f456SAndroid Build Coastguard Workerinline 3001*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::~valarray() 3002*58b9f456SAndroid Build Coastguard Worker{ 3003*58b9f456SAndroid Build Coastguard Worker __clear(size()); 3004*58b9f456SAndroid Build Coastguard Worker} 3005*58b9f456SAndroid Build Coastguard Worker 3006*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3007*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3008*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::__assign_range(const value_type* __f, const value_type* __l) 3009*58b9f456SAndroid Build Coastguard Worker{ 3010*58b9f456SAndroid Build Coastguard Worker size_t __n = __l - __f; 3011*58b9f456SAndroid Build Coastguard Worker if (size() != __n) 3012*58b9f456SAndroid Build Coastguard Worker { 3013*58b9f456SAndroid Build Coastguard Worker __clear(size()); 3014*58b9f456SAndroid Build Coastguard Worker __begin_ = static_cast<value_type*>( 3015*58b9f456SAndroid Build Coastguard Worker _VSTD::__libcpp_allocate(__n * sizeof(value_type), __alignof(value_type))); 3016*58b9f456SAndroid Build Coastguard Worker __end_ = __begin_ + __n; 3017*58b9f456SAndroid Build Coastguard Worker _VSTD::uninitialized_copy(__f, __l, __begin_); 3018*58b9f456SAndroid Build Coastguard Worker } else { 3019*58b9f456SAndroid Build Coastguard Worker _VSTD::copy(__f, __l, __begin_); 3020*58b9f456SAndroid Build Coastguard Worker } 3021*58b9f456SAndroid Build Coastguard Worker return *this; 3022*58b9f456SAndroid Build Coastguard Worker} 3023*58b9f456SAndroid Build Coastguard Worker 3024*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3025*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3026*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator=(const valarray& __v) 3027*58b9f456SAndroid Build Coastguard Worker{ 3028*58b9f456SAndroid Build Coastguard Worker if (this != &__v) 3029*58b9f456SAndroid Build Coastguard Worker return __assign_range(__v.__begin_, __v.__end_); 3030*58b9f456SAndroid Build Coastguard Worker return *this; 3031*58b9f456SAndroid Build Coastguard Worker} 3032*58b9f456SAndroid Build Coastguard Worker 3033*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 3034*58b9f456SAndroid Build Coastguard Worker 3035*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3036*58b9f456SAndroid Build Coastguard Workerinline 3037*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3038*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator=(valarray&& __v) _NOEXCEPT 3039*58b9f456SAndroid Build Coastguard Worker{ 3040*58b9f456SAndroid Build Coastguard Worker __clear(size()); 3041*58b9f456SAndroid Build Coastguard Worker __begin_ = __v.__begin_; 3042*58b9f456SAndroid Build Coastguard Worker __end_ = __v.__end_; 3043*58b9f456SAndroid Build Coastguard Worker __v.__begin_ = nullptr; 3044*58b9f456SAndroid Build Coastguard Worker __v.__end_ = nullptr; 3045*58b9f456SAndroid Build Coastguard Worker return *this; 3046*58b9f456SAndroid Build Coastguard Worker} 3047*58b9f456SAndroid Build Coastguard Worker 3048*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3049*58b9f456SAndroid Build Coastguard Workerinline 3050*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3051*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator=(initializer_list<value_type> __il) 3052*58b9f456SAndroid Build Coastguard Worker{ 3053*58b9f456SAndroid Build Coastguard Worker return __assign_range(__il.begin(), __il.end()); 3054*58b9f456SAndroid Build Coastguard Worker} 3055*58b9f456SAndroid Build Coastguard Worker 3056*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 3057*58b9f456SAndroid Build Coastguard Worker 3058*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3059*58b9f456SAndroid Build Coastguard Workerinline 3060*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3061*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator=(const value_type& __x) 3062*58b9f456SAndroid Build Coastguard Worker{ 3063*58b9f456SAndroid Build Coastguard Worker _VSTD::fill(__begin_, __end_, __x); 3064*58b9f456SAndroid Build Coastguard Worker return *this; 3065*58b9f456SAndroid Build Coastguard Worker} 3066*58b9f456SAndroid Build Coastguard Worker 3067*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3068*58b9f456SAndroid Build Coastguard Workerinline 3069*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3070*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator=(const slice_array<value_type>& __sa) 3071*58b9f456SAndroid Build Coastguard Worker{ 3072*58b9f456SAndroid Build Coastguard Worker value_type* __t = __begin_; 3073*58b9f456SAndroid Build Coastguard Worker const value_type* __s = __sa.__vp_; 3074*58b9f456SAndroid Build Coastguard Worker for (size_t __n = __sa.__size_; __n; --__n, __s += __sa.__stride_, ++__t) 3075*58b9f456SAndroid Build Coastguard Worker *__t = *__s; 3076*58b9f456SAndroid Build Coastguard Worker return *this; 3077*58b9f456SAndroid Build Coastguard Worker} 3078*58b9f456SAndroid Build Coastguard Worker 3079*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3080*58b9f456SAndroid Build Coastguard Workerinline 3081*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3082*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator=(const gslice_array<value_type>& __ga) 3083*58b9f456SAndroid Build Coastguard Worker{ 3084*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 3085*58b9f456SAndroid Build Coastguard Worker value_type* __t = __begin_; 3086*58b9f456SAndroid Build Coastguard Worker const value_type* __s = __ga.__vp_; 3087*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __ga.__1d_.__begin_, __e = __ga.__1d_.__end_; 3088*58b9f456SAndroid Build Coastguard Worker __i != __e; ++__i, ++__t) 3089*58b9f456SAndroid Build Coastguard Worker *__t = __s[*__i]; 3090*58b9f456SAndroid Build Coastguard Worker return *this; 3091*58b9f456SAndroid Build Coastguard Worker} 3092*58b9f456SAndroid Build Coastguard Worker 3093*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3094*58b9f456SAndroid Build Coastguard Workerinline 3095*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3096*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator=(const mask_array<value_type>& __ma) 3097*58b9f456SAndroid Build Coastguard Worker{ 3098*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 3099*58b9f456SAndroid Build Coastguard Worker value_type* __t = __begin_; 3100*58b9f456SAndroid Build Coastguard Worker const value_type* __s = __ma.__vp_; 3101*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __ma.__1d_.__begin_, __e = __ma.__1d_.__end_; 3102*58b9f456SAndroid Build Coastguard Worker __i != __e; ++__i, ++__t) 3103*58b9f456SAndroid Build Coastguard Worker *__t = __s[*__i]; 3104*58b9f456SAndroid Build Coastguard Worker return *this; 3105*58b9f456SAndroid Build Coastguard Worker} 3106*58b9f456SAndroid Build Coastguard Worker 3107*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3108*58b9f456SAndroid Build Coastguard Workerinline 3109*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3110*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator=(const indirect_array<value_type>& __ia) 3111*58b9f456SAndroid Build Coastguard Worker{ 3112*58b9f456SAndroid Build Coastguard Worker typedef const size_t* _Ip; 3113*58b9f456SAndroid Build Coastguard Worker value_type* __t = __begin_; 3114*58b9f456SAndroid Build Coastguard Worker const value_type* __s = __ia.__vp_; 3115*58b9f456SAndroid Build Coastguard Worker for (_Ip __i = __ia.__1d_.__begin_, __e = __ia.__1d_.__end_; 3116*58b9f456SAndroid Build Coastguard Worker __i != __e; ++__i, ++__t) 3117*58b9f456SAndroid Build Coastguard Worker *__t = __s[*__i]; 3118*58b9f456SAndroid Build Coastguard Worker return *this; 3119*58b9f456SAndroid Build Coastguard Worker} 3120*58b9f456SAndroid Build Coastguard Worker 3121*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3122*58b9f456SAndroid Build Coastguard Workertemplate <class _ValExpr> 3123*58b9f456SAndroid Build Coastguard Workerinline 3124*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3125*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator=(const __val_expr<_ValExpr>& __v) 3126*58b9f456SAndroid Build Coastguard Worker{ 3127*58b9f456SAndroid Build Coastguard Worker size_t __n = __v.size(); 3128*58b9f456SAndroid Build Coastguard Worker if (size() != __n) 3129*58b9f456SAndroid Build Coastguard Worker resize(__n); 3130*58b9f456SAndroid Build Coastguard Worker value_type* __t = __begin_; 3131*58b9f456SAndroid Build Coastguard Worker for (size_t __i = 0; __i != __n; ++__t, ++__i) 3132*58b9f456SAndroid Build Coastguard Worker *__t = result_type(__v[__i]); 3133*58b9f456SAndroid Build Coastguard Worker return *this; 3134*58b9f456SAndroid Build Coastguard Worker} 3135*58b9f456SAndroid Build Coastguard Worker 3136*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3137*58b9f456SAndroid Build Coastguard Workerinline 3138*58b9f456SAndroid Build Coastguard Worker__val_expr<__slice_expr<const valarray<_Tp>&> > 3139*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator[](slice __s) const 3140*58b9f456SAndroid Build Coastguard Worker{ 3141*58b9f456SAndroid Build Coastguard Worker return __val_expr<__slice_expr<const valarray&> >(__slice_expr<const valarray&>(__s, *this)); 3142*58b9f456SAndroid Build Coastguard Worker} 3143*58b9f456SAndroid Build Coastguard Worker 3144*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3145*58b9f456SAndroid Build Coastguard Workerinline 3146*58b9f456SAndroid Build Coastguard Workerslice_array<_Tp> 3147*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator[](slice __s) 3148*58b9f456SAndroid Build Coastguard Worker{ 3149*58b9f456SAndroid Build Coastguard Worker return slice_array<value_type>(__s, *this); 3150*58b9f456SAndroid Build Coastguard Worker} 3151*58b9f456SAndroid Build Coastguard Worker 3152*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3153*58b9f456SAndroid Build Coastguard Workerinline 3154*58b9f456SAndroid Build Coastguard Worker__val_expr<__indirect_expr<const valarray<_Tp>&> > 3155*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator[](const gslice& __gs) const 3156*58b9f456SAndroid Build Coastguard Worker{ 3157*58b9f456SAndroid Build Coastguard Worker return __val_expr<__indirect_expr<const valarray&> >(__indirect_expr<const valarray&>(__gs.__1d_, *this)); 3158*58b9f456SAndroid Build Coastguard Worker} 3159*58b9f456SAndroid Build Coastguard Worker 3160*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3161*58b9f456SAndroid Build Coastguard Workerinline 3162*58b9f456SAndroid Build Coastguard Workergslice_array<_Tp> 3163*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator[](const gslice& __gs) 3164*58b9f456SAndroid Build Coastguard Worker{ 3165*58b9f456SAndroid Build Coastguard Worker return gslice_array<value_type>(__gs, *this); 3166*58b9f456SAndroid Build Coastguard Worker} 3167*58b9f456SAndroid Build Coastguard Worker 3168*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 3169*58b9f456SAndroid Build Coastguard Worker 3170*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3171*58b9f456SAndroid Build Coastguard Workerinline 3172*58b9f456SAndroid Build Coastguard Worker__val_expr<__indirect_expr<const valarray<_Tp>&> > 3173*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator[](gslice&& __gs) const 3174*58b9f456SAndroid Build Coastguard Worker{ 3175*58b9f456SAndroid Build Coastguard Worker return __val_expr<__indirect_expr<const valarray&> >(__indirect_expr<const valarray&>(move(__gs.__1d_), *this)); 3176*58b9f456SAndroid Build Coastguard Worker} 3177*58b9f456SAndroid Build Coastguard Worker 3178*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3179*58b9f456SAndroid Build Coastguard Workerinline 3180*58b9f456SAndroid Build Coastguard Workergslice_array<_Tp> 3181*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator[](gslice&& __gs) 3182*58b9f456SAndroid Build Coastguard Worker{ 3183*58b9f456SAndroid Build Coastguard Worker return gslice_array<value_type>(move(__gs), *this); 3184*58b9f456SAndroid Build Coastguard Worker} 3185*58b9f456SAndroid Build Coastguard Worker 3186*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 3187*58b9f456SAndroid Build Coastguard Worker 3188*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3189*58b9f456SAndroid Build Coastguard Workerinline 3190*58b9f456SAndroid Build Coastguard Worker__val_expr<__mask_expr<const valarray<_Tp>&> > 3191*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator[](const valarray<bool>& __vb) const 3192*58b9f456SAndroid Build Coastguard Worker{ 3193*58b9f456SAndroid Build Coastguard Worker return __val_expr<__mask_expr<const valarray&> >(__mask_expr<const valarray&>(__vb, *this)); 3194*58b9f456SAndroid Build Coastguard Worker} 3195*58b9f456SAndroid Build Coastguard Worker 3196*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3197*58b9f456SAndroid Build Coastguard Workerinline 3198*58b9f456SAndroid Build Coastguard Workermask_array<_Tp> 3199*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator[](const valarray<bool>& __vb) 3200*58b9f456SAndroid Build Coastguard Worker{ 3201*58b9f456SAndroid Build Coastguard Worker return mask_array<value_type>(__vb, *this); 3202*58b9f456SAndroid Build Coastguard Worker} 3203*58b9f456SAndroid Build Coastguard Worker 3204*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 3205*58b9f456SAndroid Build Coastguard Worker 3206*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3207*58b9f456SAndroid Build Coastguard Workerinline 3208*58b9f456SAndroid Build Coastguard Worker__val_expr<__mask_expr<const valarray<_Tp>&> > 3209*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator[](valarray<bool>&& __vb) const 3210*58b9f456SAndroid Build Coastguard Worker{ 3211*58b9f456SAndroid Build Coastguard Worker return __val_expr<__mask_expr<const valarray&> >(__mask_expr<const valarray&>(move(__vb), *this)); 3212*58b9f456SAndroid Build Coastguard Worker} 3213*58b9f456SAndroid Build Coastguard Worker 3214*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3215*58b9f456SAndroid Build Coastguard Workerinline 3216*58b9f456SAndroid Build Coastguard Workermask_array<_Tp> 3217*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator[](valarray<bool>&& __vb) 3218*58b9f456SAndroid Build Coastguard Worker{ 3219*58b9f456SAndroid Build Coastguard Worker return mask_array<value_type>(move(__vb), *this); 3220*58b9f456SAndroid Build Coastguard Worker} 3221*58b9f456SAndroid Build Coastguard Worker 3222*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 3223*58b9f456SAndroid Build Coastguard Worker 3224*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3225*58b9f456SAndroid Build Coastguard Workerinline 3226*58b9f456SAndroid Build Coastguard Worker__val_expr<__indirect_expr<const valarray<_Tp>&> > 3227*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator[](const valarray<size_t>& __vs) const 3228*58b9f456SAndroid Build Coastguard Worker{ 3229*58b9f456SAndroid Build Coastguard Worker return __val_expr<__indirect_expr<const valarray&> >(__indirect_expr<const valarray&>(__vs, *this)); 3230*58b9f456SAndroid Build Coastguard Worker} 3231*58b9f456SAndroid Build Coastguard Worker 3232*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3233*58b9f456SAndroid Build Coastguard Workerinline 3234*58b9f456SAndroid Build Coastguard Workerindirect_array<_Tp> 3235*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator[](const valarray<size_t>& __vs) 3236*58b9f456SAndroid Build Coastguard Worker{ 3237*58b9f456SAndroid Build Coastguard Worker return indirect_array<value_type>(__vs, *this); 3238*58b9f456SAndroid Build Coastguard Worker} 3239*58b9f456SAndroid Build Coastguard Worker 3240*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 3241*58b9f456SAndroid Build Coastguard Worker 3242*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3243*58b9f456SAndroid Build Coastguard Workerinline 3244*58b9f456SAndroid Build Coastguard Worker__val_expr<__indirect_expr<const valarray<_Tp>&> > 3245*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator[](valarray<size_t>&& __vs) const 3246*58b9f456SAndroid Build Coastguard Worker{ 3247*58b9f456SAndroid Build Coastguard Worker return __val_expr<__indirect_expr<const valarray&> >(__indirect_expr<const valarray&>(move(__vs), *this)); 3248*58b9f456SAndroid Build Coastguard Worker} 3249*58b9f456SAndroid Build Coastguard Worker 3250*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3251*58b9f456SAndroid Build Coastguard Workerinline 3252*58b9f456SAndroid Build Coastguard Workerindirect_array<_Tp> 3253*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator[](valarray<size_t>&& __vs) 3254*58b9f456SAndroid Build Coastguard Worker{ 3255*58b9f456SAndroid Build Coastguard Worker return indirect_array<value_type>(move(__vs), *this); 3256*58b9f456SAndroid Build Coastguard Worker} 3257*58b9f456SAndroid Build Coastguard Worker 3258*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 3259*58b9f456SAndroid Build Coastguard Worker 3260*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3261*58b9f456SAndroid Build Coastguard Workervalarray<_Tp> 3262*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator+() const 3263*58b9f456SAndroid Build Coastguard Worker{ 3264*58b9f456SAndroid Build Coastguard Worker valarray<value_type> __r; 3265*58b9f456SAndroid Build Coastguard Worker size_t __n = size(); 3266*58b9f456SAndroid Build Coastguard Worker if (__n) 3267*58b9f456SAndroid Build Coastguard Worker { 3268*58b9f456SAndroid Build Coastguard Worker __r.__begin_ = 3269*58b9f456SAndroid Build Coastguard Worker __r.__end_ = 3270*58b9f456SAndroid Build Coastguard Worker static_cast<value_type*>( 3271*58b9f456SAndroid Build Coastguard Worker _VSTD::__libcpp_allocate(__n * sizeof(value_type), __alignof(value_type))); 3272*58b9f456SAndroid Build Coastguard Worker for (const value_type* __p = __begin_; __n; ++__r.__end_, ++__p, --__n) 3273*58b9f456SAndroid Build Coastguard Worker ::new (__r.__end_) value_type(+*__p); 3274*58b9f456SAndroid Build Coastguard Worker } 3275*58b9f456SAndroid Build Coastguard Worker return __r; 3276*58b9f456SAndroid Build Coastguard Worker} 3277*58b9f456SAndroid Build Coastguard Worker 3278*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3279*58b9f456SAndroid Build Coastguard Workervalarray<_Tp> 3280*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator-() const 3281*58b9f456SAndroid Build Coastguard Worker{ 3282*58b9f456SAndroid Build Coastguard Worker valarray<value_type> __r; 3283*58b9f456SAndroid Build Coastguard Worker size_t __n = size(); 3284*58b9f456SAndroid Build Coastguard Worker if (__n) 3285*58b9f456SAndroid Build Coastguard Worker { 3286*58b9f456SAndroid Build Coastguard Worker __r.__begin_ = 3287*58b9f456SAndroid Build Coastguard Worker __r.__end_ = 3288*58b9f456SAndroid Build Coastguard Worker static_cast<value_type*>( 3289*58b9f456SAndroid Build Coastguard Worker _VSTD::__libcpp_allocate(__n * sizeof(value_type), __alignof(value_type))); 3290*58b9f456SAndroid Build Coastguard Worker for (const value_type* __p = __begin_; __n; ++__r.__end_, ++__p, --__n) 3291*58b9f456SAndroid Build Coastguard Worker ::new (__r.__end_) value_type(-*__p); 3292*58b9f456SAndroid Build Coastguard Worker } 3293*58b9f456SAndroid Build Coastguard Worker return __r; 3294*58b9f456SAndroid Build Coastguard Worker} 3295*58b9f456SAndroid Build Coastguard Worker 3296*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3297*58b9f456SAndroid Build Coastguard Workervalarray<_Tp> 3298*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator~() const 3299*58b9f456SAndroid Build Coastguard Worker{ 3300*58b9f456SAndroid Build Coastguard Worker valarray<value_type> __r; 3301*58b9f456SAndroid Build Coastguard Worker size_t __n = size(); 3302*58b9f456SAndroid Build Coastguard Worker if (__n) 3303*58b9f456SAndroid Build Coastguard Worker { 3304*58b9f456SAndroid Build Coastguard Worker __r.__begin_ = 3305*58b9f456SAndroid Build Coastguard Worker __r.__end_ = 3306*58b9f456SAndroid Build Coastguard Worker static_cast<value_type*>( 3307*58b9f456SAndroid Build Coastguard Worker _VSTD::__libcpp_allocate(__n * sizeof(value_type), __alignof(value_type))); 3308*58b9f456SAndroid Build Coastguard Worker for (const value_type* __p = __begin_; __n; ++__r.__end_, ++__p, --__n) 3309*58b9f456SAndroid Build Coastguard Worker ::new (__r.__end_) value_type(~*__p); 3310*58b9f456SAndroid Build Coastguard Worker } 3311*58b9f456SAndroid Build Coastguard Worker return __r; 3312*58b9f456SAndroid Build Coastguard Worker} 3313*58b9f456SAndroid Build Coastguard Worker 3314*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3315*58b9f456SAndroid Build Coastguard Workervalarray<bool> 3316*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator!() const 3317*58b9f456SAndroid Build Coastguard Worker{ 3318*58b9f456SAndroid Build Coastguard Worker valarray<bool> __r; 3319*58b9f456SAndroid Build Coastguard Worker size_t __n = size(); 3320*58b9f456SAndroid Build Coastguard Worker if (__n) 3321*58b9f456SAndroid Build Coastguard Worker { 3322*58b9f456SAndroid Build Coastguard Worker __r.__begin_ = 3323*58b9f456SAndroid Build Coastguard Worker __r.__end_ = 3324*58b9f456SAndroid Build Coastguard Worker static_cast<bool*>(_VSTD::__libcpp_allocate(__n * sizeof(bool), __alignof(bool))); 3325*58b9f456SAndroid Build Coastguard Worker for (const value_type* __p = __begin_; __n; ++__r.__end_, ++__p, --__n) 3326*58b9f456SAndroid Build Coastguard Worker ::new (__r.__end_) bool(!*__p); 3327*58b9f456SAndroid Build Coastguard Worker } 3328*58b9f456SAndroid Build Coastguard Worker return __r; 3329*58b9f456SAndroid Build Coastguard Worker} 3330*58b9f456SAndroid Build Coastguard Worker 3331*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3332*58b9f456SAndroid Build Coastguard Workerinline 3333*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3334*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator*=(const value_type& __x) 3335*58b9f456SAndroid Build Coastguard Worker{ 3336*58b9f456SAndroid Build Coastguard Worker for (value_type* __p = __begin_; __p != __end_; ++__p) 3337*58b9f456SAndroid Build Coastguard Worker *__p *= __x; 3338*58b9f456SAndroid Build Coastguard Worker return *this; 3339*58b9f456SAndroid Build Coastguard Worker} 3340*58b9f456SAndroid Build Coastguard Worker 3341*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3342*58b9f456SAndroid Build Coastguard Workerinline 3343*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3344*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator/=(const value_type& __x) 3345*58b9f456SAndroid Build Coastguard Worker{ 3346*58b9f456SAndroid Build Coastguard Worker for (value_type* __p = __begin_; __p != __end_; ++__p) 3347*58b9f456SAndroid Build Coastguard Worker *__p /= __x; 3348*58b9f456SAndroid Build Coastguard Worker return *this; 3349*58b9f456SAndroid Build Coastguard Worker} 3350*58b9f456SAndroid Build Coastguard Worker 3351*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3352*58b9f456SAndroid Build Coastguard Workerinline 3353*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3354*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator%=(const value_type& __x) 3355*58b9f456SAndroid Build Coastguard Worker{ 3356*58b9f456SAndroid Build Coastguard Worker for (value_type* __p = __begin_; __p != __end_; ++__p) 3357*58b9f456SAndroid Build Coastguard Worker *__p %= __x; 3358*58b9f456SAndroid Build Coastguard Worker return *this; 3359*58b9f456SAndroid Build Coastguard Worker} 3360*58b9f456SAndroid Build Coastguard Worker 3361*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3362*58b9f456SAndroid Build Coastguard Workerinline 3363*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3364*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator+=(const value_type& __x) 3365*58b9f456SAndroid Build Coastguard Worker{ 3366*58b9f456SAndroid Build Coastguard Worker for (value_type* __p = __begin_; __p != __end_; ++__p) 3367*58b9f456SAndroid Build Coastguard Worker *__p += __x; 3368*58b9f456SAndroid Build Coastguard Worker return *this; 3369*58b9f456SAndroid Build Coastguard Worker} 3370*58b9f456SAndroid Build Coastguard Worker 3371*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3372*58b9f456SAndroid Build Coastguard Workerinline 3373*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3374*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator-=(const value_type& __x) 3375*58b9f456SAndroid Build Coastguard Worker{ 3376*58b9f456SAndroid Build Coastguard Worker for (value_type* __p = __begin_; __p != __end_; ++__p) 3377*58b9f456SAndroid Build Coastguard Worker *__p -= __x; 3378*58b9f456SAndroid Build Coastguard Worker return *this; 3379*58b9f456SAndroid Build Coastguard Worker} 3380*58b9f456SAndroid Build Coastguard Worker 3381*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3382*58b9f456SAndroid Build Coastguard Workerinline 3383*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3384*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator^=(const value_type& __x) 3385*58b9f456SAndroid Build Coastguard Worker{ 3386*58b9f456SAndroid Build Coastguard Worker for (value_type* __p = __begin_; __p != __end_; ++__p) 3387*58b9f456SAndroid Build Coastguard Worker *__p ^= __x; 3388*58b9f456SAndroid Build Coastguard Worker return *this; 3389*58b9f456SAndroid Build Coastguard Worker} 3390*58b9f456SAndroid Build Coastguard Worker 3391*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3392*58b9f456SAndroid Build Coastguard Workerinline 3393*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3394*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator&=(const value_type& __x) 3395*58b9f456SAndroid Build Coastguard Worker{ 3396*58b9f456SAndroid Build Coastguard Worker for (value_type* __p = __begin_; __p != __end_; ++__p) 3397*58b9f456SAndroid Build Coastguard Worker *__p &= __x; 3398*58b9f456SAndroid Build Coastguard Worker return *this; 3399*58b9f456SAndroid Build Coastguard Worker} 3400*58b9f456SAndroid Build Coastguard Worker 3401*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3402*58b9f456SAndroid Build Coastguard Workerinline 3403*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3404*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator|=(const value_type& __x) 3405*58b9f456SAndroid Build Coastguard Worker{ 3406*58b9f456SAndroid Build Coastguard Worker for (value_type* __p = __begin_; __p != __end_; ++__p) 3407*58b9f456SAndroid Build Coastguard Worker *__p |= __x; 3408*58b9f456SAndroid Build Coastguard Worker return *this; 3409*58b9f456SAndroid Build Coastguard Worker} 3410*58b9f456SAndroid Build Coastguard Worker 3411*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3412*58b9f456SAndroid Build Coastguard Workerinline 3413*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3414*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator<<=(const value_type& __x) 3415*58b9f456SAndroid Build Coastguard Worker{ 3416*58b9f456SAndroid Build Coastguard Worker for (value_type* __p = __begin_; __p != __end_; ++__p) 3417*58b9f456SAndroid Build Coastguard Worker *__p <<= __x; 3418*58b9f456SAndroid Build Coastguard Worker return *this; 3419*58b9f456SAndroid Build Coastguard Worker} 3420*58b9f456SAndroid Build Coastguard Worker 3421*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3422*58b9f456SAndroid Build Coastguard Workerinline 3423*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>& 3424*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator>>=(const value_type& __x) 3425*58b9f456SAndroid Build Coastguard Worker{ 3426*58b9f456SAndroid Build Coastguard Worker for (value_type* __p = __begin_; __p != __end_; ++__p) 3427*58b9f456SAndroid Build Coastguard Worker *__p >>= __x; 3428*58b9f456SAndroid Build Coastguard Worker return *this; 3429*58b9f456SAndroid Build Coastguard Worker} 3430*58b9f456SAndroid Build Coastguard Worker 3431*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3432*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 3433*58b9f456SAndroid Build Coastguard Workerinline 3434*58b9f456SAndroid Build Coastguard Workertypename enable_if 3435*58b9f456SAndroid Build Coastguard Worker< 3436*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3437*58b9f456SAndroid Build Coastguard Worker valarray<_Tp>& 3438*58b9f456SAndroid Build Coastguard Worker>::type 3439*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator*=(const _Expr& __v) 3440*58b9f456SAndroid Build Coastguard Worker{ 3441*58b9f456SAndroid Build Coastguard Worker size_t __i = 0; 3442*58b9f456SAndroid Build Coastguard Worker for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 3443*58b9f456SAndroid Build Coastguard Worker *__t *= __v[__i]; 3444*58b9f456SAndroid Build Coastguard Worker return *this; 3445*58b9f456SAndroid Build Coastguard Worker} 3446*58b9f456SAndroid Build Coastguard Worker 3447*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3448*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 3449*58b9f456SAndroid Build Coastguard Workerinline 3450*58b9f456SAndroid Build Coastguard Workertypename enable_if 3451*58b9f456SAndroid Build Coastguard Worker< 3452*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3453*58b9f456SAndroid Build Coastguard Worker valarray<_Tp>& 3454*58b9f456SAndroid Build Coastguard Worker>::type 3455*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator/=(const _Expr& __v) 3456*58b9f456SAndroid Build Coastguard Worker{ 3457*58b9f456SAndroid Build Coastguard Worker size_t __i = 0; 3458*58b9f456SAndroid Build Coastguard Worker for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 3459*58b9f456SAndroid Build Coastguard Worker *__t /= __v[__i]; 3460*58b9f456SAndroid Build Coastguard Worker return *this; 3461*58b9f456SAndroid Build Coastguard Worker} 3462*58b9f456SAndroid Build Coastguard Worker 3463*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3464*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 3465*58b9f456SAndroid Build Coastguard Workerinline 3466*58b9f456SAndroid Build Coastguard Workertypename enable_if 3467*58b9f456SAndroid Build Coastguard Worker< 3468*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3469*58b9f456SAndroid Build Coastguard Worker valarray<_Tp>& 3470*58b9f456SAndroid Build Coastguard Worker>::type 3471*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator%=(const _Expr& __v) 3472*58b9f456SAndroid Build Coastguard Worker{ 3473*58b9f456SAndroid Build Coastguard Worker size_t __i = 0; 3474*58b9f456SAndroid Build Coastguard Worker for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 3475*58b9f456SAndroid Build Coastguard Worker *__t %= __v[__i]; 3476*58b9f456SAndroid Build Coastguard Worker return *this; 3477*58b9f456SAndroid Build Coastguard Worker} 3478*58b9f456SAndroid Build Coastguard Worker 3479*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3480*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 3481*58b9f456SAndroid Build Coastguard Workerinline 3482*58b9f456SAndroid Build Coastguard Workertypename enable_if 3483*58b9f456SAndroid Build Coastguard Worker< 3484*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3485*58b9f456SAndroid Build Coastguard Worker valarray<_Tp>& 3486*58b9f456SAndroid Build Coastguard Worker>::type 3487*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator+=(const _Expr& __v) 3488*58b9f456SAndroid Build Coastguard Worker{ 3489*58b9f456SAndroid Build Coastguard Worker size_t __i = 0; 3490*58b9f456SAndroid Build Coastguard Worker for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 3491*58b9f456SAndroid Build Coastguard Worker *__t += __v[__i]; 3492*58b9f456SAndroid Build Coastguard Worker return *this; 3493*58b9f456SAndroid Build Coastguard Worker} 3494*58b9f456SAndroid Build Coastguard Worker 3495*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3496*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 3497*58b9f456SAndroid Build Coastguard Workerinline 3498*58b9f456SAndroid Build Coastguard Workertypename enable_if 3499*58b9f456SAndroid Build Coastguard Worker< 3500*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3501*58b9f456SAndroid Build Coastguard Worker valarray<_Tp>& 3502*58b9f456SAndroid Build Coastguard Worker>::type 3503*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator-=(const _Expr& __v) 3504*58b9f456SAndroid Build Coastguard Worker{ 3505*58b9f456SAndroid Build Coastguard Worker size_t __i = 0; 3506*58b9f456SAndroid Build Coastguard Worker for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 3507*58b9f456SAndroid Build Coastguard Worker *__t -= __v[__i]; 3508*58b9f456SAndroid Build Coastguard Worker return *this; 3509*58b9f456SAndroid Build Coastguard Worker} 3510*58b9f456SAndroid Build Coastguard Worker 3511*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3512*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 3513*58b9f456SAndroid Build Coastguard Workerinline 3514*58b9f456SAndroid Build Coastguard Workertypename enable_if 3515*58b9f456SAndroid Build Coastguard Worker< 3516*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3517*58b9f456SAndroid Build Coastguard Worker valarray<_Tp>& 3518*58b9f456SAndroid Build Coastguard Worker>::type 3519*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator^=(const _Expr& __v) 3520*58b9f456SAndroid Build Coastguard Worker{ 3521*58b9f456SAndroid Build Coastguard Worker size_t __i = 0; 3522*58b9f456SAndroid Build Coastguard Worker for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 3523*58b9f456SAndroid Build Coastguard Worker *__t ^= __v[__i]; 3524*58b9f456SAndroid Build Coastguard Worker return *this; 3525*58b9f456SAndroid Build Coastguard Worker} 3526*58b9f456SAndroid Build Coastguard Worker 3527*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3528*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 3529*58b9f456SAndroid Build Coastguard Workerinline 3530*58b9f456SAndroid Build Coastguard Workertypename enable_if 3531*58b9f456SAndroid Build Coastguard Worker< 3532*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3533*58b9f456SAndroid Build Coastguard Worker valarray<_Tp>& 3534*58b9f456SAndroid Build Coastguard Worker>::type 3535*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator|=(const _Expr& __v) 3536*58b9f456SAndroid Build Coastguard Worker{ 3537*58b9f456SAndroid Build Coastguard Worker size_t __i = 0; 3538*58b9f456SAndroid Build Coastguard Worker for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 3539*58b9f456SAndroid Build Coastguard Worker *__t |= __v[__i]; 3540*58b9f456SAndroid Build Coastguard Worker return *this; 3541*58b9f456SAndroid Build Coastguard Worker} 3542*58b9f456SAndroid Build Coastguard Worker 3543*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3544*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 3545*58b9f456SAndroid Build Coastguard Workerinline 3546*58b9f456SAndroid Build Coastguard Workertypename enable_if 3547*58b9f456SAndroid Build Coastguard Worker< 3548*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3549*58b9f456SAndroid Build Coastguard Worker valarray<_Tp>& 3550*58b9f456SAndroid Build Coastguard Worker>::type 3551*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator&=(const _Expr& __v) 3552*58b9f456SAndroid Build Coastguard Worker{ 3553*58b9f456SAndroid Build Coastguard Worker size_t __i = 0; 3554*58b9f456SAndroid Build Coastguard Worker for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 3555*58b9f456SAndroid Build Coastguard Worker *__t &= __v[__i]; 3556*58b9f456SAndroid Build Coastguard Worker return *this; 3557*58b9f456SAndroid Build Coastguard Worker} 3558*58b9f456SAndroid Build Coastguard Worker 3559*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3560*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 3561*58b9f456SAndroid Build Coastguard Workerinline 3562*58b9f456SAndroid Build Coastguard Workertypename enable_if 3563*58b9f456SAndroid Build Coastguard Worker< 3564*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3565*58b9f456SAndroid Build Coastguard Worker valarray<_Tp>& 3566*58b9f456SAndroid Build Coastguard Worker>::type 3567*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator<<=(const _Expr& __v) 3568*58b9f456SAndroid Build Coastguard Worker{ 3569*58b9f456SAndroid Build Coastguard Worker size_t __i = 0; 3570*58b9f456SAndroid Build Coastguard Worker for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 3571*58b9f456SAndroid Build Coastguard Worker *__t <<= __v[__i]; 3572*58b9f456SAndroid Build Coastguard Worker return *this; 3573*58b9f456SAndroid Build Coastguard Worker} 3574*58b9f456SAndroid Build Coastguard Worker 3575*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3576*58b9f456SAndroid Build Coastguard Workertemplate <class _Expr> 3577*58b9f456SAndroid Build Coastguard Workerinline 3578*58b9f456SAndroid Build Coastguard Workertypename enable_if 3579*58b9f456SAndroid Build Coastguard Worker< 3580*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3581*58b9f456SAndroid Build Coastguard Worker valarray<_Tp>& 3582*58b9f456SAndroid Build Coastguard Worker>::type 3583*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::operator>>=(const _Expr& __v) 3584*58b9f456SAndroid Build Coastguard Worker{ 3585*58b9f456SAndroid Build Coastguard Worker size_t __i = 0; 3586*58b9f456SAndroid Build Coastguard Worker for (value_type* __t = __begin_; __t != __end_ ; ++__t, ++__i) 3587*58b9f456SAndroid Build Coastguard Worker *__t >>= __v[__i]; 3588*58b9f456SAndroid Build Coastguard Worker return *this; 3589*58b9f456SAndroid Build Coastguard Worker} 3590*58b9f456SAndroid Build Coastguard Worker 3591*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3592*58b9f456SAndroid Build Coastguard Workerinline 3593*58b9f456SAndroid Build Coastguard Workervoid 3594*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::swap(valarray& __v) _NOEXCEPT 3595*58b9f456SAndroid Build Coastguard Worker{ 3596*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__begin_, __v.__begin_); 3597*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__end_, __v.__end_); 3598*58b9f456SAndroid Build Coastguard Worker} 3599*58b9f456SAndroid Build Coastguard Worker 3600*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3601*58b9f456SAndroid Build Coastguard Workerinline 3602*58b9f456SAndroid Build Coastguard Worker_Tp 3603*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::sum() const 3604*58b9f456SAndroid Build Coastguard Worker{ 3605*58b9f456SAndroid Build Coastguard Worker if (__begin_ == __end_) 3606*58b9f456SAndroid Build Coastguard Worker return value_type(); 3607*58b9f456SAndroid Build Coastguard Worker const value_type* __p = __begin_; 3608*58b9f456SAndroid Build Coastguard Worker _Tp __r = *__p; 3609*58b9f456SAndroid Build Coastguard Worker for (++__p; __p != __end_; ++__p) 3610*58b9f456SAndroid Build Coastguard Worker __r += *__p; 3611*58b9f456SAndroid Build Coastguard Worker return __r; 3612*58b9f456SAndroid Build Coastguard Worker} 3613*58b9f456SAndroid Build Coastguard Worker 3614*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3615*58b9f456SAndroid Build Coastguard Workerinline 3616*58b9f456SAndroid Build Coastguard Worker_Tp 3617*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::min() const 3618*58b9f456SAndroid Build Coastguard Worker{ 3619*58b9f456SAndroid Build Coastguard Worker if (__begin_ == __end_) 3620*58b9f456SAndroid Build Coastguard Worker return value_type(); 3621*58b9f456SAndroid Build Coastguard Worker return *_VSTD::min_element(__begin_, __end_); 3622*58b9f456SAndroid Build Coastguard Worker} 3623*58b9f456SAndroid Build Coastguard Worker 3624*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3625*58b9f456SAndroid Build Coastguard Workerinline 3626*58b9f456SAndroid Build Coastguard Worker_Tp 3627*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::max() const 3628*58b9f456SAndroid Build Coastguard Worker{ 3629*58b9f456SAndroid Build Coastguard Worker if (__begin_ == __end_) 3630*58b9f456SAndroid Build Coastguard Worker return value_type(); 3631*58b9f456SAndroid Build Coastguard Worker return *_VSTD::max_element(__begin_, __end_); 3632*58b9f456SAndroid Build Coastguard Worker} 3633*58b9f456SAndroid Build Coastguard Worker 3634*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3635*58b9f456SAndroid Build Coastguard Workervalarray<_Tp> 3636*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::shift(int __i) const 3637*58b9f456SAndroid Build Coastguard Worker{ 3638*58b9f456SAndroid Build Coastguard Worker valarray<value_type> __r; 3639*58b9f456SAndroid Build Coastguard Worker size_t __n = size(); 3640*58b9f456SAndroid Build Coastguard Worker if (__n) 3641*58b9f456SAndroid Build Coastguard Worker { 3642*58b9f456SAndroid Build Coastguard Worker __r.__begin_ = 3643*58b9f456SAndroid Build Coastguard Worker __r.__end_ = 3644*58b9f456SAndroid Build Coastguard Worker static_cast<value_type*>( 3645*58b9f456SAndroid Build Coastguard Worker _VSTD::__libcpp_allocate(__n * sizeof(value_type), __alignof(value_type))); 3646*58b9f456SAndroid Build Coastguard Worker const value_type* __sb; 3647*58b9f456SAndroid Build Coastguard Worker value_type* __tb; 3648*58b9f456SAndroid Build Coastguard Worker value_type* __te; 3649*58b9f456SAndroid Build Coastguard Worker if (__i >= 0) 3650*58b9f456SAndroid Build Coastguard Worker { 3651*58b9f456SAndroid Build Coastguard Worker __i = _VSTD::min(__i, static_cast<int>(__n)); 3652*58b9f456SAndroid Build Coastguard Worker __sb = __begin_ + __i; 3653*58b9f456SAndroid Build Coastguard Worker __tb = __r.__begin_; 3654*58b9f456SAndroid Build Coastguard Worker __te = __r.__begin_ + (__n - __i); 3655*58b9f456SAndroid Build Coastguard Worker } 3656*58b9f456SAndroid Build Coastguard Worker else 3657*58b9f456SAndroid Build Coastguard Worker { 3658*58b9f456SAndroid Build Coastguard Worker __i = _VSTD::min(-__i, static_cast<int>(__n)); 3659*58b9f456SAndroid Build Coastguard Worker __sb = __begin_; 3660*58b9f456SAndroid Build Coastguard Worker __tb = __r.__begin_ + __i; 3661*58b9f456SAndroid Build Coastguard Worker __te = __r.__begin_ + __n; 3662*58b9f456SAndroid Build Coastguard Worker } 3663*58b9f456SAndroid Build Coastguard Worker for (; __r.__end_ != __tb; ++__r.__end_) 3664*58b9f456SAndroid Build Coastguard Worker ::new (__r.__end_) value_type(); 3665*58b9f456SAndroid Build Coastguard Worker for (; __r.__end_ != __te; ++__r.__end_, ++__sb) 3666*58b9f456SAndroid Build Coastguard Worker ::new (__r.__end_) value_type(*__sb); 3667*58b9f456SAndroid Build Coastguard Worker for (__te = __r.__begin_ + __n; __r.__end_ != __te; ++__r.__end_) 3668*58b9f456SAndroid Build Coastguard Worker ::new (__r.__end_) value_type(); 3669*58b9f456SAndroid Build Coastguard Worker } 3670*58b9f456SAndroid Build Coastguard Worker return __r; 3671*58b9f456SAndroid Build Coastguard Worker} 3672*58b9f456SAndroid Build Coastguard Worker 3673*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3674*58b9f456SAndroid Build Coastguard Workervalarray<_Tp> 3675*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::cshift(int __i) const 3676*58b9f456SAndroid Build Coastguard Worker{ 3677*58b9f456SAndroid Build Coastguard Worker valarray<value_type> __r; 3678*58b9f456SAndroid Build Coastguard Worker size_t __n = size(); 3679*58b9f456SAndroid Build Coastguard Worker if (__n) 3680*58b9f456SAndroid Build Coastguard Worker { 3681*58b9f456SAndroid Build Coastguard Worker __r.__begin_ = 3682*58b9f456SAndroid Build Coastguard Worker __r.__end_ = 3683*58b9f456SAndroid Build Coastguard Worker static_cast<value_type*>( 3684*58b9f456SAndroid Build Coastguard Worker _VSTD::__libcpp_allocate(__n * sizeof(value_type), __alignof(value_type))); 3685*58b9f456SAndroid Build Coastguard Worker __i %= static_cast<int>(__n); 3686*58b9f456SAndroid Build Coastguard Worker const value_type* __m = __i >= 0 ? __begin_ + __i : __end_ + __i; 3687*58b9f456SAndroid Build Coastguard Worker for (const value_type* __s = __m; __s != __end_; ++__r.__end_, ++__s) 3688*58b9f456SAndroid Build Coastguard Worker ::new (__r.__end_) value_type(*__s); 3689*58b9f456SAndroid Build Coastguard Worker for (const value_type* __s = __begin_; __s != __m; ++__r.__end_, ++__s) 3690*58b9f456SAndroid Build Coastguard Worker ::new (__r.__end_) value_type(*__s); 3691*58b9f456SAndroid Build Coastguard Worker } 3692*58b9f456SAndroid Build Coastguard Worker return __r; 3693*58b9f456SAndroid Build Coastguard Worker} 3694*58b9f456SAndroid Build Coastguard Worker 3695*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3696*58b9f456SAndroid Build Coastguard Workervalarray<_Tp> 3697*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::apply(value_type __f(value_type)) const 3698*58b9f456SAndroid Build Coastguard Worker{ 3699*58b9f456SAndroid Build Coastguard Worker valarray<value_type> __r; 3700*58b9f456SAndroid Build Coastguard Worker size_t __n = size(); 3701*58b9f456SAndroid Build Coastguard Worker if (__n) 3702*58b9f456SAndroid Build Coastguard Worker { 3703*58b9f456SAndroid Build Coastguard Worker __r.__begin_ = 3704*58b9f456SAndroid Build Coastguard Worker __r.__end_ = 3705*58b9f456SAndroid Build Coastguard Worker static_cast<value_type*>( 3706*58b9f456SAndroid Build Coastguard Worker _VSTD::__libcpp_allocate(__n * sizeof(value_type), __alignof(value_type))); 3707*58b9f456SAndroid Build Coastguard Worker for (const value_type* __p = __begin_; __n; ++__r.__end_, ++__p, --__n) 3708*58b9f456SAndroid Build Coastguard Worker ::new (__r.__end_) value_type(__f(*__p)); 3709*58b9f456SAndroid Build Coastguard Worker } 3710*58b9f456SAndroid Build Coastguard Worker return __r; 3711*58b9f456SAndroid Build Coastguard Worker} 3712*58b9f456SAndroid Build Coastguard Worker 3713*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3714*58b9f456SAndroid Build Coastguard Workervalarray<_Tp> 3715*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::apply(value_type __f(const value_type&)) const 3716*58b9f456SAndroid Build Coastguard Worker{ 3717*58b9f456SAndroid Build Coastguard Worker valarray<value_type> __r; 3718*58b9f456SAndroid Build Coastguard Worker size_t __n = size(); 3719*58b9f456SAndroid Build Coastguard Worker if (__n) 3720*58b9f456SAndroid Build Coastguard Worker { 3721*58b9f456SAndroid Build Coastguard Worker __r.__begin_ = 3722*58b9f456SAndroid Build Coastguard Worker __r.__end_ = 3723*58b9f456SAndroid Build Coastguard Worker static_cast<value_type*>( 3724*58b9f456SAndroid Build Coastguard Worker _VSTD::__libcpp_allocate(__n * sizeof(value_type), __alignof(value_type))); 3725*58b9f456SAndroid Build Coastguard Worker for (const value_type* __p = __begin_; __n; ++__r.__end_, ++__p, --__n) 3726*58b9f456SAndroid Build Coastguard Worker ::new (__r.__end_) value_type(__f(*__p)); 3727*58b9f456SAndroid Build Coastguard Worker } 3728*58b9f456SAndroid Build Coastguard Worker return __r; 3729*58b9f456SAndroid Build Coastguard Worker} 3730*58b9f456SAndroid Build Coastguard Worker 3731*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3732*58b9f456SAndroid Build Coastguard Workerinline 3733*58b9f456SAndroid Build Coastguard Workervoid valarray<_Tp>::__clear(size_t __capacity) 3734*58b9f456SAndroid Build Coastguard Worker{ 3735*58b9f456SAndroid Build Coastguard Worker if (__begin_ != nullptr) 3736*58b9f456SAndroid Build Coastguard Worker { 3737*58b9f456SAndroid Build Coastguard Worker while (__end_ != __begin_) 3738*58b9f456SAndroid Build Coastguard Worker (--__end_)->~value_type(); 3739*58b9f456SAndroid Build Coastguard Worker _VSTD::__libcpp_deallocate(__begin_, __capacity * sizeof(value_type), __alignof(value_type)); 3740*58b9f456SAndroid Build Coastguard Worker __begin_ = __end_ = nullptr; 3741*58b9f456SAndroid Build Coastguard Worker } 3742*58b9f456SAndroid Build Coastguard Worker} 3743*58b9f456SAndroid Build Coastguard Worker 3744*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 3745*58b9f456SAndroid Build Coastguard Workervoid 3746*58b9f456SAndroid Build Coastguard Workervalarray<_Tp>::resize(size_t __n, value_type __x) 3747*58b9f456SAndroid Build Coastguard Worker{ 3748*58b9f456SAndroid Build Coastguard Worker __clear(size()); 3749*58b9f456SAndroid Build Coastguard Worker if (__n) 3750*58b9f456SAndroid Build Coastguard Worker { 3751*58b9f456SAndroid Build Coastguard Worker __begin_ = __end_ = static_cast<value_type*>( 3752*58b9f456SAndroid Build Coastguard Worker _VSTD::__libcpp_allocate(__n * sizeof(value_type), __alignof(value_type))); 3753*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 3754*58b9f456SAndroid Build Coastguard Worker try 3755*58b9f456SAndroid Build Coastguard Worker { 3756*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 3757*58b9f456SAndroid Build Coastguard Worker for (size_t __n_left = __n; __n_left; --__n_left, ++__end_) 3758*58b9f456SAndroid Build Coastguard Worker ::new (__end_) value_type(__x); 3759*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 3760*58b9f456SAndroid Build Coastguard Worker } 3761*58b9f456SAndroid Build Coastguard Worker catch (...) 3762*58b9f456SAndroid Build Coastguard Worker { 3763*58b9f456SAndroid Build Coastguard Worker __clear(__n); 3764*58b9f456SAndroid Build Coastguard Worker throw; 3765*58b9f456SAndroid Build Coastguard Worker } 3766*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 3767*58b9f456SAndroid Build Coastguard Worker } 3768*58b9f456SAndroid Build Coastguard Worker} 3769*58b9f456SAndroid Build Coastguard Worker 3770*58b9f456SAndroid Build Coastguard Workertemplate<class _Tp> 3771*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 3772*58b9f456SAndroid Build Coastguard Workervoid 3773*58b9f456SAndroid Build Coastguard Workerswap(valarray<_Tp>& __x, valarray<_Tp>& __y) _NOEXCEPT 3774*58b9f456SAndroid Build Coastguard Worker{ 3775*58b9f456SAndroid Build Coastguard Worker __x.swap(__y); 3776*58b9f456SAndroid Build Coastguard Worker} 3777*58b9f456SAndroid Build Coastguard Worker 3778*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 3779*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 3780*58b9f456SAndroid Build Coastguard Workertypename enable_if 3781*58b9f456SAndroid Build Coastguard Worker< 3782*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 3783*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<multiplies<typename _Expr1::value_type>, _Expr1, _Expr2> > 3784*58b9f456SAndroid Build Coastguard Worker>::type 3785*58b9f456SAndroid Build Coastguard Workeroperator*(const _Expr1& __x, const _Expr2& __y) 3786*58b9f456SAndroid Build Coastguard Worker{ 3787*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 3788*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<multiplies<value_type>, _Expr1, _Expr2> _Op; 3789*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(multiplies<value_type>(), __x, __y)); 3790*58b9f456SAndroid Build Coastguard Worker} 3791*58b9f456SAndroid Build Coastguard Worker 3792*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 3793*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 3794*58b9f456SAndroid Build Coastguard Workertypename enable_if 3795*58b9f456SAndroid Build Coastguard Worker< 3796*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3797*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<multiplies<typename _Expr::value_type>, 3798*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 3799*58b9f456SAndroid Build Coastguard Worker>::type 3800*58b9f456SAndroid Build Coastguard Workeroperator*(const _Expr& __x, const typename _Expr::value_type& __y) 3801*58b9f456SAndroid Build Coastguard Worker{ 3802*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 3803*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<multiplies<value_type>, _Expr, __scalar_expr<value_type> > _Op; 3804*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(multiplies<value_type>(), 3805*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 3806*58b9f456SAndroid Build Coastguard Worker} 3807*58b9f456SAndroid Build Coastguard Worker 3808*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 3809*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 3810*58b9f456SAndroid Build Coastguard Workertypename enable_if 3811*58b9f456SAndroid Build Coastguard Worker< 3812*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3813*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<multiplies<typename _Expr::value_type>, 3814*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 3815*58b9f456SAndroid Build Coastguard Worker>::type 3816*58b9f456SAndroid Build Coastguard Workeroperator*(const typename _Expr::value_type& __x, const _Expr& __y) 3817*58b9f456SAndroid Build Coastguard Worker{ 3818*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 3819*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<multiplies<value_type>, __scalar_expr<value_type>, _Expr> _Op; 3820*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(multiplies<value_type>(), 3821*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 3822*58b9f456SAndroid Build Coastguard Worker} 3823*58b9f456SAndroid Build Coastguard Worker 3824*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 3825*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 3826*58b9f456SAndroid Build Coastguard Workertypename enable_if 3827*58b9f456SAndroid Build Coastguard Worker< 3828*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 3829*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<divides<typename _Expr1::value_type>, _Expr1, _Expr2> > 3830*58b9f456SAndroid Build Coastguard Worker>::type 3831*58b9f456SAndroid Build Coastguard Workeroperator/(const _Expr1& __x, const _Expr2& __y) 3832*58b9f456SAndroid Build Coastguard Worker{ 3833*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 3834*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<divides<value_type>, _Expr1, _Expr2> _Op; 3835*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(divides<value_type>(), __x, __y)); 3836*58b9f456SAndroid Build Coastguard Worker} 3837*58b9f456SAndroid Build Coastguard Worker 3838*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 3839*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 3840*58b9f456SAndroid Build Coastguard Workertypename enable_if 3841*58b9f456SAndroid Build Coastguard Worker< 3842*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3843*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<divides<typename _Expr::value_type>, 3844*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 3845*58b9f456SAndroid Build Coastguard Worker>::type 3846*58b9f456SAndroid Build Coastguard Workeroperator/(const _Expr& __x, const typename _Expr::value_type& __y) 3847*58b9f456SAndroid Build Coastguard Worker{ 3848*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 3849*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<divides<value_type>, _Expr, __scalar_expr<value_type> > _Op; 3850*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(divides<value_type>(), 3851*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 3852*58b9f456SAndroid Build Coastguard Worker} 3853*58b9f456SAndroid Build Coastguard Worker 3854*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 3855*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 3856*58b9f456SAndroid Build Coastguard Workertypename enable_if 3857*58b9f456SAndroid Build Coastguard Worker< 3858*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3859*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<divides<typename _Expr::value_type>, 3860*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 3861*58b9f456SAndroid Build Coastguard Worker>::type 3862*58b9f456SAndroid Build Coastguard Workeroperator/(const typename _Expr::value_type& __x, const _Expr& __y) 3863*58b9f456SAndroid Build Coastguard Worker{ 3864*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 3865*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<divides<value_type>, __scalar_expr<value_type>, _Expr> _Op; 3866*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(divides<value_type>(), 3867*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 3868*58b9f456SAndroid Build Coastguard Worker} 3869*58b9f456SAndroid Build Coastguard Worker 3870*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 3871*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 3872*58b9f456SAndroid Build Coastguard Workertypename enable_if 3873*58b9f456SAndroid Build Coastguard Worker< 3874*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 3875*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<modulus<typename _Expr1::value_type>, _Expr1, _Expr2> > 3876*58b9f456SAndroid Build Coastguard Worker>::type 3877*58b9f456SAndroid Build Coastguard Workeroperator%(const _Expr1& __x, const _Expr2& __y) 3878*58b9f456SAndroid Build Coastguard Worker{ 3879*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 3880*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<modulus<value_type>, _Expr1, _Expr2> _Op; 3881*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(modulus<value_type>(), __x, __y)); 3882*58b9f456SAndroid Build Coastguard Worker} 3883*58b9f456SAndroid Build Coastguard Worker 3884*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 3885*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 3886*58b9f456SAndroid Build Coastguard Workertypename enable_if 3887*58b9f456SAndroid Build Coastguard Worker< 3888*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3889*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<modulus<typename _Expr::value_type>, 3890*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 3891*58b9f456SAndroid Build Coastguard Worker>::type 3892*58b9f456SAndroid Build Coastguard Workeroperator%(const _Expr& __x, const typename _Expr::value_type& __y) 3893*58b9f456SAndroid Build Coastguard Worker{ 3894*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 3895*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<modulus<value_type>, _Expr, __scalar_expr<value_type> > _Op; 3896*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(modulus<value_type>(), 3897*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 3898*58b9f456SAndroid Build Coastguard Worker} 3899*58b9f456SAndroid Build Coastguard Worker 3900*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 3901*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 3902*58b9f456SAndroid Build Coastguard Workertypename enable_if 3903*58b9f456SAndroid Build Coastguard Worker< 3904*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3905*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<modulus<typename _Expr::value_type>, 3906*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 3907*58b9f456SAndroid Build Coastguard Worker>::type 3908*58b9f456SAndroid Build Coastguard Workeroperator%(const typename _Expr::value_type& __x, const _Expr& __y) 3909*58b9f456SAndroid Build Coastguard Worker{ 3910*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 3911*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<modulus<value_type>, __scalar_expr<value_type>, _Expr> _Op; 3912*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(modulus<value_type>(), 3913*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 3914*58b9f456SAndroid Build Coastguard Worker} 3915*58b9f456SAndroid Build Coastguard Worker 3916*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 3917*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 3918*58b9f456SAndroid Build Coastguard Workertypename enable_if 3919*58b9f456SAndroid Build Coastguard Worker< 3920*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 3921*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<plus<typename _Expr1::value_type>, _Expr1, _Expr2> > 3922*58b9f456SAndroid Build Coastguard Worker>::type 3923*58b9f456SAndroid Build Coastguard Workeroperator+(const _Expr1& __x, const _Expr2& __y) 3924*58b9f456SAndroid Build Coastguard Worker{ 3925*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 3926*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<plus<value_type>, _Expr1, _Expr2> _Op; 3927*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(plus<value_type>(), __x, __y)); 3928*58b9f456SAndroid Build Coastguard Worker} 3929*58b9f456SAndroid Build Coastguard Worker 3930*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 3931*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 3932*58b9f456SAndroid Build Coastguard Workertypename enable_if 3933*58b9f456SAndroid Build Coastguard Worker< 3934*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3935*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<plus<typename _Expr::value_type>, 3936*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 3937*58b9f456SAndroid Build Coastguard Worker>::type 3938*58b9f456SAndroid Build Coastguard Workeroperator+(const _Expr& __x, const typename _Expr::value_type& __y) 3939*58b9f456SAndroid Build Coastguard Worker{ 3940*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 3941*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<plus<value_type>, _Expr, __scalar_expr<value_type> > _Op; 3942*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(plus<value_type>(), 3943*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 3944*58b9f456SAndroid Build Coastguard Worker} 3945*58b9f456SAndroid Build Coastguard Worker 3946*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 3947*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 3948*58b9f456SAndroid Build Coastguard Workertypename enable_if 3949*58b9f456SAndroid Build Coastguard Worker< 3950*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3951*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<plus<typename _Expr::value_type>, 3952*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 3953*58b9f456SAndroid Build Coastguard Worker>::type 3954*58b9f456SAndroid Build Coastguard Workeroperator+(const typename _Expr::value_type& __x, const _Expr& __y) 3955*58b9f456SAndroid Build Coastguard Worker{ 3956*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 3957*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<plus<value_type>, __scalar_expr<value_type>, _Expr> _Op; 3958*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(plus<value_type>(), 3959*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 3960*58b9f456SAndroid Build Coastguard Worker} 3961*58b9f456SAndroid Build Coastguard Worker 3962*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 3963*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 3964*58b9f456SAndroid Build Coastguard Workertypename enable_if 3965*58b9f456SAndroid Build Coastguard Worker< 3966*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 3967*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<minus<typename _Expr1::value_type>, _Expr1, _Expr2> > 3968*58b9f456SAndroid Build Coastguard Worker>::type 3969*58b9f456SAndroid Build Coastguard Workeroperator-(const _Expr1& __x, const _Expr2& __y) 3970*58b9f456SAndroid Build Coastguard Worker{ 3971*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 3972*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<minus<value_type>, _Expr1, _Expr2> _Op; 3973*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(minus<value_type>(), __x, __y)); 3974*58b9f456SAndroid Build Coastguard Worker} 3975*58b9f456SAndroid Build Coastguard Worker 3976*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 3977*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 3978*58b9f456SAndroid Build Coastguard Workertypename enable_if 3979*58b9f456SAndroid Build Coastguard Worker< 3980*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3981*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<minus<typename _Expr::value_type>, 3982*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 3983*58b9f456SAndroid Build Coastguard Worker>::type 3984*58b9f456SAndroid Build Coastguard Workeroperator-(const _Expr& __x, const typename _Expr::value_type& __y) 3985*58b9f456SAndroid Build Coastguard Worker{ 3986*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 3987*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<minus<value_type>, _Expr, __scalar_expr<value_type> > _Op; 3988*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(minus<value_type>(), 3989*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 3990*58b9f456SAndroid Build Coastguard Worker} 3991*58b9f456SAndroid Build Coastguard Worker 3992*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 3993*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 3994*58b9f456SAndroid Build Coastguard Workertypename enable_if 3995*58b9f456SAndroid Build Coastguard Worker< 3996*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 3997*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<minus<typename _Expr::value_type>, 3998*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 3999*58b9f456SAndroid Build Coastguard Worker>::type 4000*58b9f456SAndroid Build Coastguard Workeroperator-(const typename _Expr::value_type& __x, const _Expr& __y) 4001*58b9f456SAndroid Build Coastguard Worker{ 4002*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4003*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<minus<value_type>, __scalar_expr<value_type>, _Expr> _Op; 4004*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(minus<value_type>(), 4005*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 4006*58b9f456SAndroid Build Coastguard Worker} 4007*58b9f456SAndroid Build Coastguard Worker 4008*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 4009*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4010*58b9f456SAndroid Build Coastguard Workertypename enable_if 4011*58b9f456SAndroid Build Coastguard Worker< 4012*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 4013*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<bit_xor<typename _Expr1::value_type>, _Expr1, _Expr2> > 4014*58b9f456SAndroid Build Coastguard Worker>::type 4015*58b9f456SAndroid Build Coastguard Workeroperator^(const _Expr1& __x, const _Expr2& __y) 4016*58b9f456SAndroid Build Coastguard Worker{ 4017*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 4018*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<bit_xor<value_type>, _Expr1, _Expr2> _Op; 4019*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(bit_xor<value_type>(), __x, __y)); 4020*58b9f456SAndroid Build Coastguard Worker} 4021*58b9f456SAndroid Build Coastguard Worker 4022*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4023*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4024*58b9f456SAndroid Build Coastguard Workertypename enable_if 4025*58b9f456SAndroid Build Coastguard Worker< 4026*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4027*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<bit_xor<typename _Expr::value_type>, 4028*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 4029*58b9f456SAndroid Build Coastguard Worker>::type 4030*58b9f456SAndroid Build Coastguard Workeroperator^(const _Expr& __x, const typename _Expr::value_type& __y) 4031*58b9f456SAndroid Build Coastguard Worker{ 4032*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4033*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<bit_xor<value_type>, _Expr, __scalar_expr<value_type> > _Op; 4034*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(bit_xor<value_type>(), 4035*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 4036*58b9f456SAndroid Build Coastguard Worker} 4037*58b9f456SAndroid Build Coastguard Worker 4038*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4039*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4040*58b9f456SAndroid Build Coastguard Workertypename enable_if 4041*58b9f456SAndroid Build Coastguard Worker< 4042*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4043*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<bit_xor<typename _Expr::value_type>, 4044*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 4045*58b9f456SAndroid Build Coastguard Worker>::type 4046*58b9f456SAndroid Build Coastguard Workeroperator^(const typename _Expr::value_type& __x, const _Expr& __y) 4047*58b9f456SAndroid Build Coastguard Worker{ 4048*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4049*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<bit_xor<value_type>, __scalar_expr<value_type>, _Expr> _Op; 4050*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(bit_xor<value_type>(), 4051*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 4052*58b9f456SAndroid Build Coastguard Worker} 4053*58b9f456SAndroid Build Coastguard Worker 4054*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 4055*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4056*58b9f456SAndroid Build Coastguard Workertypename enable_if 4057*58b9f456SAndroid Build Coastguard Worker< 4058*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 4059*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<bit_and<typename _Expr1::value_type>, _Expr1, _Expr2> > 4060*58b9f456SAndroid Build Coastguard Worker>::type 4061*58b9f456SAndroid Build Coastguard Workeroperator&(const _Expr1& __x, const _Expr2& __y) 4062*58b9f456SAndroid Build Coastguard Worker{ 4063*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 4064*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<bit_and<value_type>, _Expr1, _Expr2> _Op; 4065*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(bit_and<value_type>(), __x, __y)); 4066*58b9f456SAndroid Build Coastguard Worker} 4067*58b9f456SAndroid Build Coastguard Worker 4068*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4069*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4070*58b9f456SAndroid Build Coastguard Workertypename enable_if 4071*58b9f456SAndroid Build Coastguard Worker< 4072*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4073*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<bit_and<typename _Expr::value_type>, 4074*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 4075*58b9f456SAndroid Build Coastguard Worker>::type 4076*58b9f456SAndroid Build Coastguard Workeroperator&(const _Expr& __x, const typename _Expr::value_type& __y) 4077*58b9f456SAndroid Build Coastguard Worker{ 4078*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4079*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<bit_and<value_type>, _Expr, __scalar_expr<value_type> > _Op; 4080*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(bit_and<value_type>(), 4081*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 4082*58b9f456SAndroid Build Coastguard Worker} 4083*58b9f456SAndroid Build Coastguard Worker 4084*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4085*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4086*58b9f456SAndroid Build Coastguard Workertypename enable_if 4087*58b9f456SAndroid Build Coastguard Worker< 4088*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4089*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<bit_and<typename _Expr::value_type>, 4090*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 4091*58b9f456SAndroid Build Coastguard Worker>::type 4092*58b9f456SAndroid Build Coastguard Workeroperator&(const typename _Expr::value_type& __x, const _Expr& __y) 4093*58b9f456SAndroid Build Coastguard Worker{ 4094*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4095*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<bit_and<value_type>, __scalar_expr<value_type>, _Expr> _Op; 4096*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(bit_and<value_type>(), 4097*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 4098*58b9f456SAndroid Build Coastguard Worker} 4099*58b9f456SAndroid Build Coastguard Worker 4100*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 4101*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4102*58b9f456SAndroid Build Coastguard Workertypename enable_if 4103*58b9f456SAndroid Build Coastguard Worker< 4104*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 4105*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<bit_or<typename _Expr1::value_type>, _Expr1, _Expr2> > 4106*58b9f456SAndroid Build Coastguard Worker>::type 4107*58b9f456SAndroid Build Coastguard Workeroperator|(const _Expr1& __x, const _Expr2& __y) 4108*58b9f456SAndroid Build Coastguard Worker{ 4109*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 4110*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<bit_or<value_type>, _Expr1, _Expr2> _Op; 4111*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(bit_or<value_type>(), __x, __y)); 4112*58b9f456SAndroid Build Coastguard Worker} 4113*58b9f456SAndroid Build Coastguard Worker 4114*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4115*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4116*58b9f456SAndroid Build Coastguard Workertypename enable_if 4117*58b9f456SAndroid Build Coastguard Worker< 4118*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4119*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<bit_or<typename _Expr::value_type>, 4120*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 4121*58b9f456SAndroid Build Coastguard Worker>::type 4122*58b9f456SAndroid Build Coastguard Workeroperator|(const _Expr& __x, const typename _Expr::value_type& __y) 4123*58b9f456SAndroid Build Coastguard Worker{ 4124*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4125*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<bit_or<value_type>, _Expr, __scalar_expr<value_type> > _Op; 4126*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(bit_or<value_type>(), 4127*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 4128*58b9f456SAndroid Build Coastguard Worker} 4129*58b9f456SAndroid Build Coastguard Worker 4130*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4131*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4132*58b9f456SAndroid Build Coastguard Workertypename enable_if 4133*58b9f456SAndroid Build Coastguard Worker< 4134*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4135*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<bit_or<typename _Expr::value_type>, 4136*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 4137*58b9f456SAndroid Build Coastguard Worker>::type 4138*58b9f456SAndroid Build Coastguard Workeroperator|(const typename _Expr::value_type& __x, const _Expr& __y) 4139*58b9f456SAndroid Build Coastguard Worker{ 4140*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4141*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<bit_or<value_type>, __scalar_expr<value_type>, _Expr> _Op; 4142*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(bit_or<value_type>(), 4143*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 4144*58b9f456SAndroid Build Coastguard Worker} 4145*58b9f456SAndroid Build Coastguard Worker 4146*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 4147*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4148*58b9f456SAndroid Build Coastguard Workertypename enable_if 4149*58b9f456SAndroid Build Coastguard Worker< 4150*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 4151*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<__bit_shift_left<typename _Expr1::value_type>, _Expr1, _Expr2> > 4152*58b9f456SAndroid Build Coastguard Worker>::type 4153*58b9f456SAndroid Build Coastguard Workeroperator<<(const _Expr1& __x, const _Expr2& __y) 4154*58b9f456SAndroid Build Coastguard Worker{ 4155*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 4156*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<__bit_shift_left<value_type>, _Expr1, _Expr2> _Op; 4157*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__bit_shift_left<value_type>(), __x, __y)); 4158*58b9f456SAndroid Build Coastguard Worker} 4159*58b9f456SAndroid Build Coastguard Worker 4160*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4161*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4162*58b9f456SAndroid Build Coastguard Workertypename enable_if 4163*58b9f456SAndroid Build Coastguard Worker< 4164*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4165*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<__bit_shift_left<typename _Expr::value_type>, 4166*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 4167*58b9f456SAndroid Build Coastguard Worker>::type 4168*58b9f456SAndroid Build Coastguard Workeroperator<<(const _Expr& __x, const typename _Expr::value_type& __y) 4169*58b9f456SAndroid Build Coastguard Worker{ 4170*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4171*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<__bit_shift_left<value_type>, _Expr, __scalar_expr<value_type> > _Op; 4172*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__bit_shift_left<value_type>(), 4173*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 4174*58b9f456SAndroid Build Coastguard Worker} 4175*58b9f456SAndroid Build Coastguard Worker 4176*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4177*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4178*58b9f456SAndroid Build Coastguard Workertypename enable_if 4179*58b9f456SAndroid Build Coastguard Worker< 4180*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4181*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<__bit_shift_left<typename _Expr::value_type>, 4182*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 4183*58b9f456SAndroid Build Coastguard Worker>::type 4184*58b9f456SAndroid Build Coastguard Workeroperator<<(const typename _Expr::value_type& __x, const _Expr& __y) 4185*58b9f456SAndroid Build Coastguard Worker{ 4186*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4187*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<__bit_shift_left<value_type>, __scalar_expr<value_type>, _Expr> _Op; 4188*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__bit_shift_left<value_type>(), 4189*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 4190*58b9f456SAndroid Build Coastguard Worker} 4191*58b9f456SAndroid Build Coastguard Worker 4192*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 4193*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4194*58b9f456SAndroid Build Coastguard Workertypename enable_if 4195*58b9f456SAndroid Build Coastguard Worker< 4196*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 4197*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<__bit_shift_right<typename _Expr1::value_type>, _Expr1, _Expr2> > 4198*58b9f456SAndroid Build Coastguard Worker>::type 4199*58b9f456SAndroid Build Coastguard Workeroperator>>(const _Expr1& __x, const _Expr2& __y) 4200*58b9f456SAndroid Build Coastguard Worker{ 4201*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 4202*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<__bit_shift_right<value_type>, _Expr1, _Expr2> _Op; 4203*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__bit_shift_right<value_type>(), __x, __y)); 4204*58b9f456SAndroid Build Coastguard Worker} 4205*58b9f456SAndroid Build Coastguard Worker 4206*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4207*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4208*58b9f456SAndroid Build Coastguard Workertypename enable_if 4209*58b9f456SAndroid Build Coastguard Worker< 4210*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4211*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<__bit_shift_right<typename _Expr::value_type>, 4212*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 4213*58b9f456SAndroid Build Coastguard Worker>::type 4214*58b9f456SAndroid Build Coastguard Workeroperator>>(const _Expr& __x, const typename _Expr::value_type& __y) 4215*58b9f456SAndroid Build Coastguard Worker{ 4216*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4217*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<__bit_shift_right<value_type>, _Expr, __scalar_expr<value_type> > _Op; 4218*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__bit_shift_right<value_type>(), 4219*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 4220*58b9f456SAndroid Build Coastguard Worker} 4221*58b9f456SAndroid Build Coastguard Worker 4222*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4223*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4224*58b9f456SAndroid Build Coastguard Workertypename enable_if 4225*58b9f456SAndroid Build Coastguard Worker< 4226*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4227*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<__bit_shift_right<typename _Expr::value_type>, 4228*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 4229*58b9f456SAndroid Build Coastguard Worker>::type 4230*58b9f456SAndroid Build Coastguard Workeroperator>>(const typename _Expr::value_type& __x, const _Expr& __y) 4231*58b9f456SAndroid Build Coastguard Worker{ 4232*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4233*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<__bit_shift_right<value_type>, __scalar_expr<value_type>, _Expr> _Op; 4234*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__bit_shift_right<value_type>(), 4235*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 4236*58b9f456SAndroid Build Coastguard Worker} 4237*58b9f456SAndroid Build Coastguard Worker 4238*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 4239*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4240*58b9f456SAndroid Build Coastguard Workertypename enable_if 4241*58b9f456SAndroid Build Coastguard Worker< 4242*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 4243*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<logical_and<typename _Expr1::value_type>, _Expr1, _Expr2> > 4244*58b9f456SAndroid Build Coastguard Worker>::type 4245*58b9f456SAndroid Build Coastguard Workeroperator&&(const _Expr1& __x, const _Expr2& __y) 4246*58b9f456SAndroid Build Coastguard Worker{ 4247*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 4248*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<logical_and<value_type>, _Expr1, _Expr2> _Op; 4249*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(logical_and<value_type>(), __x, __y)); 4250*58b9f456SAndroid Build Coastguard Worker} 4251*58b9f456SAndroid Build Coastguard Worker 4252*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4253*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4254*58b9f456SAndroid Build Coastguard Workertypename enable_if 4255*58b9f456SAndroid Build Coastguard Worker< 4256*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4257*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<logical_and<typename _Expr::value_type>, 4258*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 4259*58b9f456SAndroid Build Coastguard Worker>::type 4260*58b9f456SAndroid Build Coastguard Workeroperator&&(const _Expr& __x, const typename _Expr::value_type& __y) 4261*58b9f456SAndroid Build Coastguard Worker{ 4262*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4263*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<logical_and<value_type>, _Expr, __scalar_expr<value_type> > _Op; 4264*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(logical_and<value_type>(), 4265*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 4266*58b9f456SAndroid Build Coastguard Worker} 4267*58b9f456SAndroid Build Coastguard Worker 4268*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4269*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4270*58b9f456SAndroid Build Coastguard Workertypename enable_if 4271*58b9f456SAndroid Build Coastguard Worker< 4272*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4273*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<logical_and<typename _Expr::value_type>, 4274*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 4275*58b9f456SAndroid Build Coastguard Worker>::type 4276*58b9f456SAndroid Build Coastguard Workeroperator&&(const typename _Expr::value_type& __x, const _Expr& __y) 4277*58b9f456SAndroid Build Coastguard Worker{ 4278*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4279*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<logical_and<value_type>, __scalar_expr<value_type>, _Expr> _Op; 4280*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(logical_and<value_type>(), 4281*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 4282*58b9f456SAndroid Build Coastguard Worker} 4283*58b9f456SAndroid Build Coastguard Worker 4284*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 4285*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4286*58b9f456SAndroid Build Coastguard Workertypename enable_if 4287*58b9f456SAndroid Build Coastguard Worker< 4288*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 4289*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<logical_or<typename _Expr1::value_type>, _Expr1, _Expr2> > 4290*58b9f456SAndroid Build Coastguard Worker>::type 4291*58b9f456SAndroid Build Coastguard Workeroperator||(const _Expr1& __x, const _Expr2& __y) 4292*58b9f456SAndroid Build Coastguard Worker{ 4293*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 4294*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<logical_or<value_type>, _Expr1, _Expr2> _Op; 4295*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(logical_or<value_type>(), __x, __y)); 4296*58b9f456SAndroid Build Coastguard Worker} 4297*58b9f456SAndroid Build Coastguard Worker 4298*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4299*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4300*58b9f456SAndroid Build Coastguard Workertypename enable_if 4301*58b9f456SAndroid Build Coastguard Worker< 4302*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4303*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<logical_or<typename _Expr::value_type>, 4304*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 4305*58b9f456SAndroid Build Coastguard Worker>::type 4306*58b9f456SAndroid Build Coastguard Workeroperator||(const _Expr& __x, const typename _Expr::value_type& __y) 4307*58b9f456SAndroid Build Coastguard Worker{ 4308*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4309*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<logical_or<value_type>, _Expr, __scalar_expr<value_type> > _Op; 4310*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(logical_or<value_type>(), 4311*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 4312*58b9f456SAndroid Build Coastguard Worker} 4313*58b9f456SAndroid Build Coastguard Worker 4314*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4315*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4316*58b9f456SAndroid Build Coastguard Workertypename enable_if 4317*58b9f456SAndroid Build Coastguard Worker< 4318*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4319*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<logical_or<typename _Expr::value_type>, 4320*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 4321*58b9f456SAndroid Build Coastguard Worker>::type 4322*58b9f456SAndroid Build Coastguard Workeroperator||(const typename _Expr::value_type& __x, const _Expr& __y) 4323*58b9f456SAndroid Build Coastguard Worker{ 4324*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4325*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<logical_or<value_type>, __scalar_expr<value_type>, _Expr> _Op; 4326*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(logical_or<value_type>(), 4327*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 4328*58b9f456SAndroid Build Coastguard Worker} 4329*58b9f456SAndroid Build Coastguard Worker 4330*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 4331*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4332*58b9f456SAndroid Build Coastguard Workertypename enable_if 4333*58b9f456SAndroid Build Coastguard Worker< 4334*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 4335*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<equal_to<typename _Expr1::value_type>, _Expr1, _Expr2> > 4336*58b9f456SAndroid Build Coastguard Worker>::type 4337*58b9f456SAndroid Build Coastguard Workeroperator==(const _Expr1& __x, const _Expr2& __y) 4338*58b9f456SAndroid Build Coastguard Worker{ 4339*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 4340*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<equal_to<value_type>, _Expr1, _Expr2> _Op; 4341*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(equal_to<value_type>(), __x, __y)); 4342*58b9f456SAndroid Build Coastguard Worker} 4343*58b9f456SAndroid Build Coastguard Worker 4344*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4345*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4346*58b9f456SAndroid Build Coastguard Workertypename enable_if 4347*58b9f456SAndroid Build Coastguard Worker< 4348*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4349*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<equal_to<typename _Expr::value_type>, 4350*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 4351*58b9f456SAndroid Build Coastguard Worker>::type 4352*58b9f456SAndroid Build Coastguard Workeroperator==(const _Expr& __x, const typename _Expr::value_type& __y) 4353*58b9f456SAndroid Build Coastguard Worker{ 4354*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4355*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<equal_to<value_type>, _Expr, __scalar_expr<value_type> > _Op; 4356*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(equal_to<value_type>(), 4357*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 4358*58b9f456SAndroid Build Coastguard Worker} 4359*58b9f456SAndroid Build Coastguard Worker 4360*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4361*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4362*58b9f456SAndroid Build Coastguard Workertypename enable_if 4363*58b9f456SAndroid Build Coastguard Worker< 4364*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4365*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<equal_to<typename _Expr::value_type>, 4366*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 4367*58b9f456SAndroid Build Coastguard Worker>::type 4368*58b9f456SAndroid Build Coastguard Workeroperator==(const typename _Expr::value_type& __x, const _Expr& __y) 4369*58b9f456SAndroid Build Coastguard Worker{ 4370*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4371*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<equal_to<value_type>, __scalar_expr<value_type>, _Expr> _Op; 4372*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(equal_to<value_type>(), 4373*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 4374*58b9f456SAndroid Build Coastguard Worker} 4375*58b9f456SAndroid Build Coastguard Worker 4376*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 4377*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4378*58b9f456SAndroid Build Coastguard Workertypename enable_if 4379*58b9f456SAndroid Build Coastguard Worker< 4380*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 4381*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<not_equal_to<typename _Expr1::value_type>, _Expr1, _Expr2> > 4382*58b9f456SAndroid Build Coastguard Worker>::type 4383*58b9f456SAndroid Build Coastguard Workeroperator!=(const _Expr1& __x, const _Expr2& __y) 4384*58b9f456SAndroid Build Coastguard Worker{ 4385*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 4386*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<not_equal_to<value_type>, _Expr1, _Expr2> _Op; 4387*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(not_equal_to<value_type>(), __x, __y)); 4388*58b9f456SAndroid Build Coastguard Worker} 4389*58b9f456SAndroid Build Coastguard Worker 4390*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4391*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4392*58b9f456SAndroid Build Coastguard Workertypename enable_if 4393*58b9f456SAndroid Build Coastguard Worker< 4394*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4395*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<not_equal_to<typename _Expr::value_type>, 4396*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 4397*58b9f456SAndroid Build Coastguard Worker>::type 4398*58b9f456SAndroid Build Coastguard Workeroperator!=(const _Expr& __x, const typename _Expr::value_type& __y) 4399*58b9f456SAndroid Build Coastguard Worker{ 4400*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4401*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<not_equal_to<value_type>, _Expr, __scalar_expr<value_type> > _Op; 4402*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(not_equal_to<value_type>(), 4403*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 4404*58b9f456SAndroid Build Coastguard Worker} 4405*58b9f456SAndroid Build Coastguard Worker 4406*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4407*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4408*58b9f456SAndroid Build Coastguard Workertypename enable_if 4409*58b9f456SAndroid Build Coastguard Worker< 4410*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4411*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<not_equal_to<typename _Expr::value_type>, 4412*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 4413*58b9f456SAndroid Build Coastguard Worker>::type 4414*58b9f456SAndroid Build Coastguard Workeroperator!=(const typename _Expr::value_type& __x, const _Expr& __y) 4415*58b9f456SAndroid Build Coastguard Worker{ 4416*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4417*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<not_equal_to<value_type>, __scalar_expr<value_type>, _Expr> _Op; 4418*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(not_equal_to<value_type>(), 4419*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 4420*58b9f456SAndroid Build Coastguard Worker} 4421*58b9f456SAndroid Build Coastguard Worker 4422*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 4423*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4424*58b9f456SAndroid Build Coastguard Workertypename enable_if 4425*58b9f456SAndroid Build Coastguard Worker< 4426*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 4427*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<less<typename _Expr1::value_type>, _Expr1, _Expr2> > 4428*58b9f456SAndroid Build Coastguard Worker>::type 4429*58b9f456SAndroid Build Coastguard Workeroperator<(const _Expr1& __x, const _Expr2& __y) 4430*58b9f456SAndroid Build Coastguard Worker{ 4431*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 4432*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<less<value_type>, _Expr1, _Expr2> _Op; 4433*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(less<value_type>(), __x, __y)); 4434*58b9f456SAndroid Build Coastguard Worker} 4435*58b9f456SAndroid Build Coastguard Worker 4436*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4437*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4438*58b9f456SAndroid Build Coastguard Workertypename enable_if 4439*58b9f456SAndroid Build Coastguard Worker< 4440*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4441*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<less<typename _Expr::value_type>, 4442*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 4443*58b9f456SAndroid Build Coastguard Worker>::type 4444*58b9f456SAndroid Build Coastguard Workeroperator<(const _Expr& __x, const typename _Expr::value_type& __y) 4445*58b9f456SAndroid Build Coastguard Worker{ 4446*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4447*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<less<value_type>, _Expr, __scalar_expr<value_type> > _Op; 4448*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(less<value_type>(), 4449*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 4450*58b9f456SAndroid Build Coastguard Worker} 4451*58b9f456SAndroid Build Coastguard Worker 4452*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4453*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4454*58b9f456SAndroid Build Coastguard Workertypename enable_if 4455*58b9f456SAndroid Build Coastguard Worker< 4456*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4457*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<less<typename _Expr::value_type>, 4458*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 4459*58b9f456SAndroid Build Coastguard Worker>::type 4460*58b9f456SAndroid Build Coastguard Workeroperator<(const typename _Expr::value_type& __x, const _Expr& __y) 4461*58b9f456SAndroid Build Coastguard Worker{ 4462*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4463*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<less<value_type>, __scalar_expr<value_type>, _Expr> _Op; 4464*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(less<value_type>(), 4465*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 4466*58b9f456SAndroid Build Coastguard Worker} 4467*58b9f456SAndroid Build Coastguard Worker 4468*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 4469*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4470*58b9f456SAndroid Build Coastguard Workertypename enable_if 4471*58b9f456SAndroid Build Coastguard Worker< 4472*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 4473*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<greater<typename _Expr1::value_type>, _Expr1, _Expr2> > 4474*58b9f456SAndroid Build Coastguard Worker>::type 4475*58b9f456SAndroid Build Coastguard Workeroperator>(const _Expr1& __x, const _Expr2& __y) 4476*58b9f456SAndroid Build Coastguard Worker{ 4477*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 4478*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<greater<value_type>, _Expr1, _Expr2> _Op; 4479*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(greater<value_type>(), __x, __y)); 4480*58b9f456SAndroid Build Coastguard Worker} 4481*58b9f456SAndroid Build Coastguard Worker 4482*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4483*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4484*58b9f456SAndroid Build Coastguard Workertypename enable_if 4485*58b9f456SAndroid Build Coastguard Worker< 4486*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4487*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<greater<typename _Expr::value_type>, 4488*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 4489*58b9f456SAndroid Build Coastguard Worker>::type 4490*58b9f456SAndroid Build Coastguard Workeroperator>(const _Expr& __x, const typename _Expr::value_type& __y) 4491*58b9f456SAndroid Build Coastguard Worker{ 4492*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4493*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<greater<value_type>, _Expr, __scalar_expr<value_type> > _Op; 4494*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(greater<value_type>(), 4495*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 4496*58b9f456SAndroid Build Coastguard Worker} 4497*58b9f456SAndroid Build Coastguard Worker 4498*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4499*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4500*58b9f456SAndroid Build Coastguard Workertypename enable_if 4501*58b9f456SAndroid Build Coastguard Worker< 4502*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4503*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<greater<typename _Expr::value_type>, 4504*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 4505*58b9f456SAndroid Build Coastguard Worker>::type 4506*58b9f456SAndroid Build Coastguard Workeroperator>(const typename _Expr::value_type& __x, const _Expr& __y) 4507*58b9f456SAndroid Build Coastguard Worker{ 4508*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4509*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<greater<value_type>, __scalar_expr<value_type>, _Expr> _Op; 4510*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(greater<value_type>(), 4511*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 4512*58b9f456SAndroid Build Coastguard Worker} 4513*58b9f456SAndroid Build Coastguard Worker 4514*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 4515*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4516*58b9f456SAndroid Build Coastguard Workertypename enable_if 4517*58b9f456SAndroid Build Coastguard Worker< 4518*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 4519*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<less_equal<typename _Expr1::value_type>, _Expr1, _Expr2> > 4520*58b9f456SAndroid Build Coastguard Worker>::type 4521*58b9f456SAndroid Build Coastguard Workeroperator<=(const _Expr1& __x, const _Expr2& __y) 4522*58b9f456SAndroid Build Coastguard Worker{ 4523*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 4524*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<less_equal<value_type>, _Expr1, _Expr2> _Op; 4525*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(less_equal<value_type>(), __x, __y)); 4526*58b9f456SAndroid Build Coastguard Worker} 4527*58b9f456SAndroid Build Coastguard Worker 4528*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4529*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4530*58b9f456SAndroid Build Coastguard Workertypename enable_if 4531*58b9f456SAndroid Build Coastguard Worker< 4532*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4533*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<less_equal<typename _Expr::value_type>, 4534*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 4535*58b9f456SAndroid Build Coastguard Worker>::type 4536*58b9f456SAndroid Build Coastguard Workeroperator<=(const _Expr& __x, const typename _Expr::value_type& __y) 4537*58b9f456SAndroid Build Coastguard Worker{ 4538*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4539*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<less_equal<value_type>, _Expr, __scalar_expr<value_type> > _Op; 4540*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(less_equal<value_type>(), 4541*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 4542*58b9f456SAndroid Build Coastguard Worker} 4543*58b9f456SAndroid Build Coastguard Worker 4544*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4545*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4546*58b9f456SAndroid Build Coastguard Workertypename enable_if 4547*58b9f456SAndroid Build Coastguard Worker< 4548*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4549*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<less_equal<typename _Expr::value_type>, 4550*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 4551*58b9f456SAndroid Build Coastguard Worker>::type 4552*58b9f456SAndroid Build Coastguard Workeroperator<=(const typename _Expr::value_type& __x, const _Expr& __y) 4553*58b9f456SAndroid Build Coastguard Worker{ 4554*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4555*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<less_equal<value_type>, __scalar_expr<value_type>, _Expr> _Op; 4556*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(less_equal<value_type>(), 4557*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 4558*58b9f456SAndroid Build Coastguard Worker} 4559*58b9f456SAndroid Build Coastguard Worker 4560*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 4561*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4562*58b9f456SAndroid Build Coastguard Workertypename enable_if 4563*58b9f456SAndroid Build Coastguard Worker< 4564*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 4565*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<greater_equal<typename _Expr1::value_type>, _Expr1, _Expr2> > 4566*58b9f456SAndroid Build Coastguard Worker>::type 4567*58b9f456SAndroid Build Coastguard Workeroperator>=(const _Expr1& __x, const _Expr2& __y) 4568*58b9f456SAndroid Build Coastguard Worker{ 4569*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 4570*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<greater_equal<value_type>, _Expr1, _Expr2> _Op; 4571*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(greater_equal<value_type>(), __x, __y)); 4572*58b9f456SAndroid Build Coastguard Worker} 4573*58b9f456SAndroid Build Coastguard Worker 4574*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4575*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4576*58b9f456SAndroid Build Coastguard Workertypename enable_if 4577*58b9f456SAndroid Build Coastguard Worker< 4578*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4579*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<greater_equal<typename _Expr::value_type>, 4580*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 4581*58b9f456SAndroid Build Coastguard Worker>::type 4582*58b9f456SAndroid Build Coastguard Workeroperator>=(const _Expr& __x, const typename _Expr::value_type& __y) 4583*58b9f456SAndroid Build Coastguard Worker{ 4584*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4585*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<greater_equal<value_type>, _Expr, __scalar_expr<value_type> > _Op; 4586*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(greater_equal<value_type>(), 4587*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 4588*58b9f456SAndroid Build Coastguard Worker} 4589*58b9f456SAndroid Build Coastguard Worker 4590*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4591*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4592*58b9f456SAndroid Build Coastguard Workertypename enable_if 4593*58b9f456SAndroid Build Coastguard Worker< 4594*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4595*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<greater_equal<typename _Expr::value_type>, 4596*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 4597*58b9f456SAndroid Build Coastguard Worker>::type 4598*58b9f456SAndroid Build Coastguard Workeroperator>=(const typename _Expr::value_type& __x, const _Expr& __y) 4599*58b9f456SAndroid Build Coastguard Worker{ 4600*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4601*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<greater_equal<value_type>, __scalar_expr<value_type>, _Expr> _Op; 4602*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(greater_equal<value_type>(), 4603*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 4604*58b9f456SAndroid Build Coastguard Worker} 4605*58b9f456SAndroid Build Coastguard Worker 4606*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4607*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4608*58b9f456SAndroid Build Coastguard Workertypename enable_if 4609*58b9f456SAndroid Build Coastguard Worker< 4610*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4611*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<__abs_expr<typename _Expr::value_type>, _Expr> > 4612*58b9f456SAndroid Build Coastguard Worker>::type 4613*58b9f456SAndroid Build Coastguard Workerabs(const _Expr& __x) 4614*58b9f456SAndroid Build Coastguard Worker{ 4615*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4616*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<__abs_expr<value_type>, _Expr> _Op; 4617*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__abs_expr<value_type>(), __x)); 4618*58b9f456SAndroid Build Coastguard Worker} 4619*58b9f456SAndroid Build Coastguard Worker 4620*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4621*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4622*58b9f456SAndroid Build Coastguard Workertypename enable_if 4623*58b9f456SAndroid Build Coastguard Worker< 4624*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4625*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<__acos_expr<typename _Expr::value_type>, _Expr> > 4626*58b9f456SAndroid Build Coastguard Worker>::type 4627*58b9f456SAndroid Build Coastguard Workeracos(const _Expr& __x) 4628*58b9f456SAndroid Build Coastguard Worker{ 4629*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4630*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<__acos_expr<value_type>, _Expr> _Op; 4631*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__acos_expr<value_type>(), __x)); 4632*58b9f456SAndroid Build Coastguard Worker} 4633*58b9f456SAndroid Build Coastguard Worker 4634*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4635*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4636*58b9f456SAndroid Build Coastguard Workertypename enable_if 4637*58b9f456SAndroid Build Coastguard Worker< 4638*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4639*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<__asin_expr<typename _Expr::value_type>, _Expr> > 4640*58b9f456SAndroid Build Coastguard Worker>::type 4641*58b9f456SAndroid Build Coastguard Workerasin(const _Expr& __x) 4642*58b9f456SAndroid Build Coastguard Worker{ 4643*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4644*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<__asin_expr<value_type>, _Expr> _Op; 4645*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__asin_expr<value_type>(), __x)); 4646*58b9f456SAndroid Build Coastguard Worker} 4647*58b9f456SAndroid Build Coastguard Worker 4648*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4649*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4650*58b9f456SAndroid Build Coastguard Workertypename enable_if 4651*58b9f456SAndroid Build Coastguard Worker< 4652*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4653*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<__atan_expr<typename _Expr::value_type>, _Expr> > 4654*58b9f456SAndroid Build Coastguard Worker>::type 4655*58b9f456SAndroid Build Coastguard Workeratan(const _Expr& __x) 4656*58b9f456SAndroid Build Coastguard Worker{ 4657*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4658*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<__atan_expr<value_type>, _Expr> _Op; 4659*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__atan_expr<value_type>(), __x)); 4660*58b9f456SAndroid Build Coastguard Worker} 4661*58b9f456SAndroid Build Coastguard Worker 4662*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 4663*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4664*58b9f456SAndroid Build Coastguard Workertypename enable_if 4665*58b9f456SAndroid Build Coastguard Worker< 4666*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 4667*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<__atan2_expr<typename _Expr1::value_type>, _Expr1, _Expr2> > 4668*58b9f456SAndroid Build Coastguard Worker>::type 4669*58b9f456SAndroid Build Coastguard Workeratan2(const _Expr1& __x, const _Expr2& __y) 4670*58b9f456SAndroid Build Coastguard Worker{ 4671*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 4672*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<__atan2_expr<value_type>, _Expr1, _Expr2> _Op; 4673*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__atan2_expr<value_type>(), __x, __y)); 4674*58b9f456SAndroid Build Coastguard Worker} 4675*58b9f456SAndroid Build Coastguard Worker 4676*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4677*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4678*58b9f456SAndroid Build Coastguard Workertypename enable_if 4679*58b9f456SAndroid Build Coastguard Worker< 4680*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4681*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<__atan2_expr<typename _Expr::value_type>, 4682*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 4683*58b9f456SAndroid Build Coastguard Worker>::type 4684*58b9f456SAndroid Build Coastguard Workeratan2(const _Expr& __x, const typename _Expr::value_type& __y) 4685*58b9f456SAndroid Build Coastguard Worker{ 4686*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4687*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<__atan2_expr<value_type>, _Expr, __scalar_expr<value_type> > _Op; 4688*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__atan2_expr<value_type>(), 4689*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 4690*58b9f456SAndroid Build Coastguard Worker} 4691*58b9f456SAndroid Build Coastguard Worker 4692*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4693*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4694*58b9f456SAndroid Build Coastguard Workertypename enable_if 4695*58b9f456SAndroid Build Coastguard Worker< 4696*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4697*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<__atan2_expr<typename _Expr::value_type>, 4698*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 4699*58b9f456SAndroid Build Coastguard Worker>::type 4700*58b9f456SAndroid Build Coastguard Workeratan2(const typename _Expr::value_type& __x, const _Expr& __y) 4701*58b9f456SAndroid Build Coastguard Worker{ 4702*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4703*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<__atan2_expr<value_type>, __scalar_expr<value_type>, _Expr> _Op; 4704*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__atan2_expr<value_type>(), 4705*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 4706*58b9f456SAndroid Build Coastguard Worker} 4707*58b9f456SAndroid Build Coastguard Worker 4708*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4709*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4710*58b9f456SAndroid Build Coastguard Workertypename enable_if 4711*58b9f456SAndroid Build Coastguard Worker< 4712*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4713*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<__cos_expr<typename _Expr::value_type>, _Expr> > 4714*58b9f456SAndroid Build Coastguard Worker>::type 4715*58b9f456SAndroid Build Coastguard Workercos(const _Expr& __x) 4716*58b9f456SAndroid Build Coastguard Worker{ 4717*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4718*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<__cos_expr<value_type>, _Expr> _Op; 4719*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__cos_expr<value_type>(), __x)); 4720*58b9f456SAndroid Build Coastguard Worker} 4721*58b9f456SAndroid Build Coastguard Worker 4722*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4723*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4724*58b9f456SAndroid Build Coastguard Workertypename enable_if 4725*58b9f456SAndroid Build Coastguard Worker< 4726*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4727*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<__cosh_expr<typename _Expr::value_type>, _Expr> > 4728*58b9f456SAndroid Build Coastguard Worker>::type 4729*58b9f456SAndroid Build Coastguard Workercosh(const _Expr& __x) 4730*58b9f456SAndroid Build Coastguard Worker{ 4731*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4732*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<__cosh_expr<value_type>, _Expr> _Op; 4733*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__cosh_expr<value_type>(), __x)); 4734*58b9f456SAndroid Build Coastguard Worker} 4735*58b9f456SAndroid Build Coastguard Worker 4736*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4737*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4738*58b9f456SAndroid Build Coastguard Workertypename enable_if 4739*58b9f456SAndroid Build Coastguard Worker< 4740*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4741*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<__exp_expr<typename _Expr::value_type>, _Expr> > 4742*58b9f456SAndroid Build Coastguard Worker>::type 4743*58b9f456SAndroid Build Coastguard Workerexp(const _Expr& __x) 4744*58b9f456SAndroid Build Coastguard Worker{ 4745*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4746*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<__exp_expr<value_type>, _Expr> _Op; 4747*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__exp_expr<value_type>(), __x)); 4748*58b9f456SAndroid Build Coastguard Worker} 4749*58b9f456SAndroid Build Coastguard Worker 4750*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4751*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4752*58b9f456SAndroid Build Coastguard Workertypename enable_if 4753*58b9f456SAndroid Build Coastguard Worker< 4754*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4755*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<__log_expr<typename _Expr::value_type>, _Expr> > 4756*58b9f456SAndroid Build Coastguard Worker>::type 4757*58b9f456SAndroid Build Coastguard Workerlog(const _Expr& __x) 4758*58b9f456SAndroid Build Coastguard Worker{ 4759*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4760*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<__log_expr<value_type>, _Expr> _Op; 4761*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__log_expr<value_type>(), __x)); 4762*58b9f456SAndroid Build Coastguard Worker} 4763*58b9f456SAndroid Build Coastguard Worker 4764*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4765*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4766*58b9f456SAndroid Build Coastguard Workertypename enable_if 4767*58b9f456SAndroid Build Coastguard Worker< 4768*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4769*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<__log10_expr<typename _Expr::value_type>, _Expr> > 4770*58b9f456SAndroid Build Coastguard Worker>::type 4771*58b9f456SAndroid Build Coastguard Workerlog10(const _Expr& __x) 4772*58b9f456SAndroid Build Coastguard Worker{ 4773*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4774*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<__log10_expr<value_type>, _Expr> _Op; 4775*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__log10_expr<value_type>(), __x)); 4776*58b9f456SAndroid Build Coastguard Worker} 4777*58b9f456SAndroid Build Coastguard Worker 4778*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr1, class _Expr2> 4779*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4780*58b9f456SAndroid Build Coastguard Workertypename enable_if 4781*58b9f456SAndroid Build Coastguard Worker< 4782*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr1>::value && __is_val_expr<_Expr2>::value, 4783*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<__pow_expr<typename _Expr1::value_type>, _Expr1, _Expr2> > 4784*58b9f456SAndroid Build Coastguard Worker>::type 4785*58b9f456SAndroid Build Coastguard Workerpow(const _Expr1& __x, const _Expr2& __y) 4786*58b9f456SAndroid Build Coastguard Worker{ 4787*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr1::value_type value_type; 4788*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<__pow_expr<value_type>, _Expr1, _Expr2> _Op; 4789*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__pow_expr<value_type>(), __x, __y)); 4790*58b9f456SAndroid Build Coastguard Worker} 4791*58b9f456SAndroid Build Coastguard Worker 4792*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4793*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4794*58b9f456SAndroid Build Coastguard Workertypename enable_if 4795*58b9f456SAndroid Build Coastguard Worker< 4796*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4797*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<__pow_expr<typename _Expr::value_type>, 4798*58b9f456SAndroid Build Coastguard Worker _Expr, __scalar_expr<typename _Expr::value_type> > > 4799*58b9f456SAndroid Build Coastguard Worker>::type 4800*58b9f456SAndroid Build Coastguard Workerpow(const _Expr& __x, const typename _Expr::value_type& __y) 4801*58b9f456SAndroid Build Coastguard Worker{ 4802*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4803*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<__pow_expr<value_type>, _Expr, __scalar_expr<value_type> > _Op; 4804*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__pow_expr<value_type>(), 4805*58b9f456SAndroid Build Coastguard Worker __x, __scalar_expr<value_type>(__y, __x.size()))); 4806*58b9f456SAndroid Build Coastguard Worker} 4807*58b9f456SAndroid Build Coastguard Worker 4808*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4809*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4810*58b9f456SAndroid Build Coastguard Workertypename enable_if 4811*58b9f456SAndroid Build Coastguard Worker< 4812*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4813*58b9f456SAndroid Build Coastguard Worker __val_expr<_BinaryOp<__pow_expr<typename _Expr::value_type>, 4814*58b9f456SAndroid Build Coastguard Worker __scalar_expr<typename _Expr::value_type>, _Expr> > 4815*58b9f456SAndroid Build Coastguard Worker>::type 4816*58b9f456SAndroid Build Coastguard Workerpow(const typename _Expr::value_type& __x, const _Expr& __y) 4817*58b9f456SAndroid Build Coastguard Worker{ 4818*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4819*58b9f456SAndroid Build Coastguard Worker typedef _BinaryOp<__pow_expr<value_type>, __scalar_expr<value_type>, _Expr> _Op; 4820*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__pow_expr<value_type>(), 4821*58b9f456SAndroid Build Coastguard Worker __scalar_expr<value_type>(__x, __y.size()), __y)); 4822*58b9f456SAndroid Build Coastguard Worker} 4823*58b9f456SAndroid Build Coastguard Worker 4824*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4825*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4826*58b9f456SAndroid Build Coastguard Workertypename enable_if 4827*58b9f456SAndroid Build Coastguard Worker< 4828*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4829*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<__sin_expr<typename _Expr::value_type>, _Expr> > 4830*58b9f456SAndroid Build Coastguard Worker>::type 4831*58b9f456SAndroid Build Coastguard Workersin(const _Expr& __x) 4832*58b9f456SAndroid Build Coastguard Worker{ 4833*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4834*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<__sin_expr<value_type>, _Expr> _Op; 4835*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__sin_expr<value_type>(), __x)); 4836*58b9f456SAndroid Build Coastguard Worker} 4837*58b9f456SAndroid Build Coastguard Worker 4838*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4839*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4840*58b9f456SAndroid Build Coastguard Workertypename enable_if 4841*58b9f456SAndroid Build Coastguard Worker< 4842*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4843*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<__sinh_expr<typename _Expr::value_type>, _Expr> > 4844*58b9f456SAndroid Build Coastguard Worker>::type 4845*58b9f456SAndroid Build Coastguard Workersinh(const _Expr& __x) 4846*58b9f456SAndroid Build Coastguard Worker{ 4847*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4848*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<__sinh_expr<value_type>, _Expr> _Op; 4849*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__sinh_expr<value_type>(), __x)); 4850*58b9f456SAndroid Build Coastguard Worker} 4851*58b9f456SAndroid Build Coastguard Worker 4852*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4853*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4854*58b9f456SAndroid Build Coastguard Workertypename enable_if 4855*58b9f456SAndroid Build Coastguard Worker< 4856*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4857*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<__sqrt_expr<typename _Expr::value_type>, _Expr> > 4858*58b9f456SAndroid Build Coastguard Worker>::type 4859*58b9f456SAndroid Build Coastguard Workersqrt(const _Expr& __x) 4860*58b9f456SAndroid Build Coastguard Worker{ 4861*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4862*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<__sqrt_expr<value_type>, _Expr> _Op; 4863*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__sqrt_expr<value_type>(), __x)); 4864*58b9f456SAndroid Build Coastguard Worker} 4865*58b9f456SAndroid Build Coastguard Worker 4866*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4867*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4868*58b9f456SAndroid Build Coastguard Workertypename enable_if 4869*58b9f456SAndroid Build Coastguard Worker< 4870*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4871*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<__tan_expr<typename _Expr::value_type>, _Expr> > 4872*58b9f456SAndroid Build Coastguard Worker>::type 4873*58b9f456SAndroid Build Coastguard Workertan(const _Expr& __x) 4874*58b9f456SAndroid Build Coastguard Worker{ 4875*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4876*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<__tan_expr<value_type>, _Expr> _Op; 4877*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__tan_expr<value_type>(), __x)); 4878*58b9f456SAndroid Build Coastguard Worker} 4879*58b9f456SAndroid Build Coastguard Worker 4880*58b9f456SAndroid Build Coastguard Workertemplate<class _Expr> 4881*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4882*58b9f456SAndroid Build Coastguard Workertypename enable_if 4883*58b9f456SAndroid Build Coastguard Worker< 4884*58b9f456SAndroid Build Coastguard Worker __is_val_expr<_Expr>::value, 4885*58b9f456SAndroid Build Coastguard Worker __val_expr<_UnaryOp<__tanh_expr<typename _Expr::value_type>, _Expr> > 4886*58b9f456SAndroid Build Coastguard Worker>::type 4887*58b9f456SAndroid Build Coastguard Workertanh(const _Expr& __x) 4888*58b9f456SAndroid Build Coastguard Worker{ 4889*58b9f456SAndroid Build Coastguard Worker typedef typename _Expr::value_type value_type; 4890*58b9f456SAndroid Build Coastguard Worker typedef _UnaryOp<__tanh_expr<value_type>, _Expr> _Op; 4891*58b9f456SAndroid Build Coastguard Worker return __val_expr<_Op>(_Op(__tanh_expr<value_type>(), __x)); 4892*58b9f456SAndroid Build Coastguard Worker} 4893*58b9f456SAndroid Build Coastguard Worker 4894*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 4895*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4896*58b9f456SAndroid Build Coastguard Worker_Tp* 4897*58b9f456SAndroid Build Coastguard Workerbegin(valarray<_Tp>& __v) 4898*58b9f456SAndroid Build Coastguard Worker{ 4899*58b9f456SAndroid Build Coastguard Worker return __v.__begin_; 4900*58b9f456SAndroid Build Coastguard Worker} 4901*58b9f456SAndroid Build Coastguard Worker 4902*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 4903*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4904*58b9f456SAndroid Build Coastguard Workerconst _Tp* 4905*58b9f456SAndroid Build Coastguard Workerbegin(const valarray<_Tp>& __v) 4906*58b9f456SAndroid Build Coastguard Worker{ 4907*58b9f456SAndroid Build Coastguard Worker return __v.__begin_; 4908*58b9f456SAndroid Build Coastguard Worker} 4909*58b9f456SAndroid Build Coastguard Worker 4910*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 4911*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4912*58b9f456SAndroid Build Coastguard Worker_Tp* 4913*58b9f456SAndroid Build Coastguard Workerend(valarray<_Tp>& __v) 4914*58b9f456SAndroid Build Coastguard Worker{ 4915*58b9f456SAndroid Build Coastguard Worker return __v.__end_; 4916*58b9f456SAndroid Build Coastguard Worker} 4917*58b9f456SAndroid Build Coastguard Worker 4918*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp> 4919*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 4920*58b9f456SAndroid Build Coastguard Workerconst _Tp* 4921*58b9f456SAndroid Build Coastguard Workerend(const valarray<_Tp>& __v) 4922*58b9f456SAndroid Build Coastguard Worker{ 4923*58b9f456SAndroid Build Coastguard Worker return __v.__end_; 4924*58b9f456SAndroid Build Coastguard Worker} 4925*58b9f456SAndroid Build Coastguard Worker 4926*58b9f456SAndroid Build Coastguard Worker_LIBCPP_END_NAMESPACE_STD 4927*58b9f456SAndroid Build Coastguard Worker 4928*58b9f456SAndroid Build Coastguard Worker_LIBCPP_POP_MACROS 4929*58b9f456SAndroid Build Coastguard Worker 4930*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_VALARRAY 4931