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

📄 valarray_after.h

📁 openRisc2000编译链接器等,用于i386 cygwin
💻 H
📖 第 1 页 / 共 2 页
字号:
// The template and inlines for the -*- C++ -*- internal _Meta class.// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.//// This file is part of the GNU ISO C++ Library.  This library is free// software; you can redistribute it and/or modify it under the// terms of the GNU General Public License as published by the// Free Software Foundation; either version 2, or (at your option)// any later version.// This library is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License along// with this library; see the file COPYING.  If not, write to the Free// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,// USA.// As a special exception, you may use this file as part of a free software// library without restriction.  Specifically, if other files instantiate// templates or use macros or inline functions from this file, or you compile// this file and link it with other files to produce an executable, this// file does not by itself cause the resulting executable to be covered by// the GNU General Public License.  This exception does not however// invalidate any other reasons why the executable file might be covered by// the GNU General Public License.// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>/** @file valarray_meta.h *  This is an internal header file, included by other library headers. *  You should not attempt to use it directly. */#ifndef _VALARRAY_AFTER_H#define _VALARRAY_AFTER_H 1#pragma GCC system_headernamespace std{    //    // 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,std::_Expr,_Clos>, value_type>        operator+() const;      _Expr<_UnClos<__negate,std::_Expr,_Clos>, value_type>        operator-() const;      _Expr<_UnClos<__bitwise_not,std::_Expr,_Clos>, value_type>        operator~() const;      _Expr<_UnClos<__logical_not,std::_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;      value_type min() const;      value_type max() const;      valarray<value_type> apply(value_type (*)(const value_type&)) const;      valarray<value_type> apply(value_type (*)(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>    _Expr<_Clos,_Tp>::operator[](const valarray<bool>& __m) const    { return _M_closure[__m]; }  template<class _Clos, typename _Tp>    inline valarray<_Tp>    _Expr<_Clos,_Tp>::operator[](const valarray<size_t>& __i) const    { return _M_closure[__i]; }  template<class _Clos, typename _Tp>    inline size_t    _Expr<_Clos,_Tp>::size() const  { return _M_closure.size (); }  template<class _Clos, typename _Tp>    inline valarray<_Tp>    _Expr<_Clos, _Tp>::shift(int __n) const    { return valarray<_Tp>(_M_closure).shift(__n); }  template<class _Clos, typename _Tp>    inline valarray<_Tp>    _Expr<_Clos, _Tp>::cshift(int __n) const    { return valarray<_Tp>(_M_closure).cshift(__n); }  template<class _Clos, typename _Tp>    inline valarray<_Tp>    _Expr<_Clos, _Tp>::apply(_Tp __f(const _Tp&)) const    { return valarray<_Tp>(_M_closure).apply(__f); }  template<class _Clos, typename _Tp>    inline valarray<_Tp>    _Expr<_Clos, _Tp>::apply(_Tp __f(_Tp)) const    { return valarray<_Tp>(_M_closure).apply(__f); }  // XXX: replace this with a more robust summation algorithm.  template<class _Clos, typename _Tp>    inline _Tp    _Expr<_Clos,_Tp>::sum() const    {      size_t __n = _M_closure.size();      if (__n == 0)	return _Tp();      else	{	  _Tp __s = _M_closure[--__n];	  while (__n != 0)	    __s += _M_closure[--__n];	  return __s;        }    }

⌨️ 快捷键说明

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