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

📄 functional_iterate.h

📁 linux下编程用 编译软件
💻 H
📖 第 1 页 / 共 2 页
字号:
inline_Bind_result<_Result,             typename _Maybe_wrap_member_pointer<_Functor>::type               (_GLIBCXX_TEMPLATE_ARGS)>bind(_Functor __f _GLIBCXX_COMMA _GLIBCXX_PARAMS){  typedef _Maybe_wrap_member_pointer<_Functor> __maybe_type;  typedef typename __maybe_type::type __functor_type;  typedef _Bind_result<_Result, __functor_type(_GLIBCXX_TEMPLATE_ARGS)>    __result_type;  return __result_type(__maybe_type::__do_wrap(__f)                       _GLIBCXX_COMMA _GLIBCXX_ARGS);}template<typename _Res, typename _Functor _GLIBCXX_COMMA         _GLIBCXX_TEMPLATE_PARAMS>class _Function_handler<_Res(_GLIBCXX_TEMPLATE_ARGS), _Functor>  : public _Function_base::_Base_manager<_Functor>{  typedef _Function_base::_Base_manager<_Functor> _Base; public:  static _Res  _M_invoke(const _Any_data& __functor _GLIBCXX_COMMA _GLIBCXX_PARAMS)  {    return (*_Base::_M_get_pointer(__functor))(_GLIBCXX_ARGS);  }};template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>class _Function_handler<void(_GLIBCXX_TEMPLATE_ARGS), _Functor>  : public _Function_base::_Base_manager<_Functor>{  typedef _Function_base::_Base_manager<_Functor> _Base; public:  static void  _M_invoke(const _Any_data& __functor _GLIBCXX_COMMA _GLIBCXX_PARAMS)  {    (*_Base::_M_get_pointer(__functor))(_GLIBCXX_ARGS);  }};template<typename _Res, typename _Functor _GLIBCXX_COMMA         _GLIBCXX_TEMPLATE_PARAMS>class _Function_handler<_Res(_GLIBCXX_TEMPLATE_ARGS),                        reference_wrapper<_Functor> >  : public _Function_base::_Ref_manager<_Functor>{  typedef _Function_base::_Ref_manager<_Functor> _Base; public:  static _Res  _M_invoke(const _Any_data& __functor _GLIBCXX_COMMA _GLIBCXX_PARAMS)  {    return __callable_functor(**_Base::_M_get_pointer(__functor))             (_GLIBCXX_ARGS);  }};template<typename _Functor _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>class _Function_handler<void(_GLIBCXX_TEMPLATE_ARGS),                        reference_wrapper<_Functor> >  : public _Function_base::_Ref_manager<_Functor>{  typedef _Function_base::_Ref_manager<_Functor> _Base; public:  static void  _M_invoke(const _Any_data& __functor _GLIBCXX_COMMA _GLIBCXX_PARAMS)  {    __callable_functor(**_Base::_M_get_pointer(__functor))(_GLIBCXX_ARGS);  }};template<typename _Class, typename _Member, typename _Res         _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>class _Function_handler<_Res(_GLIBCXX_TEMPLATE_ARGS), _Member _Class::*>  : public _Function_handler<void(_GLIBCXX_TEMPLATE_ARGS), _Member _Class::*>{  typedef _Function_handler<void(_GLIBCXX_TEMPLATE_ARGS), _Member _Class::*>    _Base; public:  static _Res  _M_invoke(const _Any_data& __functor _GLIBCXX_COMMA _GLIBCXX_PARAMS)  {    return std::tr1::mem_fn(_Base::_M_get_pointer(__functor)->__value)             (_GLIBCXX_ARGS);  }};template<typename _Class, typename _Member         _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>class _Function_handler<void(_GLIBCXX_TEMPLATE_ARGS), _Member _Class::*>  : public _Function_base::_Base_manager<             _Simple_type_wrapper< _Member _Class::* > >{  typedef _Member _Class::* _Functor;  typedef _Simple_type_wrapper< _Functor > _Wrapper;  typedef _Function_base::_Base_manager<_Wrapper> _Base; public:  static bool  _M_manager(_Any_data& __dest, const _Any_data& __source,             _Manager_operation __op)  {    switch (__op) {    case __get_type_info:      __dest._M_access<const type_info*>() = &typeid(_Functor);      break;    case __get_functor_ptr:      __dest._M_access<_Functor*>() =        &_Base::_M_get_pointer(__source)->__value;      break;    default:      _Base::_M_manager(__dest, __source, __op);    }    return false;  }  static void  _M_invoke(const _Any_data& __functor _GLIBCXX_COMMA _GLIBCXX_PARAMS)  {    std::tr1::mem_fn(_Base::_M_get_pointer(__functor)->__value)      (_GLIBCXX_ARGS);  }};template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>class function<_Res(_GLIBCXX_TEMPLATE_ARGS)>#if _GLIBCXX_NUM_ARGS == 1  : public unary_function<_T1, _Res>, private _Function_base#elif _GLIBCXX_NUM_ARGS == 2  : public binary_function<_T1, _T2, _Res>, private _Function_base#else  : private _Function_base#endif{  /**   *  @if maint   *  This class is used to implement the safe_bool idiom.   *  @endif   */  struct _Hidden_type  {    _Hidden_type* _M_bool;  };  /**   *  @if maint   *  This typedef is used to implement the safe_bool idiom.   *  @endif   */  typedef _Hidden_type* _Hidden_type::* _Safe_bool;  typedef _Res _Signature_type(_GLIBCXX_TEMPLATE_ARGS);  struct _Useless {}; public:  typedef _Res result_type;  // [3.7.2.1] construct/copy/destroy  /**   *  @brief Default construct creates an empty function call wrapper.   *  @post @c !(bool)*this   */  function() : _Function_base() { }  /**   *  @brief Default construct creates an empty function call wrapper.   *  @post @c !(bool)*this   */  function(_M_clear_type*) : _Function_base() { }  /**   *  @brief %Function copy constructor.   *  @param x A %function object with identical call signature.   *  @pre @c (bool)*this == (bool)x   *   *  The newly-created %function contains a copy of the target of @a   *  x (if it has one).   */  function(const function& __x);  /**   *  @brief Builds a %function that targets a copy of the incoming   *  function object.   *  @param f A %function object that is callable with parameters of   *  type @c T1, @c T2, ..., @c TN and returns a value convertible   *  to @c Res.   *   *  The newly-created %function object will target a copy of @a   *  f. If @a f is @c reference_wrapper<F>, then this function   *  object will contain a reference to the function object @c   *  f.get(). If @a f is a NULL function pointer or NULL   *  pointer-to-member, the newly-created object will be empty.   *   *  If @a f is a non-NULL function pointer or an object of type @c   *  reference_wrapper<F>, this function will not throw.   */  template<typename _Functor>    function(_Functor __f,             typename __enable_if<_Useless,                                  !is_integral<_Functor>::value>::__type               = _Useless());  /**   *  @brief %Function assignment operator.   *  @param x A %function with identical call signature.   *  @post @c (bool)*this == (bool)x   *  @returns @c *this   *   *  The target of @a x is copied to @c *this. If @a x has no   *  target, then @c *this will be empty.   *   *  If @a x targets a function pointer or a reference to a function   *  object, then this operation will not throw an exception.   */  function& operator=(const function& __x)    {      function(__x).swap(*this);      return *this;    }  /**   *  @brief %Function assignment to zero.   *  @post @c !(bool)*this   *  @returns @c *this   *   *  The target of @a *this is deallocated, leaving it empty.   */  function& operator=(_M_clear_type*)    {      if (_M_manager) {        _M_manager(_M_functor, _M_functor, __destroy_functor);        _M_manager = 0;        _M_invoker = 0;      }      return *this;    }  /**   *  @brief %Function assignment to a new target.   *  @param f A %function object that is callable with parameters of   *  type @c T1, @c T2, ..., @c TN and returns a value convertible   *  to @c Res.   *  @return @c *this   *   *  This  %function object wrapper will target a copy of @a   *  f. If @a f is @c reference_wrapper<F>, then this function   *  object will contain a reference to the function object @c   *  f.get(). If @a f is a NULL function pointer or NULL   *  pointer-to-member, @c this object will be empty.   *   *  If @a f is a non-NULL function pointer or an object of type @c   *  reference_wrapper<F>, this function will not throw.   */  template<typename _Functor>    typename __enable_if<function&, !is_integral<_Functor>::value>::__type    operator=(_Functor __f)    {      function(__f).swap(*this);      return *this;    }  // [3.7.2.2] function modifiers  /**   *  @brief Swap the targets of two %function objects.   *  @param f A %function with identical call signature.   *   *  Swap the targets of @c this function object and @a f. This   *  function will not throw an exception.   */  void swap(function& __x)  {    _Any_data __old_functor = _M_functor;    _M_functor = __x._M_functor;    __x._M_functor = __old_functor;    _Manager_type __old_manager = _M_manager;    _M_manager = __x._M_manager;    __x._M_manager = __old_manager;    _Invoker_type __old_invoker = _M_invoker;    _M_invoker = __x._M_invoker;    __x._M_invoker = __old_invoker;  }  // [3.7.2.3] function capacity  /**   *  @brief Determine if the %function wrapper has a target.   *   *  @return @c true when this %function object contains a target,   *  or @c false when it is empty.   *   *  This function will not throw an exception.   */  operator _Safe_bool() const    {      if (_M_empty())        {          return 0;        }      else        {          return &_Hidden_type::_M_bool;        }    }  // [3.7.2.4] function invocation  /**   *  @brief Invokes the function targeted by @c *this.   *  @returns the result of the target.   *  @throws bad_function_call when @c !(bool)*this   *   *  The function call operator invokes the target function object   *  stored by @c this.   */  _Res operator()(_GLIBCXX_PARAMS) const;  // [3.7.2.5] function target access  /**   *  @brief Determine the type of the target of this function object   *  wrapper.   *   *  @returns the type identifier of the target function object, or   *  @c typeid(void) if @c !(bool)*this.   *   *  This function will not throw an exception.   */  const type_info& target_type() const;  /**   *  @brief Access the stored target function object.   *   *  @return Returns a pointer to the stored target function object,   *  if @c typeid(Functor).equals(target_type()); otherwise, a NULL   *  pointer.   *   * This function will not throw an exception.   */  template<typename _Functor>       _Functor* target();  /**   *  @overload   */  template<typename _Functor> const _Functor* target() const; private:  // [3.7.2.6] undefined operators  template<typename _Function>    void operator==(const function<_Function>&) const;  template<typename _Function>    void operator!=(const function<_Function>&) const;  typedef _Res (*_Invoker_type)(const _Any_data& _GLIBCXX_COMMA                                _GLIBCXX_PARAMS);  _Invoker_type _M_invoker;};template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>  function<_Res(_GLIBCXX_TEMPLATE_ARGS)>::function(const function& __x)    : _Function_base()  {    if (__x) {      _M_invoker = __x._M_invoker;      _M_manager = __x._M_manager;      __x._M_manager(_M_functor, __x._M_functor, __clone_functor);    }  }template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>template<typename _Functor>  function<_Res(_GLIBCXX_TEMPLATE_ARGS)>  ::function(_Functor __f,             typename __enable_if<_Useless,                                  !is_integral<_Functor>::value>::__type)    : _Function_base(){  typedef _Function_handler<_Signature_type, _Functor> _My_handler;  if (_My_handler::_M_not_empty_function(__f)) {    _M_invoker = &_My_handler::_M_invoke;    _M_manager = &_My_handler::_M_manager;    _My_handler::_M_init_functor(_M_functor, __f);  }}template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>  _Res  function<_Res(_GLIBCXX_TEMPLATE_ARGS)>::operator()(_GLIBCXX_PARAMS) const  {    if (_M_empty())      {#if __EXCEPTIONS        throw bad_function_call();#else        std::abort();#endif      }    return _M_invoker(_M_functor _GLIBCXX_COMMA _GLIBCXX_ARGS);  }template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>  const type_info&  function<_Res(_GLIBCXX_TEMPLATE_ARGS)>::target_type() const  {    if (_M_manager)      {        _Any_data __typeinfo_result;        _M_manager(__typeinfo_result, _M_functor, __get_type_info);        return *__typeinfo_result._M_access<const type_info*>();      }    else      {        return typeid(void);      }  }template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>template<typename _Functor>  _Functor*  function<_Res(_GLIBCXX_TEMPLATE_ARGS)>::target()  {    if (typeid(_Functor) == target_type() && _M_manager)      {        _Any_data __ptr;        if (_M_manager(__ptr, _M_functor, __get_functor_ptr)            && !is_const<_Functor>::value)          return 0;        else          return __ptr._M_access<_Functor*>();      }    else      {        return 0;      }  }template<typename _Res _GLIBCXX_COMMA _GLIBCXX_TEMPLATE_PARAMS>template<typename _Functor>  const _Functor*  function<_Res(_GLIBCXX_TEMPLATE_ARGS)>::target() const  {    if (typeid(_Functor) == target_type() && _M_manager)      {        _Any_data __ptr;        _M_manager(__ptr, _M_functor, __get_functor_ptr);        return __ptr._M_access<const _Functor*>();      }    else      {        return 0;      }  }

⌨️ 快捷键说明

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