177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* 277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1994 477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Hewlett-Packard Company 577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1996-1998 777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Silicon Graphics Computer Systems, Inc. 877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1997 1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Moscow Center for SPARC Technology 1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999 1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Boris Fomitchev 1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This material is provided "as is", with absolutely no warranty expressed 1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * or implied. Any use is at your own risk. 1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to use or copy this software for any purpose is hereby granted 1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * without fee, provided the above notices are retained on all copies. 2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to modify the code and to distribute modified code is granted, 2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * provided the above notices are retained, and a notice that the code was 2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * modified is included with the above copyright notice. 2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* NOTE: This is an internal header file, included by other STL headers. 2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * You should not attempt to use it directly. 2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_FUNCTION_BASE_H 3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _STLP_INTERNAL_FUNCTION_BASE_H 3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) && !defined (_STLP_TYPE_TRAITS_H) 3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stl/type_traits.h> 3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE 3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Arg, class _Result> 4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct unary_function { 4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef _Arg argument_type; 4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef _Result result_type; 4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (__BORLANDC__) || (__BORLANDC__ < 0x580) 4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprotected: 4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner /* This class purpose is to be derived but it is not polymorphic so users should never try 4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * to destroy an instance of it directly. The protected non-virtual destructor make this 4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * fact obvious at compilation time. */ 4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ~unary_function() {} 4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Arg1, class _Arg2, class _Result> 5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct binary_function { 5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef _Arg1 first_argument_type; 5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef _Arg2 second_argument_type; 5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef _Result result_type; 5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (__BORLANDC__) || (__BORLANDC__ < 0x580) 5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprotected: 5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner /* See unary_function comment. */ 6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ~binary_function() {} 6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp> 6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct equal_to : public binary_function<_Tp, _Tp, bool> { 6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bool operator()(const _Tp& __x, const _Tp& __y) const { return __x == __y; } 6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp> 7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct less : public binary_function<_Tp,_Tp,bool> 7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* less is the default template parameter for many STL containers, to fully use 7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * the move constructor feature we need to know that the default less is just a 7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * functor. 7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner , public __stlport_class<less<_Tp> > 7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ 7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bool operator()(const _Tp& __x, const _Tp& __y) const { return __x < __y; } 8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void _M_swap_workaround(less<_Tp>& __x) {} 8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp> 8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct __type_traits<less<_Tp> > { 8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (__BORLANDC__) 9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef typename _IsSTLportClass<less<_Tp> >::_Ret _STLportLess; 9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else 9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner enum { _Is = _IsSTLportClass<less<_Tp> >::_Is }; 9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef typename __bool2type<_Is>::_Ret _STLportLess; 9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef _STLportLess has_trivial_default_constructor; 9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef _STLportLess has_trivial_copy_constructor; 9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef _STLportLess has_trivial_assignment_operator; 9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef _STLportLess has_trivial_destructor; 9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef _STLportLess is_POD_type; 10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE 10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp> 10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerless<_Tp> __less(_Tp* ) { return less<_Tp>(); } 10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp> 10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerequal_to<_Tp> __equal_to(_Tp* ) { return equal_to<_Tp>(); } 11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE 11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp> 11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct plus : public binary_function<_Tp, _Tp, _Tp> { 11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x + __y; } 11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp> 11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct minus : public binary_function<_Tp, _Tp, _Tp> { 12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x - __y; } 12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE 12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp> 12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerplus<_Tp> __plus(_Tp* ) { return plus<_Tp>(); } 12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp> 12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerminus<_Tp> __minus(_Tp* ) { return minus<_Tp>(); } 13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE 13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp> 13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct multiplies : public binary_function<_Tp, _Tp, _Tp> { 13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x * __y; } 13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE 13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Pair> 14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct _Select1st : public unary_function<_Pair, typename _Pair::first_type> { 14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const typename _Pair::first_type& operator()(const _Pair& __x) const { 14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return __x.first; 14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 14677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Pair> 14877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct _Select2nd : public unary_function<_Pair, typename _Pair::second_type> { 14977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const typename _Pair::second_type& operator()(const _Pair& __x) const { 15077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return __x.second; 15177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 15277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 15377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 15477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// project1st and project2nd are extensions: they are not part of the standard 15577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Arg1, class _Arg2> 15677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct _Project1st : public binary_function<_Arg1, _Arg2, _Arg1> { 15777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Arg1 operator()(const _Arg1& __x, const _Arg2&) const { return __x; } 15877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 15977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 16077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Arg1, class _Arg2> 16177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct _Project2nd : public binary_function<_Arg1, _Arg2, _Arg2> { 16277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Arg2 operator()(const _Arg1&, const _Arg2& __y) const { return __y; } 16377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 16477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 16577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_MULTI_CONST_TEMPLATE_ARG_BUG) 16677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// fbp : sort of select1st just for maps 16777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Pair, class _Whatever> 16877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// JDJ (CW Pro1 doesn't like const when first_type is also const) 16977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct __Select1st_hint : public unary_function<_Pair, _Whatever> { 17077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const _Whatever& operator () (const _Pair& __x) const { return __x.first; } 17177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 17277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_SELECT1ST(__x,__y) _STLP_PRIV __Select1st_hint< __x, __y > 17377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else 17477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_SELECT1ST(__x, __y) _STLP_PRIV _Select1st< __x > 17577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 17677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 17777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp> 17877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct _Identity : public unary_function<_Tp,_Tp> { 17977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const _Tp& operator()(const _Tp& __x) const { return __x; } 18077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 18177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 18277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Result, class _Argument> 18377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct _Constant_unary_fun { 18477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef _Argument argument_type; 18577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef _Result result_type; 18677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner result_type _M_val; 18777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 18877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Constant_unary_fun(const result_type& __v) : _M_val(__v) {} 18977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const result_type& operator()(const _Argument&) const { return _M_val; } 19077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 19177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 19277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Result, class _Arg1, class _Arg2> 19377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct _Constant_binary_fun { 19477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef _Arg1 first_argument_type; 19577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef _Arg2 second_argument_type; 19677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef _Result result_type; 19777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Result _M_val; 19877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 19977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Constant_binary_fun(const _Result& __v) : _M_val(__v) {} 20077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const result_type& operator()(const _Arg1&, const _Arg2&) const { 20177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return _M_val; 20277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 20377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 20477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 20577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// identity_element (not part of the C++ standard). 20677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp> inline _Tp __identity_element(plus<_Tp>) { return _Tp(0); } 20777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp> inline _Tp __identity_element(multiplies<_Tp>) { return _Tp(1); } 20877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 20977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE 21077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 21177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE 21277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 21377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_INTERNAL_FUNCTION_BASE_H */ 21477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 21577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Local Variables: 21677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// mode:C++ 21777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// End: 218