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 3 // found in the LICENSE file. 4 5 #include "base/memory/weak_ptr.h" 6 7 namespace base { 8 namespace internal { 9 Flag()10WeakReference::Flag::Flag() : is_valid_(true) { 11 } 12 Invalidate()13void WeakReference::Flag::Invalidate() { 14 is_valid_ = false; 15 } 16 IsValid() const17bool WeakReference::Flag::IsValid() const { 18 return is_valid_; 19 } 20 ~Flag()21WeakReference::Flag::~Flag() { 22 } 23 WeakReference()24WeakReference::WeakReference() { 25 } 26 WeakReference(const Flag * flag)27WeakReference::WeakReference(const Flag* flag) : flag_(flag) { 28 } 29 ~WeakReference()30WeakReference::~WeakReference() { 31 } 32 is_valid() const33bool WeakReference::is_valid() const { return flag_.get() && flag_->IsValid(); } 34 WeakReferenceOwner()35WeakReferenceOwner::WeakReferenceOwner() { 36 } 37 ~WeakReferenceOwner()38WeakReferenceOwner::~WeakReferenceOwner() { 39 Invalidate(); 40 } 41 GetRef() const42WeakReference WeakReferenceOwner::GetRef() const { 43 // If we hold the last reference to the Flag then create a new one. 44 if (!HasRefs()) 45 flag_ = new WeakReference::Flag(); 46 47 return WeakReference(flag_.get()); 48 } 49 Invalidate()50void WeakReferenceOwner::Invalidate() { 51 if (flag_.get()) { 52 flag_->Invalidate(); 53 flag_ = NULL; 54 } 55 } 56 WeakPtrBase()57WeakPtrBase::WeakPtrBase() { 58 } 59 ~WeakPtrBase()60WeakPtrBase::~WeakPtrBase() { 61 } 62 WeakPtrBase(const WeakReference & ref)63WeakPtrBase::WeakPtrBase(const WeakReference& ref) : ref_(ref) { 64 } 65 66 } // namespace internal 67 } // namespace base 68