OpenCores
URL https://opencores.org/ocsvn/altor32/altor32/trunk

Subversion Repositories altor32

[/] [altor32/] [trunk/] [gcc-x64/] [or1knd-elf/] [or1knd-elf/] [include/] [c++/] [4.8.0/] [backward/] [binders.h] - Blame information for rev 35

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 35 ultra_embe
// Functor implementations -*- C++ -*-
2
 
3
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011
4
// Free Software Foundation, Inc.
5
//
6
// This file is part of the GNU ISO C++ Library.  This library is free
7
// software; you can redistribute it and/or modify it under the
8
// terms of the GNU General Public License as published by the
9
// Free Software Foundation; either version 3, or (at your option)
10
// any later version.
11
 
12
// This library is distributed in the hope that it will be useful,
13
// but WITHOUT ANY WARRANTY; without even the implied warranty of
14
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
// GNU General Public License for more details.
16
 
17
// Under Section 7 of GPL version 3, you are granted additional
18
// permissions described in the GCC Runtime Library Exception, version
19
// 3.1, as published by the Free Software Foundation.
20
 
21
// You should have received a copy of the GNU General Public License and
22
// a copy of the GCC Runtime Library Exception along with this program;
23
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
24
// <http://www.gnu.org/licenses/>.
25
 
26
/*
27
 *
28
 * Copyright (c) 1994
29
 * Hewlett-Packard Company
30
 *
31
 * Permission to use, copy, modify, distribute and sell this software
32
 * and its documentation for any purpose is hereby granted without fee,
33
 * provided that the above copyright notice appear in all copies and
34
 * that both that copyright notice and this permission notice appear
35
 * in supporting documentation.  Hewlett-Packard Company makes no
36
 * representations about the suitability of this software for any
37
 * purpose.  It is provided "as is" without express or implied warranty.
38
 *
39
 *
40
 * Copyright (c) 1996-1998
41
 * Silicon Graphics Computer Systems, Inc.
42
 *
43
 * Permission to use, copy, modify, distribute and sell this software
44
 * and its documentation for any purpose is hereby granted without fee,
45
 * provided that the above copyright notice appear in all copies and
46
 * that both that copyright notice and this permission notice appear
47
 * in supporting documentation.  Silicon Graphics makes no
48
 * representations about the suitability of this software for any
49
 * purpose.  It is provided "as is" without express or implied warranty.
50
 */
51
 
52
/** @file backward/binders.h
53
 *  This is an internal header file, included by other library headers.
54
 *  Do not attempt to use it directly. @headername{functional}
55
 */
56
 
57
#ifndef _BACKWARD_BINDERS_H
58
#define _BACKWARD_BINDERS_H 1
59
 
