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