| 1 | // | 
|---|
| 2 | //  bind/bind_template.hpp | 
|---|
| 3 | // | 
|---|
| 4 | //  Do not include this header directly. | 
|---|
| 5 | // | 
|---|
| 6 | //  Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd. | 
|---|
| 7 | // | 
|---|
| 8 | // Distributed under the Boost Software License, Version 1.0. (See | 
|---|
| 9 | // accompanying file LICENSE_1_0.txt or copy at | 
|---|
| 10 | // http://www.boost.org/LICENSE_1_0.txt) | 
|---|
| 11 | // | 
|---|
| 12 | //  See http://www.boost.org/libs/bind/bind.html for documentation. | 
|---|
| 13 | // | 
|---|
| 14 |  | 
|---|
| 15 | typedef typename result_traits<R, F>::type result_type; | 
|---|
| 16 |  | 
|---|
| 17 | result_type operator()() | 
|---|
| 18 | { | 
|---|
| 19 | list0 a; | 
|---|
| 20 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 21 | } | 
|---|
| 22 |  | 
|---|
| 23 | result_type operator()() const | 
|---|
| 24 | { | 
|---|
| 25 | list0 a; | 
|---|
| 26 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 27 | } | 
|---|
| 28 |  | 
|---|
| 29 | template<class A1> result_type operator()(A1 & a1) | 
|---|
| 30 | { | 
|---|
| 31 | list1<A1 &> a(a1); | 
|---|
| 32 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 33 | } | 
|---|
| 34 |  | 
|---|
| 35 | template<class A1> result_type operator()(A1 & a1) const | 
|---|
| 36 | { | 
|---|
| 37 | list1<A1 &> a(a1); | 
|---|
| 38 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 39 | } | 
|---|
| 40 |  | 
|---|
| 41 | template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) | 
|---|
| 42 | { | 
|---|
| 43 | list2<A1 &, A2 &> a(a1, a2); | 
|---|
| 44 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 45 | } | 
|---|
| 46 |  | 
|---|
| 47 | template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) const | 
|---|
| 48 | { | 
|---|
| 49 | list2<A1 &, A2 &> a(a1, a2); | 
|---|
| 50 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 51 | } | 
|---|
| 52 |  | 
|---|
| 53 | template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) | 
|---|
| 54 | { | 
|---|
| 55 | list3<A1 &, A2 &, A3 &> a(a1, a2, a3); | 
|---|
| 56 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 57 | } | 
|---|
| 58 |  | 
|---|
| 59 | template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) const | 
|---|
| 60 | { | 
|---|
| 61 | list3<A1 &, A2 &, A3 &> a(a1, a2, a3); | 
|---|
| 62 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 63 | } | 
|---|
| 64 |  | 
|---|
| 65 | template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) | 
|---|
| 66 | { | 
|---|
| 67 | list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4); | 
|---|
| 68 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 69 | } | 
|---|
| 70 |  | 
|---|
| 71 | template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const | 
|---|
| 72 | { | 
|---|
| 73 | list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4); | 
|---|
| 74 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 75 | } | 
|---|
| 76 |  | 
|---|
| 77 | template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) | 
|---|
| 78 | { | 
|---|
| 79 | list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5); | 
|---|
| 80 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 81 | } | 
|---|
| 82 |  | 
|---|
| 83 | template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const | 
|---|
| 84 | { | 
|---|
| 85 | list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5); | 
|---|
| 86 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 87 | } | 
|---|
| 88 |  | 
|---|
| 89 | template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) | 
|---|
| 90 | { | 
|---|
| 91 | list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6); | 
|---|
| 92 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 93 | } | 
|---|
| 94 |  | 
|---|
| 95 | template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const | 
|---|
| 96 | { | 
|---|
| 97 | list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6); | 
|---|
| 98 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 99 | } | 
|---|
| 100 |  | 
|---|
| 101 | template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) | 
|---|
| 102 | { | 
|---|
| 103 | list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7); | 
|---|
| 104 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 105 | } | 
|---|
| 106 |  | 
|---|
| 107 | template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const | 
|---|
| 108 | { | 
|---|
| 109 | list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7); | 
|---|
| 110 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 111 | } | 
|---|
| 112 |  | 
|---|
| 113 | template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) | 
|---|
| 114 | { | 
|---|
| 115 | list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8); | 
|---|
| 116 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 117 | } | 
|---|
| 118 |  | 
|---|
| 119 | template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const | 
|---|
| 120 | { | 
|---|
| 121 | list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8); | 
|---|
| 122 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 123 | } | 
|---|
| 124 |  | 
|---|
| 125 | template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) | 
|---|
| 126 | { | 
|---|
| 127 | list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9); | 
|---|
| 128 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 129 | } | 
|---|
| 130 |  | 
|---|
| 131 | template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const | 
|---|
| 132 | { | 
|---|
| 133 | list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9); | 
|---|
| 134 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 135 | } | 
|---|
| 136 |  | 
|---|
| 137 | template<class A> result_type eval(A & a) | 
|---|
| 138 | { | 
|---|
| 139 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 140 | } | 
|---|
| 141 |  | 
|---|
| 142 | template<class A> result_type eval(A & a) const | 
|---|
| 143 | { | 
|---|
| 144 | BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); | 
|---|
| 145 | } | 
|---|
| 146 |  | 
|---|
| 147 | template<class V> void accept(V & v) const | 
|---|
| 148 | { | 
|---|
| 149 | BOOST_BIND_VISIT_EACH(v, f_, 0); | 
|---|
| 150 | l_.accept(v); | 
|---|
| 151 | } | 
|---|
| 152 |  | 
|---|
| 153 | bool compare(this_type const & rhs) const | 
|---|
| 154 | { | 
|---|
| 155 | return ref_compare(f_, rhs.f_, 0) && l_ == rhs.l_; | 
|---|
| 156 | } | 
|---|
| 157 |  | 
|---|
| 158 | private: | 
|---|
| 159 |  | 
|---|
| 160 | F f_; | 
|---|
| 161 | L l_; | 
|---|