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()10 WeakReference::Flag::Flag() : is_valid_(true) {
11 }
12 
Invalidate()13 void WeakReference::Flag::Invalidate() {
14   is_valid_ = false;
15 }
16 
IsValid() const17 bool WeakReference::Flag::IsValid() const {
18   return is_valid_;
19 }
20 
~Flag()21 WeakReference::Flag::~Flag() {
22 }
23 
WeakReference()24 WeakReference::WeakReference() {
25 }
26 
WeakReference(const Flag * flag)27 WeakReference::WeakReference(const Flag* flag) : flag_(flag) {
28 }
29 
~WeakReference()30 WeakReference::~WeakReference() {
31 }
32 
is_valid() const33 bool WeakReference::is_valid() const { return flag_.get() && flag_->IsValid(); }
34 
WeakReferenceOwner()35 WeakReferenceOwner::WeakReferenceOwner() {
36 }
37 
~WeakReferenceOwner()38 WeakReferenceOwner::~WeakReferenceOwner() {
39   Invalidate();
40 }
41 
GetRef() const42 WeakReference 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()50 void WeakReferenceOwner::Invalidate() {
51   if (flag_.get()) {
52     flag_->Invalidate();
53     flag_ = NULL;
54   }
55 }
56 
WeakPtrBase()57 WeakPtrBase::WeakPtrBase() {
58 }
59 
~WeakPtrBase()60 WeakPtrBase::~WeakPtrBase() {
61 }
62 
WeakPtrBase(const WeakReference & ref)63 WeakPtrBase::WeakPtrBase(const WeakReference& ref) : ref_(ref) {
64 }
65 
66 }  // namespace internal
67 }  // namespace base
68