1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 7 #include "base/logging.h" 8 9 namespace base { 10 namespace internal { 11 12 void BindStateBase::AddRef() { 13 AtomicRefCountInc(&ref_count_); 14 } 15 16 void BindStateBase::Release() { 17 if (!AtomicRefCountDec(&ref_count_)) 18 destructor_(this); 19 } 20 21 CallbackBase::CallbackBase(const CallbackBase& c) = default; 22 CallbackBase& CallbackBase::operator=(const CallbackBase& c) = default; 23 24 void CallbackBase::Reset() { 25 polymorphic_invoke_ = NULL; 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; 29 } 30 31 bool CallbackBase::Equals(const CallbackBase& other) const { 32 return bind_state_.get() == other.bind_state_.get() && 33 polymorphic_invoke_ == other.polymorphic_invoke_; 34 } 35 36 CallbackBase::CallbackBase(BindStateBase* bind_state) 37 : bind_state_(bind_state), 38 polymorphic_invoke_(NULL) { 39 DCHECK(!bind_state_.get() || bind_state_->ref_count_ == 1); 40 } 41 42 CallbackBase::~CallbackBase() { 43 } 44 45 } // namespace internal 46 } // namespace base 47