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

📄 _function_base.h

📁 MONA是为数不多的C++语言编写的一个很小的操作系统
💻 H
字号:
/* * * Copyright (c) 1994 * Hewlett-Packard Company * * Copyright (c) 1996-1998 * Silicon Graphics Computer Systems, Inc. * * Copyright (c) 1997 * Moscow Center for SPARC Technology * * Copyright (c) 1999  * Boris Fomitchev * * This material is provided "as is", with absolutely no warranty expressed * or implied. Any use is at your own risk. * * Permission to use or copy this software for any purpose is hereby granted  * without fee, provided the above notices are retained on all copies. * Permission to modify the code and to distribute modified code is granted, * provided the above notices are retained, and a notice that the code was * modified is included with the above copyright notice. * *//* NOTE: This is an internal header file, included by other STL headers. *   You should not attempt to use it directly. */#ifndef _STLP_INTERNAL_FUNCTION_BASE_H#define _STLP_INTERNAL_FUNCTION_BASE_H#ifndef _STLP_CONFIG_H#include <stl/_config.h>#endif_STLP_BEGIN_NAMESPACEtemplate <class _Arg, class _Result>struct unary_function {  typedef _Arg argument_type;  typedef _Result result_type;};template <class _Arg1, class _Arg2, class _Result>struct binary_function {  typedef _Arg1 first_argument_type;  typedef _Arg2 second_argument_type;  typedef _Result result_type;};      template <class _Tp>struct equal_to : public binary_function<_Tp,_Tp,bool> {  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x == __y; }};template <class _Tp>struct not_equal_to : public binary_function<_Tp,_Tp,bool> {  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x != __y; }};template <class _Tp>struct greater : public binary_function<_Tp,_Tp,bool> {  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x > __y; }};template <class _Tp>struct less : public binary_function<_Tp,_Tp,bool> {  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x < __y; }};template <class _Tp>struct greater_equal : public binary_function<_Tp,_Tp,bool>{  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x >= __y; }};template <class _Tp>struct less_equal : public binary_function<_Tp,_Tp,bool> {  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x <= __y; }};template <class _Tp>less<_Tp> __less(_Tp* ) { return less<_Tp>(); }template <class _Tp>equal_to<_Tp> __equal_to(_Tp* ) { return equal_to<_Tp>(); }template <class _Tp>struct plus : public binary_function<_Tp,_Tp,_Tp> {  _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x + __y; }};template <class _Tp>struct minus : public binary_function<_Tp,_Tp,_Tp> {  _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x - __y; }};template <class _Tp>plus<_Tp> __plus(_Tp* ) { return plus<_Tp>(); }template <class _Tp>minus<_Tp> __minus(_Tp* ) { return minus<_Tp>(); }template <class _Tp>struct multiplies : public binary_function<_Tp,_Tp,_Tp> {  _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x * __y; }};template <class _Tp>struct divides : public binary_function<_Tp,_Tp,_Tp> {  _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x / __y; }};template <class _Tp>struct modulus : public binary_function<_Tp,_Tp,_Tp> {  _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x % __y; }};template <class _Tp>struct negate : public unary_function<_Tp,_Tp> {  _Tp operator()(const _Tp& __x) const { return -__x; }};template <class _Tp>struct logical_and : public binary_function<_Tp,_Tp,bool>{  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x && __y; }};template <class _Tp>struct logical_or : public binary_function<_Tp,_Tp,bool>{  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x || __y; }};template <class _Tp>struct logical_not : public unary_function<_Tp,bool>{  bool operator()(const _Tp& __x) const { return !__x; }};template <class _Pair>struct _Select1st : public unary_function<_Pair, typename _Pair::first_type> {  const typename _Pair::first_type& operator()(const _Pair& __x) const {    return __x.first;  }};template <class _Pair>struct _Select2nd : public unary_function<_Pair, typename _Pair::second_type>{  const typename _Pair::second_type& operator()(const _Pair& __x) const {    return __x.second;  }};// project1st and project2nd are extensions: they are not part of the standardtemplate <class _Arg1, class _Arg2>struct _Project1st : public binary_function<_Arg1, _Arg2, _Arg1> {  _Arg1 operator()(const _Arg1& __x, const _Arg2&) const { return __x; }};template <class _Arg1, class _Arg2>struct _Project2nd : public binary_function<_Arg1, _Arg2, _Arg2> {  _Arg2 operator()(const _Arg1&, const _Arg2& __y) const { return __y; }};#ifdef _STLP_MULTI_CONST_TEMPLATE_ARG_BUG// fbp : sort of select1st just for mapstemplate <class _Pair, class _Whatever>		// JDJ (CW Pro1 doesn't like const when first_type is also const)struct __Select1st_hint : public unary_function<_Pair, _Whatever> {    const _Whatever& operator () (const _Pair& __x) const { return __x.first; }};# define  _STLP_SELECT1ST(__x,__y) __Select1st_hint< __x, __y ># else# define  _STLP_SELECT1ST(__x, __y) _Select1st< __x ># endiftemplate <class _Tp>struct _Identity : public unary_function<_Tp,_Tp> {  const _Tp& operator()(const _Tp& __x) const { return __x; }};template <class _Result, class _Argument>struct _Constant_unary_fun {  typedef _Argument argument_type;  typedef  _Result  result_type;  result_type _M_val;  _Constant_unary_fun(const result_type& __v) : _M_val(__v) {}  const result_type& operator()(const _Argument&) const { return _M_val; }};template <class _Result, class _Arg1, class _Arg2>struct _Constant_binary_fun {  typedef  _Arg1   first_argument_type;  typedef  _Arg2   second_argument_type;  typedef  _Result result_type;  _Result _M_val;  _Constant_binary_fun(const _Result& __v) : _M_val(__v) {}  const result_type& operator()(const _Arg1&, const _Arg2&) const {    return _M_val;  }};// identity_element (not part of the C++ standard).template <class _Tp> inline _Tp __identity_element(plus<_Tp>) {  return _Tp(0); }template <class _Tp> inline _Tp __identity_element(multiplies<_Tp>) { return _Tp(1); }_STLP_END_NAMESPACE#endif /* _STLP_INTERNAL_FUNCTION_BASE_H */// Local Variables:// mode:C++// End:

⌨️ 快捷键说明

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