xref: /aosp_15_r20/external/libcxx/include/valarray (revision 58b9f456b02922dfdb1fad8a988d5fd8765ecb80)
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