📄 valarray_meta.h
字号:
typedef typename _Op::result_type value_type; _BinBase (const _FirstArg& __e1, const _SecondArg& __e2) : _M_expr1 (__e1), _M_expr2 (__e2) {} value_type operator[] (size_t) const; size_t size () const { return _M_expr1.size (); } private: const _FirstArg& _M_expr1; const _SecondArg& _M_expr2;};template<template<class> class _Oper, typename _FirstArg, typename _SecondArg>inline typename _BinBase<_Oper,_FirstArg,_SecondArg>::value_type_BinBase<_Oper,_FirstArg,_SecondArg>::operator[] (size_t __i) const{ return _Op() (_M_expr1[__i], _M_expr2[__i]); }template<template<class> class _Oper, class _Clos>class _BinBase2 {public: typedef typename _Clos::value_type _Vt; typedef _Oper<_Vt> _Op; typedef typename _Op::result_type value_type; _BinBase2 (const _Clos& __e, const _Vt& __t) : _M_expr1 (__e), _M_expr2 (__t) {} value_type operator[] (size_t) const; size_t size () const { return _M_expr1.size (); } private: const _Clos& _M_expr1; const _Vt& _M_expr2;};template<template<class> class _Oper, class _Clos>inline typename _BinBase2<_Oper,_Clos>::value_type_BinBase2<_Oper,_Clos>::operator[] (size_t __i) const{ return _Op() (_M_expr1[__i], _M_expr2); }template<template<class> class _Oper, class _Clos>class _BinBase1 {public: typedef typename _Clos::value_type _Vt; typedef _Oper<_Vt> _Op; typedef typename _Op::result_type value_type; _BinBase1 (const _Vt& __t, const _Clos& __e) : _M_expr1 (__t), _M_expr2 (__e) {} value_type operator[] (size_t) const; size_t size () const { return _M_expr2.size (); } private: const _Vt& _M_expr1; const _Clos& _M_expr2;};template<template<class> class _Oper, class _Clos>inline typename_BinBase1<_Oper,_Clos>::value_type_BinBase1<_Oper,_Clos>:: operator[] (size_t __i) const{ return _Op() (_M_expr1, _M_expr2[__i]); }template<template<class> class _Oper, class _Dom1, class _Dom2>struct _BinClos<_Oper, _Expr, _Expr, _Dom1, _Dom2> : _BinBase<_Oper,_Dom1,_Dom2> { typedef _BinBase<_Oper,_Dom1,_Dom2> _Base; typedef typename _Base::value_type value_type; _BinClos(const _Dom1& __e1, const _Dom2& __e2) : _Base(__e1, __e2) {}};template<template<class> class _Oper, typename _Tp>struct _BinClos<_Oper,_ValArray,_ValArray,_Tp,_Tp> : _BinBase<_Oper,valarray<_Tp>,valarray<_Tp> > { typedef _BinBase<_Oper,valarray<_Tp>,valarray<_Tp> > _Base; typedef _Tp value_type; _BinClos (const valarray<_Tp>& __v, const valarray<_Tp>& __w) : _Base (__v, __w) {}};template<template<class> class _Oper, class _Dom>struct _BinClos<_Oper,_Expr,_ValArray,_Dom,typename _Dom::value_type> : _BinBase<_Oper,_Dom,valarray<typename _Dom::value_type> > { typedef typename _Dom::value_type _Tp; typedef _BinBase<_Oper,_Dom,valarray<_Tp> > _Base; typedef typename _Base::value_type value_type; _BinClos(const _Dom& __e1, const valarray<_Tp>& __e2) : _Base (__e1, __e2) {}};template<template<class> class _Oper, class _Dom>struct _BinClos<_Oper,_ValArray,_Expr,typename _Dom::value_type,_Dom> : _BinBase<_Oper,valarray<typename _Dom::value_type>,_Dom> { typedef typename _Dom::value_type _Tp; typedef _BinBase<_Oper,valarray<_Tp>,_Dom> _Base; typedef typename _Base::value_type value_type; _BinClos (const valarray<_Tp>& __e1, const _Dom& __e2) : _Base (__e1, __e2) {}};template<template<class> class _Oper, class _Dom>struct _BinClos<_Oper,_Expr,_Constant,_Dom,typename _Dom::value_type> : _BinBase2<_Oper,_Dom> { typedef typename _Dom::value_type _Tp; typedef _BinBase2<_Oper,_Dom> _Base; typedef typename _Base::value_type value_type; _BinClos (const _Dom& __e1, const _Tp& __e2) : _Base (__e1, __e2) {}};template<template<class> class _Oper, class _Dom>struct _BinClos<_Oper,_Constant,_Expr,typename _Dom::value_type,_Dom> : _BinBase1<_Oper,_Dom> { typedef typename _Dom::value_type _Tp; typedef _BinBase1<_Oper,_Dom> _Base; typedef typename _Base::value_type value_type; _BinClos (const _Tp& __e1, const _Dom& __e2) : _Base (__e1, __e2) {}};template<template<class> class _Oper, typename _Tp>struct _BinClos<_Oper,_ValArray,_Constant,_Tp,_Tp> : _BinBase2<_Oper,valarray<_Tp> > { typedef _BinBase2<_Oper,valarray<_Tp> > _Base; typedef typename _Base::value_type value_type; _BinClos (const valarray<_Tp>& __v, const _Tp& __t) : _Base (__v, __t) {}};template<template<class> class _Oper, typename _Tp>struct _BinClos<_Oper,_Constant,_ValArray,_Tp,_Tp> : _BinBase1<_Oper,valarray<_Tp> > { typedef _BinBase1<_Oper,valarray<_Tp> > _Base; typedef typename _Base::value_type value_type; _BinClos (const _Tp& __t, const valarray<_Tp>& __v) : _Base (__t, __v) {}};//// slice_array closure.//template<typename _Dom> class _SBase {public: typedef typename _Dom::value_type value_type; _SBase (const _Dom& __e, const slice& __s) : _M_expr (__e), _M_slice (__s) {} value_type operator[] (size_t __i) const { return _M_expr[_M_slice.start () + __i * _M_slice.stride ()]; } size_t size() const { return _M_slice.size (); } private: const _Dom& _M_expr; const slice& _M_slice;};template<typename _Tp> class _SBase<_Array<_Tp> > {public: typedef _Tp value_type; _SBase (_Array<_Tp> __a, const slice& __s) : _M_array (__a._M_data+__s.start()), _M_size (__s.size()), _M_stride (__s.stride()) {} value_type operator[] (size_t __i) const { return _M_array._M_data[__i * _M_stride]; } size_t size() const { return _M_size; } private: const _Array<_Tp> _M_array; const size_t _M_size; const size_t _M_stride;};template<class _Dom> struct _SClos<_Expr,_Dom> : _SBase<_Dom> { typedef _SBase<_Dom> _Base; typedef typename _Base::value_type value_type; _SClos (const _Dom& __e, const slice& __s) : _Base (__e, __s) {}};template<typename _Tp>struct _SClos<_ValArray,_Tp> : _SBase<_Array<_Tp> > { typedef _SBase<_Array<_Tp> > _Base; typedef _Tp value_type; _SClos (_Array<_Tp> __a, const slice& __s) : _Base (__a, __s) {}};//// gslice_array closure.//template<class _Dom> class _GBase {public: typedef typename _Dom::value_type value_type; _GBase (const _Dom& __e, const valarray<size_t>& __i) : _M_expr (__e), _M_index(__i) {} value_type operator[] (size_t __i) const { return _M_expr[_M_index[__i]]; } size_t size () const { return _M_index.size(); } private: const _Dom& _M_expr; const valarray<size_t>& _M_index;};template<typename _Tp> class _GBase<_Array<_Tp> > {public: typedef _Tp value_type; _GBase (_Array<_Tp> __a, const valarray<size_t>& __i) : _M_array (__a), _M_index(__i) {} value_type operator[] (size_t __i) const { return _M_array._M_data[_M_index[__i]]; } size_t size () const { return _M_index.size(); } private: const _Array<_Tp> _M_array; const valarray<size_t>& _M_index;};template<class _Dom> struct _GClos<_Expr,_Dom> : _GBase<_Dom> { typedef _GBase<_Dom> _Base; typedef typename _Base::value_type value_type; _GClos (const _Dom& __e, const valarray<size_t>& __i) : _Base (__e, __i) {}};template<typename _Tp>struct _GClos<_ValArray,_Tp> : _GBase<_Array<_Tp> > { typedef _GBase<_Array<_Tp> > _Base; typedef typename _Base::value_type value_type; _GClos (_Array<_Tp> __a, const valarray<size_t>& __i) : _Base (__a, __i) {}};//// indirect_array closure//template<class _Dom> class _IBase {public: typedef typename _Dom::value_type value_type; _IBase (const _Dom& __e, const valarray<size_t>& __i) : _M_expr (__e), _M_index (__i) {} value_type operator[] (size_t __i) const { return _M_expr[_M_index[__i]]; } size_t size() const { return _M_index.size(); } private: const _Dom& _M_expr; const valarray<size_t>& _M_index;};template<class _Dom> struct _IClos<_Expr,_Dom> : _IBase<_Dom> { typedef _IBase<_Dom> _Base; typedef typename _Base::value_type value_type; _IClos (const _Dom& __e, const valarray<size_t>& __i) : _Base (__e, __i) {}};template<typename _Tp>struct _IClos<_ValArray,_Tp> : _IBase<valarray<_Tp> > { typedef _IBase<valarray<_Tp> > _Base; typedef _Tp value_type; _IClos (const valarray<_Tp>& __a, const valarray<size_t>& __i) : _Base (__a, __i) {}};//// class _Expr// template<class _Clos, typename _Tp> class _Expr {public: typedef _Tp value_type; _Expr (const _Clos&); const _Clos& operator() () const; value_type operator[] (size_t) const; valarray<value_type> operator[] (slice) const; valarray<value_type> operator[] (const gslice&) const; valarray<value_type> operator[] (const valarray<bool>&) const; valarray<value_type> operator[] (const valarray<size_t>&) const; _Expr<_UnClos<_Unary_plus,_Expr,_Clos>, value_type> operator+ () const; _Expr<_UnClos<negate,_Expr,_Clos>, value_type> operator- () const; _Expr<_UnClos<_Bitwise_not,_Expr,_Clos>, value_type> operator~ () const; _Expr<_UnClos<logical_not,_Expr,_Clos>, bool> operator! () const; size_t size () const; value_type sum () const; valarray<value_type> shift (int) const; valarray<value_type> cshift (int) const;// _Meta<_ApplyFunctionWithValue<_Expr>, value_type>// apply (value_type _M_func (value_type)) const;// _Meta<_ApplyFunctionWithConstRef<_Expr>, value_type>// apply (value_type _M_func (const value_type&)) const; private: const _Clos _M_closure;}; template<class _Clos, typename _Tp>inline_Expr<_Clos,_Tp>::_Expr (const _Clos& __c) : _M_closure(__c) {}template<class _Clos, typename _Tp>inline const _Clos&_Expr<_Clos,_Tp>::operator() () const{ return _M_closure; }template<class _Clos, typename _Tp>inline _Tp_Expr<_Clos,_Tp>::operator[] (size_t __i) const{ return _M_closure[__i]; }template<class _Clos, typename _Tp>inline valarray<_Tp>_Expr<_Clos,_Tp>::operator[] (slice __s) const{ return _M_closure[__s]; }template<class _Clos, typename _Tp>inline valarray<_Tp>_Expr<_Clos,_Tp>::operator[] (const gslice& __gs) const{ return _M_closure[__gs]; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -