xref: /aosp_15_r20/external/cronet/base/functional/callback_internal.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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