60
namespace std _GLIBCXX_VISIBILITY(default)
61
{
62
_GLIBCXX_BEGIN_NAMESPACE_VERSION
63
 
64
  // 20.3.6 binders
65
  /** @defgroup binders Binder Classes
66
   * @ingroup functors
67
   *
68
   *  Binders turn functions/functors with two arguments into functors
69
   *  with a single argument, storing an argument to be applied later.
70
   *  For example, a variable @c B of type @c binder1st is constructed
71
   *  from a functor @c f and an argument @c x. Later, B's @c
72
   *  operator() is called with a single argument @c y. The return
73
   *  value is the value of @c f(x,y). @c B can be @a called with
74
   *  various arguments (y1, y2, ...) and will in turn call @c
75
   *  f(x,y1), @c f(x,y2), ...
76
   *
77
   *  The function @c bind1st is provided to save some typing. It takes the
78
   *  function and an argument as parameters, and returns an instance of
79
   *  @c binder1st.
80
   *
81
   *  The type @c binder2nd and its creator function @c bind2nd do the same
82
   *  thing, but the stored argument is passed as the second parameter instead
83
   *  of the first, e.g., @c bind2nd(std::minus<float>(),1.3) will create a
84
   *  functor whose @c operator() accepts a floating-point number, subtracts
85
   *  1.3 from it, and returns the result. (If @c bind1st had been used,
86
   *  the functor would perform <em>1.3 - x</em> instead.
87
   *
88
   *  Creator-wrapper functions like @c bind1st are intended to be used in
89
   *  calling algorithms. Their return values will be temporary objects.
90
   *  (The goal is to not require you to type names like
91
   *  @c std::binder1st<std::plus<int>> for declaring a variable to hold the
92
   *  return value from @c bind1st(std::plus<int>(),5).
93
   *
94
   *  These become more useful when combined with the composition functions.
95
   *
96
   *  These functions are deprecated in C++11 and can be replaced by
97
   *  @c std::bind (or @c std::tr1::bind) which is more powerful and flexible,
98
   *  supporting functions with any number of arguments.  Uses of @c bind1st
99
   *  can be replaced by @c std::bind(f, x, std::placeholders::_1) and
100
   *  @c bind2nd by @c std::bind(f, std::placeholders::_1, x).
101
   *  @{
102
   */
103
  /// One of the @link binders binder functors@endlink.
104
  template<typename _Operation>
105
    class binder1st
106
    : public unary_function<typename _Operation::second_argument_type,
107
                            typename _Operation::result_type>
108
    {
109
    protected:
110
      _Operation op;
111
      typename _Operation::first_argument_type value;
112
 
113
    public:
114
      binder1st(const _Operation& __x,
115
                const typename _Operation::first_argument_type& __y)
116
      : op(__x), value(__y) { }
117
 
118
      typename _Operation::result_type
119
      operator()(const typename _Operation::second_argument_type& __x) const
120
      { return op(value, __x); }
121
 
122
      // _GLIBCXX_RESOLVE_LIB_DEFECTS
123
      // 109.  Missing binders for non-const sequence elements
124
      typename _Operation::result_type
125
      operator()(typename _Operation::second_argument_type& __x) const
126
      { return op(value, __x); }
127
    } _GLIBCXX_DEPRECATED;
128
 
129
  /// One of the @link binders binder functors@endlink.
130
  template<typename _Operation, typename _Tp>
131
    inline binder1st<_Operation>
132
    bind1st(const _Operation& __fn, const _Tp& __x)
133
    {
134
      typedef typename _Operation::first_argument_type _Arg1_type;
135
      return binder1st<_Operation>(__fn, _Arg1_type(__x));
136
    }
137
 
138
  /// One of the @link binders binder functors@endlink.
139
  template<typename _Operation>
140
    class binder2nd
141
    : public unary_function<typename _Operation::first_argument_type,
142
                            typename _Operation::result_type>
143
    {
144
    protected:
145
      _Operation op;
146
      typename _Operation::second_argument_type value;
147
 
148
    public:
149
      binder2nd(const _Operation& __x,
150
                const typename _Operation::second_argument_type& __y)
151
      : op(__x), value(__y) { }
152
 
153
      typename _Operation::result_type
154
      operator()(const typename _Operation::first_argument_type& __x) const
155
      { return op(__x, value); }
156
 
157
      // _GLIBCXX_RESOLVE_LIB_DEFECTS
158
      // 109.  Missing binders for non-const sequence elements
159
      typename _Operation::result_type
160
      operator()(typename _Operation::first_argument_type& __x) const
161
      { return op(__x, value); }
162
    } _GLIBCXX_DEPRECATED;
163
 
164
  /// One of the @link binders binder functors@endlink.
165
  template<typename _Operation, typename _Tp>
166
    inline binder2nd<_Operation>
167
    bind2nd(const _Operation& __fn, const _Tp& __x)
168
    {
169
      typedef typename _Operation::second_argument_type _Arg2_type;
170
      return binder2nd<_Operation>(__fn, _Arg2_type(__x));
171
    }
172
  /** @}  */
173
 
174
_GLIBCXX_END_NAMESPACE_VERSION
175
} // namespace
176
 
177
#endif /* _BACKWARD_BINDERS_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.