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

📄 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]; }        template<class _Clos, typename _Tp>    inline valarray<_Tp>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -