| OLD | NEW |
| 1 // This file was GENERATED by command: | 1 // This file was GENERATED by command: |
| 2 // pump.py bind_internal.h.pump | 2 // pump.py bind_internal.h.pump |
| 3 // DO NOT EDIT BY HAND!!! | 3 // DO NOT EDIT BY HAND!!! |
| 4 | 4 |
| 5 | 5 |
| 6 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 6 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 7 // Use of this source code is governed by a BSD-style license that can be | 7 // Use of this source code is governed by a BSD-style license that can be |
| 8 // found in the LICENSE file. | 8 // found in the LICENSE file. |
| 9 | 9 |
| 10 #ifndef BASE_BIND_INTERNAL_H_ | 10 #ifndef BASE_BIND_INTERNAL_H_ |
| 11 #define BASE_BIND_INTERNAL_H_ | 11 #define BASE_BIND_INTERNAL_H_ |
| 12 #pragma once | 12 #pragma once |
| 13 | 13 |
| 14 #include "build/build_config.h" |
| 15 |
| 14 #include "base/bind_helpers.h" | 16 #include "base/bind_helpers.h" |
| 15 #include "base/callback_internal.h" | 17 #include "base/callback_internal.h" |
| 16 #include "base/template_util.h" | 18 #include "base/template_util.h" |
| 17 | 19 |
| 20 #if defined(OS_WIN) |
| 21 #include "base/bind_internal_win.h" |
| 22 #endif |
| 23 |
| 18 namespace base { | 24 namespace base { |
| 19 namespace internal { | 25 namespace internal { |
| 20 | 26 |
| 21 // The method by which a function is invoked is determined by 3 different | 27 // The method by which a function is invoked is determined by 3 different |
| 22 // dimensions: | 28 // dimensions: |
| 23 // | 29 // |
| 24 // 1) The type of function (normal or method). | 30 // 1) The type of function (normal or method). |
| 25 // 2) The arity of the function. | 31 // 2) The arity of the function. |
| 26 // 3) The number of bound parameters. | 32 // 3) The number of bound parameters. |
| 27 // | 33 // |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 // | 66 // |
| 61 // By normalizing the function signature, we reduce function_type to exactly 2. | 67 // By normalizing the function signature, we reduce function_type to exactly 2. |
| 62 | 68 |
| 63 template <typename Sig> | 69 template <typename Sig> |
| 64 struct FunctionTraits; | 70 struct FunctionTraits; |
| 65 | 71 |
| 66 // Function: Arity 0. | 72 // Function: Arity 0. |
| 67 template <typename R> | 73 template <typename R> |
| 68 struct FunctionTraits<R(*)()> { | 74 struct FunctionTraits<R(*)()> { |
| 69 typedef R (*NormalizedSig)(); | 75 typedef R (*NormalizedSig)(); |
| 70 typedef base::false_type IsMethod; | 76 typedef false_type IsMethod; |
| 71 }; | 77 }; |
| 72 | 78 |
| 73 // Method: Arity 0. | 79 // Method: Arity 0. |
| 74 template <typename R, typename T> | 80 template <typename R, typename T> |
| 75 struct FunctionTraits<R(T::*)()> { | 81 struct FunctionTraits<R(T::*)()> { |
| 76 typedef R (T::*NormalizedSig)(); | 82 typedef R (T::*NormalizedSig)(); |
| 77 typedef base::true_type IsMethod; | 83 typedef true_type IsMethod; |
| 78 }; | 84 }; |
| 79 | 85 |
| 80 // Const Method: Arity 0. | 86 // Const Method: Arity 0. |
| 81 template <typename R, typename T> | 87 template <typename R, typename T> |
| 82 struct FunctionTraits<R(T::*)() const> { | 88 struct FunctionTraits<R(T::*)() const> { |
| 83 typedef R (T::*NormalizedSig)(); | 89 typedef R (T::*NormalizedSig)(); |
| 84 typedef base::true_type IsMethod; | 90 typedef true_type IsMethod; |
| 85 }; | 91 }; |
| 86 | 92 |
| 87 // Function: Arity 1. | 93 // Function: Arity 1. |
| 88 template <typename R, typename X1> | 94 template <typename R, typename X1> |
| 89 struct FunctionTraits<R(*)(X1)> { | 95 struct FunctionTraits<R(*)(X1)> { |
| 90 typedef R (*NormalizedSig)(X1); | 96 typedef R (*NormalizedSig)(X1); |
| 91 typedef base::false_type IsMethod; | 97 typedef false_type IsMethod; |
| 92 }; | 98 }; |
| 93 | 99 |
| 94 // Method: Arity 1. | 100 // Method: Arity 1. |
| 95 template <typename R, typename T, typename X1> | 101 template <typename R, typename T, typename X1> |
| 96 struct FunctionTraits<R(T::*)(X1)> { | 102 struct FunctionTraits<R(T::*)(X1)> { |
| 97 typedef R (T::*NormalizedSig)(X1); | 103 typedef R (T::*NormalizedSig)(X1); |
| 98 typedef base::true_type IsMethod; | 104 typedef true_type IsMethod; |
| 99 }; | 105 }; |
| 100 | 106 |
| 101 // Const Method: Arity 1. | 107 // Const Method: Arity 1. |
| 102 template <typename R, typename T, typename X1> | 108 template <typename R, typename T, typename X1> |
| 103 struct FunctionTraits<R(T::*)(X1) const> { | 109 struct FunctionTraits<R(T::*)(X1) const> { |
| 104 typedef R (T::*NormalizedSig)(X1); | 110 typedef R (T::*NormalizedSig)(X1); |
| 105 typedef base::true_type IsMethod; | 111 typedef true_type IsMethod; |
| 106 }; | 112 }; |
| 107 | 113 |
| 108 // Function: Arity 2. | 114 // Function: Arity 2. |
| 109 template <typename R, typename X1, typename X2> | 115 template <typename R, typename X1, typename X2> |
| 110 struct FunctionTraits<R(*)(X1, X2)> { | 116 struct FunctionTraits<R(*)(X1, X2)> { |
| 111 typedef R (*NormalizedSig)(X1, X2); | 117 typedef R (*NormalizedSig)(X1, X2); |
| 112 typedef base::false_type IsMethod; | 118 typedef false_type IsMethod; |
| 113 }; | 119 }; |
| 114 | 120 |
| 115 // Method: Arity 2. | 121 // Method: Arity 2. |
| 116 template <typename R, typename T, typename X1, typename X2> | 122 template <typename R, typename T, typename X1, typename X2> |
| 117 struct FunctionTraits<R(T::*)(X1, X2)> { | 123 struct FunctionTraits<R(T::*)(X1, X2)> { |
| 118 typedef R (T::*NormalizedSig)(X1, X2); | 124 typedef R (T::*NormalizedSig)(X1, X2); |
| 119 typedef base::true_type IsMethod; | 125 typedef true_type IsMethod; |
| 120 }; | 126 }; |
| 121 | 127 |
| 122 // Const Method: Arity 2. | 128 // Const Method: Arity 2. |
| 123 template <typename R, typename T, typename X1, typename X2> | 129 template <typename R, typename T, typename X1, typename X2> |
| 124 struct FunctionTraits<R(T::*)(X1, X2) const> { | 130 struct FunctionTraits<R(T::*)(X1, X2) const> { |
| 125 typedef R (T::*NormalizedSig)(X1, X2); | 131 typedef R (T::*NormalizedSig)(X1, X2); |
| 126 typedef base::true_type IsMethod; | 132 typedef true_type IsMethod; |
| 127 }; | 133 }; |
| 128 | 134 |
| 129 // Function: Arity 3. | 135 // Function: Arity 3. |
| 130 template <typename R, typename X1, typename X2, typename X3> | 136 template <typename R, typename X1, typename X2, typename X3> |
| 131 struct FunctionTraits<R(*)(X1, X2, X3)> { | 137 struct FunctionTraits<R(*)(X1, X2, X3)> { |
| 132 typedef R (*NormalizedSig)(X1, X2, X3); | 138 typedef R (*NormalizedSig)(X1, X2, X3); |
| 133 typedef base::false_type IsMethod; | 139 typedef false_type IsMethod; |
| 134 }; | 140 }; |
| 135 | 141 |
| 136 // Method: Arity 3. | 142 // Method: Arity 3. |
| 137 template <typename R, typename T, typename X1, typename X2, typename X3> | 143 template <typename R, typename T, typename X1, typename X2, typename X3> |
| 138 struct FunctionTraits<R(T::*)(X1, X2, X3)> { | 144 struct FunctionTraits<R(T::*)(X1, X2, X3)> { |
| 139 typedef R (T::*NormalizedSig)(X1, X2, X3); | 145 typedef R (T::*NormalizedSig)(X1, X2, X3); |
| 140 typedef base::true_type IsMethod; | 146 typedef true_type IsMethod; |
| 141 }; | 147 }; |
| 142 | 148 |
| 143 // Const Method: Arity 3. | 149 // Const Method: Arity 3. |
| 144 template <typename R, typename T, typename X1, typename X2, typename X3> | 150 template <typename R, typename T, typename X1, typename X2, typename X3> |
| 145 struct FunctionTraits<R(T::*)(X1, X2, X3) const> { | 151 struct FunctionTraits<R(T::*)(X1, X2, X3) const> { |
| 146 typedef R (T::*NormalizedSig)(X1, X2, X3); | 152 typedef R (T::*NormalizedSig)(X1, X2, X3); |
| 147 typedef base::true_type IsMethod; | 153 typedef true_type IsMethod; |
| 148 }; | 154 }; |
| 149 | 155 |
| 150 // Function: Arity 4. | 156 // Function: Arity 4. |
| 151 template <typename R, typename X1, typename X2, typename X3, typename X4> | 157 template <typename R, typename X1, typename X2, typename X3, typename X4> |
| 152 struct FunctionTraits<R(*)(X1, X2, X3, X4)> { | 158 struct FunctionTraits<R(*)(X1, X2, X3, X4)> { |
| 153 typedef R (*NormalizedSig)(X1, X2, X3, X4); | 159 typedef R (*NormalizedSig)(X1, X2, X3, X4); |
| 154 typedef base::false_type IsMethod; | 160 typedef false_type IsMethod; |
| 155 }; | 161 }; |
| 156 | 162 |
| 157 // Method: Arity 4. | 163 // Method: Arity 4. |
| 158 template <typename R, typename T, typename X1, typename X2, typename X3, | 164 template <typename R, typename T, typename X1, typename X2, typename X3, |
| 159 typename X4> | 165 typename X4> |
| 160 struct FunctionTraits<R(T::*)(X1, X2, X3, X4)> { | 166 struct FunctionTraits<R(T::*)(X1, X2, X3, X4)> { |
| 161 typedef R (T::*NormalizedSig)(X1, X2, X3, X4); | 167 typedef R (T::*NormalizedSig)(X1, X2, X3, X4); |
| 162 typedef base::true_type IsMethod; | 168 typedef true_type IsMethod; |
| 163 }; | 169 }; |
| 164 | 170 |
| 165 // Const Method: Arity 4. | 171 // Const Method: Arity 4. |
| 166 template <typename R, typename T, typename X1, typename X2, typename X3, | 172 template <typename R, typename T, typename X1, typename X2, typename X3, |
| 167 typename X4> | 173 typename X4> |
| 168 struct FunctionTraits<R(T::*)(X1, X2, X3, X4) const> { | 174 struct FunctionTraits<R(T::*)(X1, X2, X3, X4) const> { |
| 169 typedef R (T::*NormalizedSig)(X1, X2, X3, X4); | 175 typedef R (T::*NormalizedSig)(X1, X2, X3, X4); |
| 170 typedef base::true_type IsMethod; | 176 typedef true_type IsMethod; |
| 171 }; | 177 }; |
| 172 | 178 |
| 173 // Function: Arity 5. | 179 // Function: Arity 5. |
| 174 template <typename R, typename X1, typename X2, typename X3, typename X4, | 180 template <typename R, typename X1, typename X2, typename X3, typename X4, |
| 175 typename X5> | 181 typename X5> |
| 176 struct FunctionTraits<R(*)(X1, X2, X3, X4, X5)> { | 182 struct FunctionTraits<R(*)(X1, X2, X3, X4, X5)> { |
| 177 typedef R (*NormalizedSig)(X1, X2, X3, X4, X5); | 183 typedef R (*NormalizedSig)(X1, X2, X3, X4, X5); |
| 178 typedef base::false_type IsMethod; | 184 typedef false_type IsMethod; |
| 179 }; | 185 }; |
| 180 | 186 |
| 181 // Method: Arity 5. | 187 // Method: Arity 5. |
| 182 template <typename R, typename T, typename X1, typename X2, typename X3, | 188 template <typename R, typename T, typename X1, typename X2, typename X3, |
| 183 typename X4, typename X5> | 189 typename X4, typename X5> |
| 184 struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5)> { | 190 struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5)> { |
| 185 typedef R (T::*NormalizedSig)(X1, X2, X3, X4, X5); | 191 typedef R (T::*NormalizedSig)(X1, X2, X3, X4, X5); |
| 186 typedef base::true_type IsMethod; | 192 typedef true_type IsMethod; |
| 187 }; | 193 }; |
| 188 | 194 |
| 189 // Const Method: Arity 5. | 195 // Const Method: Arity 5. |
| 190 template <typename R, typename T, typename X1, typename X2, typename X3, | 196 template <typename R, typename T, typename X1, typename X2, typename X3, |
| 191 typename X4, typename X5> | 197 typename X4, typename X5> |
| 192 struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5) const> { | 198 struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5) const> { |
| 193 typedef R (T::*NormalizedSig)(X1, X2, X3, X4, X5); | 199 typedef R (T::*NormalizedSig)(X1, X2, X3, X4, X5); |
| 194 typedef base::true_type IsMethod; | 200 typedef true_type IsMethod; |
| 195 }; | 201 }; |
| 196 | 202 |
| 197 // Function: Arity 6. | 203 // Function: Arity 6. |
| 198 template <typename R, typename X1, typename X2, typename X3, typename X4, | 204 template <typename R, typename X1, typename X2, typename X3, typename X4, |
| 199 typename X5, typename X6> | 205 typename X5, typename X6> |
| 200 struct FunctionTraits<R(*)(X1, X2, X3, X4, X5, X6)> { | 206 struct FunctionTraits<R(*)(X1, X2, X3, X4, X5, X6)> { |
| 201 typedef R (*NormalizedSig)(X1, X2, X3, X4, X5, X6); | 207 typedef R (*NormalizedSig)(X1, X2, X3, X4, X5, X6); |
| 202 typedef base::false_type IsMethod; | 208 typedef false_type IsMethod; |
| 203 }; | 209 }; |
| 204 | 210 |
| 205 // Method: Arity 6. | 211 // Method: Arity 6. |
| 206 template <typename R, typename T, typename X1, typename X2, typename X3, | 212 template <typename R, typename T, typename X1, typename X2, typename X3, |
| 207 typename X4, typename X5, typename X6> | 213 typename X4, typename X5, typename X6> |
| 208 struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5, X6)> { | 214 struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5, X6)> { |
| 209 typedef R (T::*NormalizedSig)(X1, X2, X3, X4, X5, X6); | 215 typedef R (T::*NormalizedSig)(X1, X2, X3, X4, X5, X6); |
| 210 typedef base::true_type IsMethod; | 216 typedef true_type IsMethod; |
| 211 }; | 217 }; |
| 212 | 218 |
| 213 // Const Method: Arity 6. | 219 // Const Method: Arity 6. |
| 214 template <typename R, typename T, typename X1, typename X2, typename X3, | 220 template <typename R, typename T, typename X1, typename X2, typename X3, |
| 215 typename X4, typename X5, typename X6> | 221 typename X4, typename X5, typename X6> |
| 216 struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5, X6) const> { | 222 struct FunctionTraits<R(T::*)(X1, X2, X3, X4, X5, X6) const> { |
| 217 typedef R (T::*NormalizedSig)(X1, X2, X3, X4, X5, X6); | 223 typedef R (T::*NormalizedSig)(X1, X2, X3, X4, X5, X6); |
| 218 typedef base::true_type IsMethod; | 224 typedef true_type IsMethod; |
| 219 }; | 225 }; |
| 220 | 226 |
| 221 // InvokerN<> | 227 // InvokerN<> |
| 222 // | 228 // |
| 223 // The InvokerN templates contain a static DoInvoke() function that is the key | 229 // The InvokerN templates contain a static DoInvoke() function that is the key |
| 224 // to implementing type erasure in the Callback() classes. | 230 // to implementing type erasure in the Callback() classes. |
| 225 // | 231 // |
| 226 // DoInvoke() is a static function with a fixed signature that is independent | 232 // DoInvoke() is a static function with a fixed signature that is independent |
| 227 // of StorageType; its first argument is a pointer to the non-templated common | 233 // of StorageType; its first argument is a pointer to the non-templated common |
| 228 // baseclass of StorageType. This lets us store pointer to DoInvoke() in a | 234 // baseclass of StorageType. This lets us store pointer to DoInvoke() in a |
| (...skipping 1149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1378 typename BindType<P3>::StorageType p3_; | 1384 typename BindType<P3>::StorageType p3_; |
| 1379 typename BindType<P4>::StorageType p4_; | 1385 typename BindType<P4>::StorageType p4_; |
| 1380 typename BindType<P5>::StorageType p5_; | 1386 typename BindType<P5>::StorageType p5_; |
| 1381 typename BindType<P6>::StorageType p6_; | 1387 typename BindType<P6>::StorageType p6_; |
| 1382 }; | 1388 }; |
| 1383 | 1389 |
| 1384 } // namespace internal | 1390 } // namespace internal |
| 1385 } // namespace base | 1391 } // namespace base |
| 1386 | 1392 |
| 1387 #endif // BASE_BIND_INTERNAL_H_ | 1393 #endif // BASE_BIND_INTERNAL_H_ |
| OLD | NEW |