1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker #include "base/functional/callback_internal.h"
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker #include "base/check.h"
8*6777b538SAndroid Build Coastguard Worker #include "base/notreached.h"
9*6777b538SAndroid Build Coastguard Worker #include "base/types/cxx23_to_underlying.h"
10*6777b538SAndroid Build Coastguard Worker
11*6777b538SAndroid Build Coastguard Worker namespace base {
12*6777b538SAndroid Build Coastguard Worker namespace internal {
13*6777b538SAndroid Build Coastguard Worker
14*6777b538SAndroid Build Coastguard Worker namespace {
15*6777b538SAndroid Build Coastguard Worker
QueryCancellationTraitsForNonCancellables(const BindStateBase *,BindStateBase::CancellationQueryMode mode)16*6777b538SAndroid Build Coastguard Worker bool QueryCancellationTraitsForNonCancellables(
17*6777b538SAndroid Build Coastguard Worker const BindStateBase*,
18*6777b538SAndroid Build Coastguard Worker BindStateBase::CancellationQueryMode mode) {
19*6777b538SAndroid Build Coastguard Worker // Non-cancellables are never cancelled and always valid, which means the
20*6777b538SAndroid Build Coastguard Worker // response for each mode is the same as its underlying value.
21*6777b538SAndroid Build Coastguard Worker return to_underlying(mode);
22*6777b538SAndroid Build Coastguard Worker }
23*6777b538SAndroid Build Coastguard Worker
24*6777b538SAndroid Build Coastguard Worker } // namespace
25*6777b538SAndroid Build Coastguard Worker
Destruct(const BindStateBase * bind_state)26*6777b538SAndroid Build Coastguard Worker void BindStateBaseRefCountTraits::Destruct(const BindStateBase* bind_state) {
27*6777b538SAndroid Build Coastguard Worker bind_state->destructor_(bind_state);
28*6777b538SAndroid Build Coastguard Worker }
29*6777b538SAndroid Build Coastguard Worker
BindStateBase(InvokeFuncStorage polymorphic_invoke,DestructorPtr destructor)30*6777b538SAndroid Build Coastguard Worker BindStateBase::BindStateBase(InvokeFuncStorage polymorphic_invoke,
31*6777b538SAndroid Build Coastguard Worker DestructorPtr destructor)
32*6777b538SAndroid Build Coastguard Worker : BindStateBase(polymorphic_invoke,
33*6777b538SAndroid Build Coastguard Worker destructor,
34*6777b538SAndroid Build Coastguard Worker &QueryCancellationTraitsForNonCancellables) {}
35*6777b538SAndroid Build Coastguard Worker
BindStateBase(InvokeFuncStorage polymorphic_invoke,DestructorPtr destructor,QueryCancellationTraitsPtr query_cancellation_traits)36*6777b538SAndroid Build Coastguard Worker BindStateBase::BindStateBase(
37*6777b538SAndroid Build Coastguard Worker InvokeFuncStorage polymorphic_invoke,
38*6777b538SAndroid Build Coastguard Worker DestructorPtr destructor,
39*6777b538SAndroid Build Coastguard Worker QueryCancellationTraitsPtr query_cancellation_traits)
40*6777b538SAndroid Build Coastguard Worker : polymorphic_invoke_(polymorphic_invoke),
41*6777b538SAndroid Build Coastguard Worker destructor_(destructor),
42*6777b538SAndroid Build Coastguard Worker query_cancellation_traits_(query_cancellation_traits) {}
43*6777b538SAndroid Build Coastguard Worker
44*6777b538SAndroid Build Coastguard Worker BindStateHolder& BindStateHolder::operator=(BindStateHolder&&) noexcept =
45*6777b538SAndroid Build Coastguard Worker default;
46*6777b538SAndroid Build Coastguard Worker
47*6777b538SAndroid Build Coastguard Worker BindStateHolder::BindStateHolder(const BindStateHolder&) = default;
48*6777b538SAndroid Build Coastguard Worker
49*6777b538SAndroid Build Coastguard Worker BindStateHolder& BindStateHolder::operator=(const BindStateHolder&) = default;
50*6777b538SAndroid Build Coastguard Worker
51*6777b538SAndroid Build Coastguard Worker BindStateHolder::~BindStateHolder() = default;
52*6777b538SAndroid Build Coastguard Worker
Reset()53*6777b538SAndroid Build Coastguard Worker void BindStateHolder::Reset() {
54*6777b538SAndroid Build Coastguard Worker bind_state_ = nullptr;
55*6777b538SAndroid Build Coastguard Worker }
56*6777b538SAndroid Build Coastguard Worker
IsCancelled() const57*6777b538SAndroid Build Coastguard Worker bool BindStateHolder::IsCancelled() const {
58*6777b538SAndroid Build Coastguard Worker DCHECK(bind_state_);
59*6777b538SAndroid Build Coastguard Worker return bind_state_->IsCancelled();
60*6777b538SAndroid Build Coastguard Worker }
61*6777b538SAndroid Build Coastguard Worker
MaybeValid() const62*6777b538SAndroid Build Coastguard Worker bool BindStateHolder::MaybeValid() const {
63*6777b538SAndroid Build Coastguard Worker DCHECK(bind_state_);
64*6777b538SAndroid Build Coastguard Worker return bind_state_->MaybeValid();
65*6777b538SAndroid Build Coastguard Worker }
66*6777b538SAndroid Build Coastguard Worker
67*6777b538SAndroid Build Coastguard Worker } // namespace internal
68*6777b538SAndroid Build Coastguard Worker } // namespace base
69