[email protected] | 0f45036 | 2012-06-09 02:11:01 | [diff] [blame] | 1 | // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
[email protected] | 59eff91 | 2011-02-18 23:29:31 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. | ||||
4 | |||||
5 | #include "base/callback_internal.h" | ||||
6 | |||||
[email protected] | e24f876 | 2011-12-20 00:10:04 | [diff] [blame] | 7 | #include "base/logging.h" |
8 | |||||
[email protected] | 59eff91 | 2011-02-18 23:29:31 | [diff] [blame] | 9 | namespace base { |
10 | namespace internal { | ||||
11 | |||||
tapted | e7e804c | 2015-05-14 08:03:32 | [diff] [blame] | 12 | void BindStateBase::AddRef() { |
13 | AtomicRefCountInc(&ref_count_); | ||||
14 | } | ||||
15 | |||||
16 | void BindStateBase::Release() { | ||||
17 | if (!AtomicRefCountDec(&ref_count_)) | ||||
18 | destructor_(this); | ||||
19 | } | ||||
20 | |||||
dcheng | f883604 | 2014-11-26 05:04:55 | [diff] [blame] | 21 | CallbackBase::CallbackBase(const CallbackBase& c) = default; |
22 | CallbackBase& CallbackBase::operator=(const CallbackBase& c) = default; | ||||
23 | |||||
[email protected] | 59eff91 | 2011-02-18 23:29:31 | [diff] [blame] | 24 | void CallbackBase::Reset() { |
[email protected] | 59eff91 | 2011-02-18 23:29:31 | [diff] [blame] | 25 | polymorphic_invoke_ = NULL; |
[email protected] | 31d92665 | 2012-06-13 23:15:16 | [diff] [blame] | 26 | // NULL the bind_state_ last, since it may be holding the last ref to whatever |
27 | // object owns us, and we may be deleted after that. | ||||
28 | bind_state_ = NULL; | ||||
[email protected] | 59eff91 | 2011-02-18 23:29:31 | [diff] [blame] | 29 | } |
30 | |||||
31 | bool CallbackBase::Equals(const CallbackBase& other) const { | ||||
[email protected] | 7296f276 | 2011-11-21 19:23:44 | [diff] [blame] | 32 | return bind_state_.get() == other.bind_state_.get() && |
[email protected] | 59eff91 | 2011-02-18 23:29:31 | [diff] [blame] | 33 | polymorphic_invoke_ == other.polymorphic_invoke_; |
34 | } | ||||
35 | |||||
[email protected] | e24f876 | 2011-12-20 00:10:04 | [diff] [blame] | 36 | CallbackBase::CallbackBase(BindStateBase* bind_state) |
37 | : bind_state_(bind_state), | ||||
38 | polymorphic_invoke_(NULL) { | ||||
tapted | e7e804c | 2015-05-14 08:03:32 | [diff] [blame] | 39 | DCHECK(!bind_state_.get() || bind_state_->ref_count_ == 1); |
[email protected] | 59eff91 | 2011-02-18 23:29:31 | [diff] [blame] | 40 | } |
41 | |||||
42 | CallbackBase::~CallbackBase() { | ||||
43 | } | ||||
44 | |||||
[email protected] | 59eff91 | 2011-02-18 23:29:31 | [diff] [blame] | 45 | } // namespace internal |
[email protected] | 0f45036 | 2012-06-09 02:11:01 | [diff] [blame] | 46 | } // namespace base |