OpenCores
URL https://opencores.org/ocsvn/altor32/altor32/trunk

Subversion Repositories altor32

[/] [altor32/] [trunk/] [gcc-x64/] [or1knd-elf/] [or1knd-elf/] [include/] [c++/] [4.8.0/] [bits/] [valarray_after.h] - Blame information for rev 35

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 35 ultra_embe
// The template and inlines for the -*- C++ -*- internal _Meta class.
2
 
3
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
4
// 2006, 2007, 2008, 2009, 2010  Free Software Foundation, Inc.
5
//
6
// This file is part of the GNU ISO C++ Library.  This library is free
7
// software; you can redistribute it and/or modify it under the
8
// terms of the GNU General Public License as published by the
9
// Free Software Foundation; either version 3, or (at your option)
10
// any later version.
11
 
12
// This library is distributed in the hope that it will be useful,
13
// but WITHOUT ANY WARRANTY; without even the implied warranty of
14
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
// GNU General Public License for more details.
16
 
17
// Under Section 7 of GPL version 3, you are granted additional
18
// permissions described in the GCC Runtime Library Exception, version
19
// 3.1, as published by the Free Software Foundation.
20
 
21
// You should have received a copy of the GNU General Public License and
22
// a copy of the GCC Runtime Library Exception along with this program;
23
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
24
// <http://www.gnu.org/licenses/>.
25
 
26
/** @file bits/valarray_after.h
27
 *  This is an internal header file, included by other library headers.
28
 *  Do not attempt to use it directly. @headername{valarray}
29
 */
30
 
31
// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
32
 
33
#ifndef _VALARRAY_AFTER_H
34
#define _VALARRAY_AFTER_H 1
35
 
36
#pragma GCC system_header
37
 
