⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 valarray_meta.h

📁 c++编程宝典源码及Quincy99编译器 是《标准C++编程宝典》电子工业出版社的光盘
💻 H
📖 第 1 页 / 共 3 页
字号:
    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 + -