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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [libstdc++-v3/] [include/] [bits/] [valarray_after.h] - Blame information for rev 424

Details | Compare with Previous | View Log

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