Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(160)

Side by Side Diff: base/bind_helpers.h

Issue 1774443002: Replace template_util.h stuff with C++11 <type_traits> (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: revert unrelated whitespace change Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/android/scoped_java_ref.h ('k') | base/bind_internal.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This defines a set of argument wrappers and related factory methods that 5 // This defines a set of argument wrappers and related factory methods that
6 // can be used specify the refcounting and reference semantics of arguments 6 // can be used specify the refcounting and reference semantics of arguments
7 // that are bound by the Bind() function in base/bind.h. 7 // that are bound by the Bind() function in base/bind.h.
8 // 8 //
9 // It also defines a set of simple functions and utilities that people want 9 // It also defines a set of simple functions and utilities that people want
10 // when using Callback<> and Bind(). 10 // when using Callback<> and Bind().
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 #ifndef BASE_BIND_HELPERS_H_ 143 #ifndef BASE_BIND_HELPERS_H_
144 #define BASE_BIND_HELPERS_H_ 144 #define BASE_BIND_HELPERS_H_
145 145
146 #include <stddef.h> 146 #include <stddef.h>
147 147
148 #include <type_traits> 148 #include <type_traits>
149 #include <utility> 149 #include <utility>
150 150
151 #include "base/callback.h" 151 #include "base/callback.h"
152 #include "base/memory/weak_ptr.h" 152 #include "base/memory/weak_ptr.h"
153 #include "base/template_util.h"
154 #include "build/build_config.h" 153 #include "build/build_config.h"
155 154
156 namespace base { 155 namespace base {
157 namespace internal { 156 namespace internal {
158 157
159 // Use the Substitution Failure Is Not An Error (SFINAE) trick to inspect T 158 // Use the Substitution Failure Is Not An Error (SFINAE) trick to inspect T
160 // for the existence of AddRef() and Release() functions of the correct 159 // for the existence of AddRef() and Release() functions of the correct
161 // signature. 160 // signature.
162 // 161 //
163 // http://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error 162 // http://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 template <typename > 254 template <typename >
256 static Yes& Check(...); 255 static Yes& Check(...);
257 256
258 public: 257 public:
259 enum { value = sizeof(Check<Base>(0)) == sizeof(Yes) }; 258 enum { value = sizeof(Check<Base>(0)) == sizeof(Yes) };
260 }; 259 };
261 260
262 // Helpers to assert that arguments of a recounted type are bound with a 261 // Helpers to assert that arguments of a recounted type are bound with a
263 // scoped_refptr. 262 // scoped_refptr.
264 template <bool IsClasstype, typename T> 263 template <bool IsClasstype, typename T>
265 struct UnsafeBindtoRefCountedArgHelper : false_type { 264 struct UnsafeBindtoRefCountedArgHelper : std::false_type {
266 }; 265 };
267 266
268 template <typename T> 267 template <typename T>
269 struct UnsafeBindtoRefCountedArgHelper<true, T> 268 struct UnsafeBindtoRefCountedArgHelper<true, T>
270 : integral_constant<bool, SupportsAddRefAndRelease<T>::value> { 269 : std::integral_constant<bool, SupportsAddRefAndRelease<T>::value> {
271 }; 270 };
272 271
273 template <typename T> 272 template <typename T>
274 struct UnsafeBindtoRefCountedArg : false_type { 273 struct UnsafeBindtoRefCountedArg : std::false_type {
275 }; 274 };
276 275
277 template <typename T> 276 template <typename T>
278 struct UnsafeBindtoRefCountedArg<T*> 277 struct UnsafeBindtoRefCountedArg<T*>
279 : UnsafeBindtoRefCountedArgHelper<is_class<T>::value, T> { 278 : UnsafeBindtoRefCountedArgHelper<std::is_class<T>::value, T> {
280 }; 279 };
281 280
282 template <typename T> 281 template <typename T>
283 class HasIsMethodTag { 282 class HasIsMethodTag {
284 using Yes = char[1]; 283 using Yes = char[1];
285 using No = char[2]; 284 using No = char[2];
286 285
287 template <typename U> 286 template <typename U>
288 static Yes& Check(typename U::IsMethod*); 287 static Yes& Check(typename U::IsMethod*);
289 288
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 } 425 }
427 426
428 // IsWeakMethod is a helper that determine if we are binding a WeakPtr<> to a 427 // IsWeakMethod is a helper that determine if we are binding a WeakPtr<> to a
429 // method. It is used internally by Bind() to select the correct 428 // method. It is used internally by Bind() to select the correct
430 // InvokeHelper that will no-op itself in the event the WeakPtr<> for 429 // InvokeHelper that will no-op itself in the event the WeakPtr<> for
431 // the target object is invalidated. 430 // the target object is invalidated.
432 // 431 //
433 // The first argument should be the type of the object that will be received by 432 // The first argument should be the type of the object that will be received by
434 // the method. 433 // the method.
435 template <bool IsMethod, typename... Args> 434 template <bool IsMethod, typename... Args>
436 struct IsWeakMethod : public false_type {}; 435 struct IsWeakMethod : public std::false_type {};
437 436
438 template <typename T, typename... Args> 437 template <typename T, typename... Args>
439 struct IsWeakMethod<true, WeakPtr<T>, Args...> : public true_type {}; 438 struct IsWeakMethod<true, WeakPtr<T>, Args...> : public std::true_type {};
440 439
441 template <typename T, typename... Args> 440 template <typename T, typename... Args>
442 struct IsWeakMethod<true, ConstRefWrapper<WeakPtr<T>>, Args...> 441 struct IsWeakMethod<true, ConstRefWrapper<WeakPtr<T>>, Args...>
443 : public true_type {}; 442 : public std::true_type {};
444 443
445 444
446 // Packs a list of types to hold them in a single type. 445 // Packs a list of types to hold them in a single type.
447 template <typename... Types> 446 template <typename... Types>
448 struct TypeList {}; 447 struct TypeList {};
449 448
450 // Used for DropTypeListItem implementation. 449 // Used for DropTypeListItem implementation.
451 template <size_t n, typename List> 450 template <size_t n, typename List>
452 struct DropTypeListItemImpl; 451 struct DropTypeListItemImpl;
453 452
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 BASE_EXPORT void DoNothing(); 589 BASE_EXPORT void DoNothing();
591 590
592 template<typename T> 591 template<typename T>
593 void DeletePointer(T* obj) { 592 void DeletePointer(T* obj) {
594 delete obj; 593 delete obj;
595 } 594 }
596 595
597 } // namespace base 596 } // namespace base
598 597
599 #endif // BASE_BIND_HELPERS_H_ 598 #endif // BASE_BIND_HELPERS_H_
OLDNEW
« no previous file with comments | « base/android/scoped_java_ref.h ('k') | base/bind_internal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698