32#ifndef _VALARRAY_BEFORE_H
33#define _VALARRAY_BEFORE_H 1
36#pragma GCC system_header
41namespace std _GLIBCXX_VISIBILITY(default)
43_GLIBCXX_BEGIN_NAMESPACE_VERSION
55 template<
typename _Tp1,
typename _Tp2>
class _Constant;
67 template<
typename _Tp>
68 _Tp operator()(
const _Tp& __t)
const
74 template<
typename _Tp>
75 _Tp operator()(
const _Tp& __t)
const
81 template<
typename _Tp>
82 _Tp operator()(
const _Tp& __t)
const
88 template<
typename _Tp>
89 _Tp operator()(
const _Tp& __t)
const
95 template<
typename _Tp>
96 _Tp operator()(
const _Tp& __t)
const
102 template<
typename _Tp>
103 _Tp operator()(
const _Tp& __t)
const
104 {
return asin(__t); }
109 template<
typename _Tp>
110 _Tp operator()(
const _Tp& __t)
const
111 {
return sinh(__t); }
116 template<
typename _Tp>
117 _Tp operator()(
const _Tp& __t)
const
123 template<
typename _Tp>
124 _Tp operator()(
const _Tp& __t)
const
125 {
return atan(__t); }
130 template<
typename _Tp>
131 _Tp operator()(
const _Tp& __t)
const
132 {
return tanh(__t); }
137 template<
typename _Tp>
138 _Tp operator()(
const _Tp& __t)
const
144 template<
typename _Tp>
145 _Tp operator()(
const _Tp& __t)
const
151 template<
typename _Tp>
152 _Tp operator()(
const _Tp& __t)
const
153 {
return log10(__t); }
158 template<
typename _Tp>
159 _Tp operator()(
const _Tp& __t)
const
160 {
return sqrt(__t); }
169 template<
typename _Tp>
170 _Tp operator()(
const _Tp& __t)
const
176 template<
typename _Tp>
177 _Tp operator()(
const _Tp& __t)
const
183 template<
typename _Tp>
184 _Tp operator()(
const _Tp& __t)
const
190 template<
typename _Tp>
191 _Tp operator()(
const _Tp& __x,
const _Tp& __y)
const
192 {
return __x + __y; }
197 template<
typename _Tp>
198 _Tp operator()(
const _Tp& __x,
const _Tp& __y)
const
199 {
return __x - __y; }
204 template<
typename _Tp>
205 _Tp operator()(
const _Tp& __x,
const _Tp& __y)
const
206 {
return __x * __y; }
211 template<
typename _Tp>
212 _Tp operator()(
const _Tp& __x,
const _Tp& __y)
const
213 {
return __x / __y; }
218 template<
typename _Tp>
219 _Tp operator()(
const _Tp& __x,
const _Tp& __y)
const
220 {
return __x % __y; }
225 template<
typename _Tp>
226 _Tp operator()(
const _Tp& __x,
const _Tp& __y)
const
227 {
return __x ^ __y; }
232 template<
typename _Tp>
233 _Tp operator()(
const _Tp& __x,
const _Tp& __y)
const
234 {
return __x & __y; }
239 template<
typename _Tp>
240 _Tp operator()(
const _Tp& __x,
const _Tp& __y)
const
241 {
return __x | __y; }
246 template<
typename _Tp>
247 _Tp operator()(
const _Tp& __x,
const _Tp& __y)
const
248 {
return __x << __y; }
253 template<
typename _Tp>
254 _Tp operator()(
const _Tp& __x,
const _Tp& __y)
const
255 {
return __x >> __y; }
260 template<
typename _Tp>
261 bool operator()(
const _Tp& __x,
const _Tp& __y)
const
262 {
return __x && __y; }
267 template<
typename _Tp>
268 bool operator()(
const _Tp& __x,
const _Tp& __y)
const
269 {
return __x || __y; }
274 template<
typename _Tp>
275 bool operator()(
const _Tp& __x)
const
281 template<
typename _Tp>
282 bool operator()(
const _Tp& __x,
const _Tp& __y)
const
283 {
return __x == __y; }
286 struct __not_equal_to
288 template<
typename _Tp>
289 bool operator()(
const _Tp& __x,
const _Tp& __y)
const
290 {
return __x != __y; }
295 template<
typename _Tp>
296 bool operator()(
const _Tp& __x,
const _Tp& __y)
const
297 {
return __x < __y; }
302 template<
typename _Tp>
303 bool operator()(
const _Tp& __x,
const _Tp& __y)
const
304 {
return __x > __y; }
309 template<
typename _Tp>
310 bool operator()(
const _Tp& __x,
const _Tp& __y)
const
311 {
return __x <= __y; }
314 struct __greater_equal
316 template<
typename _Tp>
317 bool operator()(
const _Tp& __x,
const _Tp& __y)
const
318 {
return __x >= __y; }
324 template<
typename _Tp>
325 _Tp operator()(
const _Tp& __x,
const _Tp& __y)
const
326 {
return atan2(__x, __y); }
331 template<
typename _Tp>
332 _Tp operator()(
const _Tp& __x,
const _Tp& __y)
const
333 {
return pow(__x, __y); }
336 template<
typename _Tp,
bool _IsVal
idValarrayValue = !__is_abstract(_Tp)>
337 struct __fun_with_valarray
339 typedef _Tp result_type;
342 template<
typename _Tp>
343 struct __fun_with_valarray<_Tp, false>
351 template<
typename,
typename _Tp>
352 struct __fun : __fun_with_valarray<_Tp>
357 template<
typename _Tp>
358 struct __fun<__logical_not, _Tp>
360 typedef bool result_type;
363 template<
typename _Tp>
364 struct __fun<__logical_and, _Tp>
366 typedef bool result_type;
369 template<
typename _Tp>
370 struct __fun<__logical_or, _Tp>
372 typedef bool result_type;
375 template<
typename _Tp>
376 struct __fun<__less, _Tp>
378 typedef bool result_type;
381 template<
typename _Tp>
382 struct __fun<__greater, _Tp>
384 typedef bool result_type;
387 template<
typename _Tp>
388 struct __fun<__less_equal, _Tp>
390 typedef bool result_type;
393 template<
typename _Tp>
394 struct __fun<__greater_equal, _Tp>
396 typedef bool result_type;
399 template<
typename _Tp>
400 struct __fun<__equal_to, _Tp>
402 typedef bool result_type;
405 template<
typename _Tp>
406 struct __fun<__not_equal_to, _Tp>
408 typedef bool result_type;
416 template<
typename _Tp>
418 {
typedef const _Tp __type; };
421 template<
typename _Tp>
422 struct _ValArrayRef< valarray<_Tp> >
423 {
typedef const valarray<_Tp>& __type; };
429 template<
typename _Dom,
typename _Arg>
433 typedef typename _Dom::value_type value_type;
435 _FunBase(
const _Dom& __e, value_type __f(_Arg))
436 : _M_expr(__e), _M_func(__f) {}
438 value_type operator[](
size_t __i)
const
439 {
return _M_func (_M_expr[__i]); }
441 size_t size()
const {
return _M_expr.size ();}
444 typename _ValArrayRef<_Dom>::__type _M_expr;
445 value_type (*_M_func)(_Arg);
449 struct _ValFunClos<_Expr,_Dom> : _FunBase<_Dom, typename _Dom::value_type>
451 typedef _FunBase<_Dom, typename _Dom::value_type> _Base;
452 typedef typename _Base::value_type value_type;
453 typedef value_type _Tp;
455 _ValFunClos(
const _Dom& __e, _Tp __f(_Tp)) : _Base(__e, __f) {}
458 template<
typename _Tp>
459 struct _ValFunClos<_ValArray,_Tp> : _FunBase<valarray<_Tp>, _Tp>
461 typedef _FunBase<valarray<_Tp>, _Tp> _Base;
462 typedef _Tp value_type;
464 _ValFunClos(
const valarray<_Tp>& __v, _Tp __f(_Tp)) : _Base(__v, __f) {}
468 struct _RefFunClos<_Expr, _Dom>
469 : _FunBase<_Dom, const typename _Dom::value_type&>
471 typedef _FunBase<_Dom, const typename _Dom::value_type&> _Base;
472 typedef typename _Base::value_type value_type;
473 typedef value_type _Tp;
475 _RefFunClos(
const _Dom& __e, _Tp __f(
const _Tp&))
479 template<
typename _Tp>
480 struct _RefFunClos<_ValArray, _Tp>
481 : _FunBase<valarray<_Tp>, const _Tp&>
483 typedef _FunBase<valarray<_Tp>,
const _Tp&> _Base;
484 typedef _Tp value_type;
486 _RefFunClos(
const valarray<_Tp>& __v, _Tp __f(
const _Tp&))
494 template<
class _Oper,
class _Arg>
498 typedef typename _Arg::value_type _Vt;
499 typedef typename __fun<_Oper, _Vt>::result_type value_type;
501 _UnBase(
const _Arg& __e) : _M_expr(__e) {}
503 value_type operator[](
size_t __i)
const
504 {
return _Oper()(_M_expr[__i]); }
506 size_t size()
const {
return _M_expr.size(); }
509 typename _ValArrayRef<_Arg>::__type _M_expr;
512 template<
class _Oper,
class _Dom>
513 struct _UnClos<_Oper, _Expr, _Dom>
514 : _UnBase<_Oper, _Dom>
517 typedef _UnBase<_Oper, _Dom> _Base;
518 typedef typename _Base::value_type value_type;
520 _UnClos(
const _Arg& __e) : _Base(__e) {}
523 template<
class _Oper,
typename _Tp>
524 struct _UnClos<_Oper, _ValArray, _Tp>
525 : _UnBase<_Oper, valarray<_Tp> >
527 typedef valarray<_Tp> _Arg;
528 typedef _UnBase<_Oper, valarray<_Tp> > _Base;
529 typedef typename _Base::value_type value_type;
531 _UnClos(
const _Arg& __e) : _Base(__e) {}
539 template<
class _Oper,
class _FirstArg,
class _SecondArg>
543 typedef typename _FirstArg::value_type _Vt;
544 typedef typename __fun<_Oper, _Vt>::result_type value_type;
546 _BinBase(
const _FirstArg& __e1,
const _SecondArg& __e2)
547 : _M_expr1(__e1), _M_expr2(__e2) {}
549 value_type operator[](
size_t __i)
const
550 {
return _Oper()(_M_expr1[__i], _M_expr2[__i]); }
552 size_t size()
const {
return _M_expr1.size(); }
555 typename _ValArrayRef<_FirstArg>::__type _M_expr1;
556 typename _ValArrayRef<_SecondArg>::__type _M_expr2;
560 template<
class _Oper,
class _Clos>
564 typedef typename _Clos::value_type _Vt;
565 typedef typename __fun<_Oper, _Vt>::result_type value_type;
567 _BinBase2(
const _Clos& __e,
const _Vt& __t)
568 : _M_expr1(__e), _M_expr2(__t) {}
570 value_type operator[](
size_t __i)
const
571 {
return _Oper()(_M_expr1[__i], _M_expr2); }
573 size_t size()
const {
return _M_expr1.size(); }
576 typename _ValArrayRef<_Clos>::__type _M_expr1;
580 template<
class _Oper,
class _Clos>
584 typedef typename _Clos::value_type _Vt;
585 typedef typename __fun<_Oper, _Vt>::result_type value_type;
587 _BinBase1(
const _Vt& __t,
const _Clos& __e)
588 : _M_expr1(__t), _M_expr2(__e) {}
590 value_type operator[](
size_t __i)
const
591 {
return _Oper()(_M_expr1, _M_expr2[__i]); }
593 size_t size()
const {
return _M_expr2.size(); }
597 typename _ValArrayRef<_Clos>::__type _M_expr2;
600 template<
class _Oper,
class _Dom1,
class _Dom2>
601 struct _BinClos<_Oper, _Expr, _Expr, _Dom1, _Dom2>
602 : _BinBase<_Oper, _Dom1, _Dom2>
604 typedef _BinBase<_Oper, _Dom1, _Dom2> _Base;
605 typedef typename _Base::value_type value_type;
607 _BinClos(
const _Dom1& __e1,
const _Dom2& __e2) : _Base(__e1, __e2) {}
610 template<
class _Oper,
typename _Tp>
611 struct _BinClos<_Oper, _ValArray, _ValArray, _Tp, _Tp>
612 : _BinBase<_Oper, valarray<_Tp>, valarray<_Tp> >
614 typedef _BinBase<_Oper, valarray<_Tp>, valarray<_Tp> > _Base;
615 typedef typename _Base::value_type value_type;
617 _BinClos(
const valarray<_Tp>& __v,
const valarray<_Tp>& __w)
621 template<
class _Oper,
class _Dom>
622 struct _BinClos<_Oper, _Expr, _ValArray, _Dom, typename _Dom::value_type>
623 : _BinBase<_Oper, _Dom, valarray<typename _Dom::value_type> >
625 typedef typename _Dom::value_type _Tp;
626 typedef _BinBase<_Oper,_Dom,valarray<_Tp> > _Base;
627 typedef typename _Base::value_type value_type;
629 _BinClos(
const _Dom& __e1,
const valarray<_Tp>& __e2)
630 : _Base(__e1, __e2) {}
633 template<
class _Oper,
class _Dom>
634 struct _BinClos<_Oper, _ValArray, _Expr, typename _Dom::value_type, _Dom>
635 : _BinBase<_Oper, valarray<typename _Dom::value_type>,_Dom>
637 typedef typename _Dom::value_type _Tp;
638 typedef _BinBase<_Oper, valarray<_Tp>, _Dom> _Base;
639 typedef typename _Base::value_type value_type;
641 _BinClos(
const valarray<_Tp>& __e1,
const _Dom& __e2)
642 : _Base(__e1, __e2) {}
645 template<
class _Oper,
class _Dom>
646 struct _BinClos<_Oper, _Expr, _Constant, _Dom, typename _Dom::value_type>
647 : _BinBase2<_Oper, _Dom>
649 typedef typename _Dom::value_type _Tp;
650 typedef _BinBase2<_Oper,_Dom> _Base;
651 typedef typename _Base::value_type value_type;
653 _BinClos(
const _Dom& __e1,
const _Tp& __e2) : _Base(__e1, __e2) {}
656 template<
class _Oper,
class _Dom>
657 struct _BinClos<_Oper, _Constant, _Expr, typename _Dom::value_type, _Dom>
658 : _BinBase1<_Oper, _Dom>
660 typedef typename _Dom::value_type _Tp;
661 typedef _BinBase1<_Oper, _Dom> _Base;
662 typedef typename _Base::value_type value_type;
664 _BinClos(
const _Tp& __e1,
const _Dom& __e2) : _Base(__e1, __e2) {}
667 template<
class _Oper,
typename _Tp>
668 struct _BinClos<_Oper, _ValArray, _Constant, _Tp, _Tp>
669 : _BinBase2<_Oper, valarray<_Tp> >
671 typedef _BinBase2<_Oper,valarray<_Tp> > _Base;
672 typedef typename _Base::value_type value_type;
674 _BinClos(
const valarray<_Tp>& __v,
const _Tp& __t) : _Base(__v, __t) {}
677 template<
class _Oper,
typename _Tp>
678 struct _BinClos<_Oper, _Constant, _ValArray, _Tp, _Tp>
679 : _BinBase1<_Oper, valarray<_Tp> >
681 typedef _BinBase1<_Oper, valarray<_Tp> > _Base;
682 typedef typename _Base::value_type value_type;
684 _BinClos(
const _Tp& __t,
const valarray<_Tp>& __v) : _Base(__t, __v) {}
690 template<
typename _Dom>
694 typedef typename _Dom::value_type value_type;
696 _SBase (
const _Dom& __e,
const slice& __s)
697 : _M_expr (__e), _M_slice (__s) {}
700 operator[] (
size_t __i)
const
701 {
return _M_expr[_M_slice.start () + __i * _M_slice.stride ()]; }
705 {
return _M_slice.size (); }
708 typename _ValArrayRef<_Dom>::__type _M_expr;
709 const slice& _M_slice;
712 template<
typename _Tp>
713 class _SBase<_Array<_Tp> >
716 typedef _Tp value_type;
718 _SBase (_Array<_Tp> __a,
const slice& __s)
719 : _M_array (__a._M_data+__s.start()), _M_size (__s.size()),
720 _M_stride (__s.stride()) {}
723 operator[] (
size_t __i)
const
724 {
return _M_array._M_data[__i * _M_stride]; }
731 const _Array<_Tp> _M_array;
732 const size_t _M_size;
733 const size_t _M_stride;
737 struct _SClos<_Expr, _Dom>
740 typedef _SBase<_Dom> _Base;
741 typedef typename _Base::value_type value_type;
743 _SClos (
const _Dom& __e,
const slice& __s) : _Base (__e, __s) {}
746 template<
typename _Tp>
747 struct _SClos<_ValArray, _Tp>
748 : _SBase<_Array<_Tp> >
750 typedef _SBase<_Array<_Tp> > _Base;
751 typedef _Tp value_type;
753 _SClos (_Array<_Tp> __a,
const slice& __s) : _Base (__a, __s) {}
757_GLIBCXX_END_NAMESPACE_VERSION
complex< _Tp > log10(const complex< _Tp > &)
Return complex base 10 logarithm of z.
complex< _Tp > sin(const complex< _Tp > &)
Return complex sine of z.
complex< _Tp > log(const complex< _Tp > &)
Return complex natural logarithm of z.
complex< _Tp > tan(const complex< _Tp > &)
Return complex tangent of z.
_Tp abs(const complex< _Tp > &)
Return magnitude of z.
complex< _Tp > exp(const complex< _Tp > &)
Return complex base e exponential of z.
complex< _Tp > cosh(const complex< _Tp > &)
Return complex hyperbolic cosine of z.
complex< _Tp > tanh(const complex< _Tp > &)
Return complex hyperbolic tangent of z.
complex< _Tp > pow(const complex< _Tp > &, int)
Return x to the y'th power.
complex< _Tp > sinh(const complex< _Tp > &)
Return complex hyperbolic sine of z.
complex< _Tp > cos(const complex< _Tp > &)
Return complex cosine of z.
complex< _Tp > sqrt(const complex< _Tp > &)
Return complex square root of z.
ISO C++ entities toplevel namespace is std.
Implementation details not part of the namespace std interface.