38
namespace std _GLIBCXX_VISIBILITY(default)
39
{
40
_GLIBCXX_BEGIN_NAMESPACE_VERSION
41
 
42
  //
43
  // gslice_array closure.
44
  //
45
  template<class _Dom>
46
    class _GBase
47
    {
48
    public:
49
      typedef typename _Dom::value_type value_type;
50
 
51
      _GBase (const _Dom& __e, const valarray<size_t>& __i)
52
      : _M_expr (__e), _M_index(__i) {}
53
 
54
      value_type
55
      operator[] (size_t __i) const
56
      { return _M_expr[_M_index[__i]]; }
57
 
58
      size_t
59
      size () const
60
      { return _M_index.size(); }
61
 
62
    private:
63
      const _Dom&             _M_expr;
64
      const valarray<size_t>& _M_index;
65
    };
66
 
67
  template<typename _Tp>
68
    class _GBase<_Array<_Tp> >
69
    {
70
    public:
71
      typedef _Tp value_type;
72
 
73
      _GBase (_Array<_Tp> __a, const valarray<size_t>& __i)
74
      : _M_array (__a), _M_index(__i) {}
75
 
76
      value_type
77
      operator[] (size_t __i) const
78
      { return _M_array._M_data[_M_index[__i]]; }
79
 
80
      size_t
81
      size () const
82
      { return _M_index.size(); }
83
 
84
    private:
85
      const _Array<_Tp>       _M_array;
86
      const valarray<size_t>& _M_index;
87
    };
88
 
89
  template<class _Dom>
90
    struct _GClos<_Expr, _Dom>
91
    : _GBase<_Dom>
92
    {
93
      typedef _GBase<_Dom> _Base;
94
      typedef typename _Base::value_type value_type;
95
 
96
      _GClos (const _Dom& __e, const valarray<size_t>& __i)
97
      : _Base (__e, __i) {}
98
    };
99
 
100
  template<typename _Tp>
101
    struct _GClos<_ValArray, _Tp>
102
    : _GBase<_Array<_Tp> >
103
    {
104
      typedef _GBase<_Array<_Tp> > _Base;
105
      typedef typename _Base::value_type value_type;
106
 
107
      _GClos (_Array<_Tp> __a, const valarray<size_t>& __i)
108
      : _Base (__a, __i) {}
109
    };
110
 
111
  //
112
  // indirect_array closure
113
  //
114
  template<class _Dom>
115
    class _IBase
116
    {
117
    public:
118
      typedef typename _Dom::value_type value_type;
119
 
120
      _IBase (const _Dom& __e, const valarray<size_t>& __i)
121
      : _M_expr (__e), _M_index (__i) {}
122
 
123
      value_type
124
      operator[] (size_t __i) const
125
      { return _M_expr[_M_index[__i]]; }
126
 
127
      size_t
128
      size() const
129
      { return _M_index.size(); }
130
 
131
    private:
132
      const _Dom&             _M_expr;
133
      const valarray<size_t>& _M_index;
134
    };
135
 
136
  template<class _Dom>
137
    struct _IClos<_Expr, _Dom>
138
    : _IBase<_Dom>
139
    {
140
      typedef _IBase<_Dom> _Base;
141
      typedef typename _Base::value_type value_type;
142
 
143
      _IClos (const _Dom& __e, const valarray<size_t>& __i)
144
      : _Base (__e, __i) {}
145
    };
146
 
147
  template<typename _Tp>
148
    struct _IClos<_ValArray, _Tp>
149
    : _IBase<valarray<_Tp> >
150
    {
151
      typedef _IBase<valarray<_Tp> > _Base;
152
      typedef _Tp value_type;
153
 
154
      _IClos (const valarray<_Tp>& __a, const valarray<size_t>& __i)
155
      : _Base (__a, __i) {}
156
    };
157
 
158
  //
159
  // class _Expr
160
  //
161
  template<class _Clos, typename _Tp>
162
    class _Expr
163
    {
164
    public:
165
      typedef _Tp value_type;
166
 
167
      _Expr(const _Clos&);
168
 
169
      const _Clos& operator()() const;
170
 
171
      value_type operator[](size_t) const;
172
      valarray<value_type> operator[](slice) const;
173
      valarray<value_type> operator[](const gslice&) const;
174
      valarray<value_type> operator[](const valarray<bool>&) const;
175
      valarray<value_type> operator[](const valarray<size_t>&) const;
176
 
177
      _Expr<_UnClos<__unary_plus, std::_Expr, _Clos>, value_type>
178
      operator+() const;
179
 
180
      _Expr<_UnClos<__negate, std::_Expr, _Clos>, value_type>
181
      operator-() const;
182
 
183
      _Expr<_UnClos<__bitwise_not, std::_Expr, _Clos>, value_type>
184
      operator~() const;
185
 
186
      _Expr<_UnClos<__logical_not, std::_Expr, _Clos>, bool>
187
      operator!() const;
188
 
189
      size_t size() const;
190
      value_type sum() const;
191
 
192
      valarray<value_type> shift(int) const;
193
      valarray<value_type> cshift(int) const;
194
 
195
      value_type min() const;
196
      value_type max() const;
197
 
198
      valarray<value_type> apply(value_type (*)(const value_type&)) const;
199
      valarray<value_type> apply(value_type (*)(value_type)) const;
200
 
201
    private:
202
      const _Clos _M_closure;
203
    };
204
 
205
  template<class _Clos, typename _Tp>
206
    inline
207
    _Expr<_Clos, _Tp>::_Expr(const _Clos& __c) : _M_closure(__c) {}
208
 
209
  template<class _Clos, typename _Tp>
210
    inline const _Clos&
211
    _Expr<_Clos, _Tp>::operator()() const
212
    { return _M_closure; }
213
 
214
  template<class _Clos, typename _Tp>
215
    inline _Tp
216
    _Expr<_Clos, _Tp>::operator[](size_t __i) const
217
    { return _M_closure[__i]; }
218
 
219
  template<class _Clos, typename _Tp>
220
    inline valarray<_Tp>
221
    _Expr<_Clos, _Tp>::operator[](slice __s) const
222
    {
223
      valarray<_Tp> __v = valarray<_Tp>(*this)[__s];
224
      return __v;
225
    }
226
 
227
  template<class _Clos, typename _Tp>
228
    inline valarray<_Tp>
229
    _Expr<_Clos, _Tp>::operator[](const gslice& __gs) const
230
    {
231
      valarray<_Tp> __v = valarray<_Tp>(*this)[__gs];
232
      return __v;
233
    }
234
 
235
  template<class _Clos, typename _Tp>
236
    inline valarray<_Tp>
237
    _Expr<_Clos, _Tp>::operator[](const valarray<bool>& __m) const
238
    {
239
      valarray<_Tp> __v = valarray<_Tp>(*this)[__m];
240
      return __v;
241
    }
242
 
243
  template<class _Clos, typename _Tp>
244
    inline valarray<_Tp>
245
    _Expr<_Clos, _Tp>::operator[](const valarray<size_t>& __i) const
246
    {
247
      valarray<_Tp> __v = valarray<_Tp>(*this)[__i];
248
      return __v;
249
    }
250
 
251
  template<class _Clos, typename _Tp>
252
    inline size_t
253
    _Expr<_Clos, _Tp>::size() const
254
    { return _M_closure.size(); }
255
 
256
  template<class _Clos, typename _Tp>
257
    inline valarray<_Tp>
258
    _Expr<_Clos, _Tp>::shift(int __n) const
259
    {
260
      valarray<_Tp> __v = valarray<_Tp>(*this).shift(__n);
261
      return __v;
262
    }
263
 
264
  template<class _Clos, typename _Tp>
265
    inline valarray<_Tp>
266
    _Expr<_Clos, _Tp>::cshift(int __n) const
267
    {
268
      valarray<_Tp> __v = valarray<_Tp>(*this).cshift(__n);
269
      return __v;
270
    }
271
 
272
  template<class _Clos, typename _Tp>
273
    inline valarray<_Tp>
274
    _Expr<_Clos, _Tp>::apply(_Tp __f(const _Tp&)) const
275
    {
276
      valarray<_Tp> __v = valarray<_Tp>(*this).apply(__f);
277
      return __v;
278
    }
279
 
280
  template<class _Clos, typename _Tp>
281
    inline valarray<_Tp>
282
    _Expr<_Clos, _Tp>::apply(_Tp __f(_Tp)) const
283
    {
284
      valarray<_Tp> __v = valarray<_Tp>(*this).apply(__f);
285
      return __v;
286
    }
287
 
288
  // XXX: replace this with a more robust summation algorithm.
289
  template<class _Clos, typename _Tp>
290
    inline _Tp
291
    _Expr<_Clos, _Tp>::sum() const
292
    {
293
      size_t __n = _M_closure.size();
294
      if (__n == 0)
295
        return _Tp();
296
      else
297
        {
298
          _Tp __s = _M_closure[--__n];
299
          while (__n != 0)
300
            __s += _M_closure[--__n];
301
          return __s;
302
        }
303
    }
304
 
305
  template<class _Clos, typename _Tp>
306
    inline _Tp
307
    _Expr<_Clos, _Tp>::min() const
308
    { return __valarray_min(_M_closure); }
309
 
310
  template<class _Clos, typename _Tp>
311
    inline _Tp
312
    _Expr<_Clos, _Tp>::max() const
313
    { return __valarray_max(_M_closure); }
314
 
315
  template<class _Dom, typename _Tp>
316
    inline _Expr<_UnClos<__logical_not, _Expr, _Dom>, bool>
317
    _Expr<_Dom, _Tp>::operator!() const
318
    {
319
      typedef _UnClos<__logical_not, std::_Expr, _Dom> _Closure;
320
      return _Expr<_Closure, bool>(_Closure(this->_M_closure));
321
    }
322
 
323
#define _DEFINE_EXPR_UNARY_OPERATOR(_Op, _Name)                           \
324
  template<class _Dom, typename _Tp>                                      \
325
    inline _Expr<_UnClos<_Name, std::_Expr, _Dom>, _Tp>                   \
326
    _Expr<_Dom, _Tp>::operator _Op() const                                \
327
    {                                                                     \
328
      typedef _UnClos<_Name, std::_Expr, _Dom> _Closure;                  \
329
      return _Expr<_Closure, _Tp>(_Closure(this->_M_closure));            \
330
    }
331
 
332
    _DEFINE_EXPR_UNARY_OPERATOR(+, __unary_plus)
333
    _DEFINE_EXPR_UNARY_OPERATOR(-, __negate)
334
    _DEFINE_EXPR_UNARY_OPERATOR(~, __bitwise_not)
335
 
336
#undef _DEFINE_EXPR_UNARY_OPERATOR
337
 
338
#define _DEFINE_EXPR_BINARY_OPERATOR(_Op, _Name)                        \
339
  template<class _Dom1, class _Dom2>                                    \
340
    inline _Expr<_BinClos<_Name, _Expr, _Expr, _Dom1, _Dom2>,           \
341
           typename __fun<_Name, typename _Dom1::value_type>::result_type> \
342
    operator _Op(const _Expr<_Dom1, typename _Dom1::value_type>& __v,   \
343
                 const _Expr<_Dom2, typename _Dom2::value_type>& __w)   \
344
    {                                                                   \
345
      typedef typename _Dom1::value_type _Arg;                          \
346
      typedef typename __fun<_Name, _Arg>::result_type _Value;          \
347
      typedef _BinClos<_Name, _Expr, _Expr, _Dom1, _Dom2> _Closure;     \
348
      return _Expr<_Closure, _Value>(_Closure(__v(), __w()));           \
349
    }                                                                   \
350
                                                                        \
351
  template<class _Dom>                                                  \
352
    inline _Expr<_BinClos<_Name, _Expr, _Constant, _Dom,                \
353
                          typename _Dom::value_type>,                   \
354
             typename __fun<_Name, typename _Dom::value_type>::result_type> \
355
    operator _Op(const _Expr<_Dom, typename _Dom::value_type>& __v,     \
356
                 const typename _Dom::value_type& __t)                  \
357
    {                                                                   \
358
      typedef typename _Dom::value_type _Arg;                           \
359
      typedef typename __fun<_Name, _Arg>::result_type _Value;          \
360
      typedef _BinClos<_Name, _Expr, _Constant, _Dom, _Arg> _Closure;   \
361
      return _Expr<_Closure, _Value>(_Closure(__v(), __t));             \
362
    }                                                                   \
363
                                                                        \
364
  template<class _Dom>                                                  \
365
    inline _Expr<_BinClos<_Name, _Constant, _Expr,                      \
366
                          typename _Dom::value_type, _Dom>,             \
367
             typename __fun<_Name, typename _Dom::value_type>::result_type> \
368
    operator _Op(const typename _Dom::value_type& __t,                  \
369
                 const _Expr<_Dom, typename _Dom::value_type>& __v)     \
370
    {                                                                   \
371
      typedef typename _Dom::value_type _Arg;                           \
372
      typedef typename __fun<_Name, _Arg>::result_type _Value;          \
373
      typedef _BinClos<_Name, _Constant, _Expr, _Arg, _Dom> _Closure;   \
374
      return _Expr<_Closure, _Value>(_Closure(__t, __v()));             \
375
    }                                                                   \
376
                                                                        \
377
  template<class _Dom>                                                  \
378
    inline _Expr<_BinClos<_Name, _Expr, _ValArray,                      \
379
                          _Dom, typename _Dom::value_type>,             \
380
             typename __fun<_Name, typename _Dom::value_type>::result_type> \
381
    operator _Op(const _Expr<_Dom,typename _Dom::value_type>& __e,      \
382
                 const valarray<typename _Dom::value_type>& __v)        \
383
    {                                                                   \
384
      typedef typename _Dom::value_type _Arg;                           \
385
      typedef typename __fun<_Name, _Arg>::result_type _Value;          \
386
      typedef _BinClos<_Name, _Expr, _ValArray, _Dom, _Arg> _Closure;   \
387
      return _Expr<_Closure, _Value>(_Closure(__e(), __v));             \
388
    }                                                                   \
389
                                                                        \
390
  template<class _Dom>                                                  \
391
    inline _Expr<_BinClos<_Name, _ValArray, _Expr,                      \
392
                 typename _Dom::value_type, _Dom>,                      \
393
             typename __fun<_Name, typename _Dom::value_type>::result_type> \
394
    operator _Op(const valarray<typename _Dom::value_type>& __v,        \
395
                 const _Expr<_Dom, typename _Dom::value_type>& __e)     \
396
    {                                                                   \
397
      typedef typename _Dom::value_type _Tp;                            \
398
      typedef typename __fun<_Name, _Tp>::result_type _Value;           \
399
      typedef _BinClos<_Name, _ValArray, _Expr, _Tp, _Dom> _Closure;    \
400
      return _Expr<_Closure, _Value>(_Closure(__v, __e ()));            \
401
    }
402
 
403
    _DEFINE_EXPR_BINARY_OPERATOR(+, __plus)
404
    _DEFINE_EXPR_BINARY_OPERATOR(-, __minus)
405
    _DEFINE_EXPR_BINARY_OPERATOR(*, __multiplies)
406
    _DEFINE_EXPR_BINARY_OPERATOR(/, __divides)
407
    _DEFINE_EXPR_BINARY_OPERATOR(%, __modulus)
408
    _DEFINE_EXPR_BINARY_OPERATOR(^, __bitwise_xor)
409
    _DEFINE_EXPR_BINARY_OPERATOR(&, __bitwise_and)
410
    _DEFINE_EXPR_BINARY_OPERATOR(|, __bitwise_or)
411
    _DEFINE_EXPR_BINARY_OPERATOR(<<, __shift_left)
412
    _DEFINE_EXPR_BINARY_OPERATOR(>>, __shift_right)
413
    _DEFINE_EXPR_BINARY_OPERATOR(&&, __logical_and)
414
    _DEFINE_EXPR_BINARY_OPERATOR(||, __logical_or)
415
    _DEFINE_EXPR_BINARY_OPERATOR(==, __equal_to)
416
    _DEFINE_EXPR_BINARY_OPERATOR(!=, __not_equal_to)
417
    _DEFINE_EXPR_BINARY_OPERATOR(<, __less)
418
    _DEFINE_EXPR_BINARY_OPERATOR(>, __greater)
419
    _DEFINE_EXPR_BINARY_OPERATOR(<=, __less_equal)
420
    _DEFINE_EXPR_BINARY_OPERATOR(>=, __greater_equal)
421
 
422
#undef _DEFINE_EXPR_BINARY_OPERATOR
423
 
424
#define _DEFINE_EXPR_UNARY_FUNCTION(_Name, _UName)                       \
425
  template<class _Dom>                                                   \
426
    inline _Expr<_UnClos<_UName, _Expr, _Dom>,                           \
427
                 typename _Dom::value_type>                              \
428
    _Name(const _Expr<_Dom, typename _Dom::value_type>& __e)             \
429
    {                                                                    \
430
      typedef typename _Dom::value_type _Tp;                             \
431
      typedef _UnClos<_UName, _Expr, _Dom> _Closure;                     \
432
      return _Expr<_Closure, _Tp>(_Closure(__e()));                      \
433
    }                                                                    \
434
                                                                         \
435
  template<typename _Tp>                                                 \
436
    inline _Expr<_UnClos<_UName, _ValArray, _Tp>, _Tp>                   \
437
    _Name(const valarray<_Tp>& __v)                                      \
438
    {                                                                    \
439
      typedef _UnClos<_UName, _ValArray, _Tp> _Closure;                  \
440
      return _Expr<_Closure, _Tp>(_Closure(__v));                        \
441
    }
442
 
443
    _DEFINE_EXPR_UNARY_FUNCTION(abs, _Abs)
444
    _DEFINE_EXPR_UNARY_FUNCTION(cos, _Cos)
445
    _DEFINE_EXPR_UNARY_FUNCTION(acos, _Acos)
446
    _DEFINE_EXPR_UNARY_FUNCTION(cosh, _Cosh)
447
    _DEFINE_EXPR_UNARY_FUNCTION(sin, _Sin)
448
    _DEFINE_EXPR_UNARY_FUNCTION(asin, _Asin)
449
    _DEFINE_EXPR_UNARY_FUNCTION(sinh, _Sinh)
450
    _DEFINE_EXPR_UNARY_FUNCTION(tan, _Tan)
451
    _DEFINE_EXPR_UNARY_FUNCTION(tanh, _Tanh)
452
    _DEFINE_EXPR_UNARY_FUNCTION(atan, _Atan)
453
    _DEFINE_EXPR_UNARY_FUNCTION(exp, _Exp)
454
    _DEFINE_EXPR_UNARY_FUNCTION(log, _Log)
455
    _DEFINE_EXPR_UNARY_FUNCTION(log10, _Log10)
456
    _DEFINE_EXPR_UNARY_FUNCTION(sqrt, _Sqrt)
457
 
458
#undef _DEFINE_EXPR_UNARY_FUNCTION
459
 
460
#define _DEFINE_EXPR_BINARY_FUNCTION(_Fun, _UFun)                      \
461
  template<class _Dom1, class _Dom2>                                   \
462
    inline _Expr<_BinClos<_UFun, _Expr, _Expr, _Dom1, _Dom2>,          \
463
                 typename _Dom1::value_type>                           \
464
    _Fun(const _Expr<_Dom1, typename _Dom1::value_type>& __e1,         \
465
         const _Expr<_Dom2, typename _Dom2::value_type>& __e2)         \
466
    {                                                                  \
467
      typedef typename _Dom1::value_type _Tp;                          \
468
      typedef _BinClos<_UFun, _Expr, _Expr, _Dom1, _Dom2> _Closure;    \
469
      return _Expr<_Closure, _Tp>(_Closure(__e1(), __e2()));           \
470
    }                                                                  \
471
                                                                       \
472
  template<class _Dom>                                                 \
473
    inline _Expr<_BinClos<_UFun, _Expr, _ValArray, _Dom,               \
474
                          typename _Dom::value_type>,                  \
475
                 typename _Dom::value_type>                            \
476
    _Fun(const _Expr<_Dom, typename _Dom::value_type>& __e,            \
477
         const valarray<typename _Dom::value_type>& __v)               \
478
    {                                                                  \
479
      typedef typename _Dom::value_type _Tp;                           \
480
      typedef _BinClos<_UFun, _Expr, _ValArray, _Dom, _Tp> _Closure;   \
481
      return _Expr<_Closure, _Tp>(_Closure(__e(), __v));               \
482
    }                                                                  \
483
                                                                       \
484
  template<class _Dom>                                                 \
485
    inline _Expr<_BinClos<_UFun, _ValArray, _Expr,                     \
486
                          typename _Dom::value_type, _Dom>,            \
487
                 typename _Dom::value_type>                            \
488
    _Fun(const valarray<typename _Dom::valarray>& __v,                 \
489
         const _Expr<_Dom, typename _Dom::value_type>& __e)            \
490
    {                                                                  \
491
      typedef typename _Dom::value_type _Tp;                           \
492
      typedef _BinClos<_UFun, _ValArray, _Expr, _Tp, _Dom> _Closure;   \
493
      return _Expr<_Closure, _Tp>(_Closure(__v, __e()));               \
494
    }                                                                  \
495
                                                                       \
496
  template<class _Dom>                                                 \
497
    inline _Expr<_BinClos<_UFun, _Expr, _Constant, _Dom,               \
498
                          typename _Dom::value_type>,                  \
499
                 typename _Dom::value_type>                            \
500
    _Fun(const _Expr<_Dom, typename _Dom::value_type>& __e,            \
501
         const typename _Dom::value_type& __t)                         \
502
    {                                                                  \
503
      typedef typename _Dom::value_type _Tp;                           \
504
      typedef _BinClos<_UFun, _Expr, _Constant, _Dom, _Tp> _Closure;   \
505
      return _Expr<_Closure, _Tp>(_Closure(__e(), __t));               \
506
    }                                                                  \
507
                                                                       \
508
  template<class _Dom>                                                 \
509
    inline _Expr<_BinClos<_UFun, _Constant, _Expr,                     \
510
                          typename _Dom::value_type, _Dom>,            \
511
                 typename _Dom::value_type>                            \
512
    _Fun(const typename _Dom::value_type& __t,                         \
513
         const _Expr<_Dom, typename _Dom::value_type>& __e)            \
514
    {                                                                  \
515
      typedef typename _Dom::value_type _Tp;                           \
516
      typedef _BinClos<_UFun, _Constant, _Expr, _Tp, _Dom> _Closure;   \
517
      return _Expr<_Closure, _Tp>(_Closure(__t, __e()));               \
518
    }                                                                  \
519
                                                                       \
520
  template<typename _Tp>                                               \
521
    inline _Expr<_BinClos<_UFun, _ValArray, _ValArray, _Tp, _Tp>, _Tp> \
522
    _Fun(const valarray<_Tp>& __v, const valarray<_Tp>& __w)           \
523
    {                                                                  \
524
      typedef _BinClos<_UFun, _ValArray, _ValArray, _Tp, _Tp> _Closure;\
525
      return _Expr<_Closure, _Tp>(_Closure(__v, __w));                 \
526
    }                                                                  \
527
                                                                       \
528
  template<typename _Tp>                                               \
529
    inline _Expr<_BinClos<_UFun, _ValArray, _Constant, _Tp, _Tp>, _Tp> \
530
    _Fun(const valarray<_Tp>& __v, const _Tp& __t)                     \
531
    {                                                                  \
532
      typedef _BinClos<_UFun, _ValArray, _Constant, _Tp, _Tp> _Closure;\
533
      return _Expr<_Closure, _Tp>(_Closure(__v, __t));                 \
534
    }                                                                  \
535
                                                                       \
536
  template<typename _Tp>                                               \
537
    inline _Expr<_BinClos<_UFun, _Constant, _ValArray, _Tp, _Tp>, _Tp> \
538
    _Fun(const _Tp& __t, const valarray<_Tp>& __v)                     \
539
    {                                                                  \
540
      typedef _BinClos<_UFun, _Constant, _ValArray, _Tp, _Tp> _Closure;\
541
      return _Expr<_Closure, _Tp>(_Closure(__t, __v));                 \
542
    }
543
 
544
_DEFINE_EXPR_BINARY_FUNCTION(atan2, _Atan2)
545
_DEFINE_EXPR_BINARY_FUNCTION(pow, _Pow)
546
 
547
#undef _DEFINE_EXPR_BINARY_FUNCTION
548
 
549
_GLIBCXX_END_NAMESPACE_VERSION
550
} // namespace
551
 
552
#endif /* _CPP_VALARRAY_AFTER_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.