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

Side by Side Diff: base/bind_internal.h

Issue 2401623002: Fix base::Callback<>::IsCancelled handling on nested base::Callback (Closed)
Patch Set: fix Created 4 years, 2 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 | « no previous file | base/bind_unittest.cc » ('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 #ifndef BASE_BIND_INTERNAL_H_ 5 #ifndef BASE_BIND_INTERNAL_H_
6 #define BASE_BIND_INTERNAL_H_ 6 #define BASE_BIND_INTERNAL_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include <tuple> 10 #include <tuple>
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 typename std::enable_if<IsWeakMethod<FunctorTraits<Functor>::is_method, 404 typename std::enable_if<IsWeakMethod<FunctorTraits<Functor>::is_method,
405 BoundArgs...>::value>::type> { 405 BoundArgs...>::value>::type> {
406 static constexpr bool is_cancellable = true; 406 static constexpr bool is_cancellable = true;
407 static bool Run(const BindStateBase* base) { 407 static bool Run(const BindStateBase* base) {
408 using BindStateType = BindState<Functor, BoundArgs...>; 408 using BindStateType = BindState<Functor, BoundArgs...>;
409 const BindStateType* bind_state = static_cast<const BindStateType*>(base); 409 const BindStateType* bind_state = static_cast<const BindStateType*>(base);
410 return !base::get<0>(bind_state->bound_args_); 410 return !base::get<0>(bind_state->bound_args_);
411 } 411 }
412 }; 412 };
413 413
414 template <typename Signature, typename... BoundArgs> 414 template <typename Signature,
415 struct CancellationChecker<BindState<Callback<Signature>, BoundArgs...>> { 415 typename... BoundArgs,
416 CopyMode copy_mode,
417 RepeatMode repeat_mode>
418 struct CancellationChecker<
419 BindState<Callback<Signature, copy_mode, repeat_mode>, BoundArgs...>> {
416 static constexpr bool is_cancellable = true; 420 static constexpr bool is_cancellable = true;
417 static bool Run(const BindStateBase* base) { 421 static bool Run(const BindStateBase* base) {
418 using Functor = Callback<Signature>; 422 using Functor = Callback<Signature, copy_mode, repeat_mode>;
419 using BindStateType = BindState<Functor, BoundArgs...>; 423 using BindStateType = BindState<Functor, BoundArgs...>;
420 const BindStateType* bind_state = static_cast<const BindStateType*>(base); 424 const BindStateType* bind_state = static_cast<const BindStateType*>(base);
421 return bind_state->functor_.IsCancelled(); 425 return bind_state->functor_.IsCancelled();
422 } 426 }
423 }; 427 };
424 428
425 // Template helpers to detect using Bind() on a base::Callback without any 429 // Template helpers to detect using Bind() on a base::Callback without any
426 // additional arguments. In that case, the original base::Callback object should 430 // additional arguments. In that case, the original base::Callback object should
427 // just be directly used. 431 // just be directly used.
428 template <typename Functor, typename... BoundArgs> 432 template <typename Functor, typename... BoundArgs>
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 549
546 // Returns a RunType of bound functor. 550 // Returns a RunType of bound functor.
547 // E.g. MakeUnboundRunType<R(A, B, C), A, B> is evaluated to R(C). 551 // E.g. MakeUnboundRunType<R(A, B, C), A, B> is evaluated to R(C).
548 template <typename Functor, typename... BoundArgs> 552 template <typename Functor, typename... BoundArgs>
549 using MakeUnboundRunType = 553 using MakeUnboundRunType =
550 typename internal::MakeUnboundRunTypeImpl<Functor, BoundArgs...>::Type; 554 typename internal::MakeUnboundRunTypeImpl<Functor, BoundArgs...>::Type;
551 555
552 } // namespace base 556 } // namespace base
553 557
554 #endif // BASE_BIND_INTERNAL_H_ 558 #endif // BASE_BIND_INTERNAL_H_
OLDNEW
« no previous file with comments | « no previous file | base/bind_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698