blob: 0f91ef3f8c8997191595e9ce18cf42bcb92397e0 [file] [log] [blame]
Vitaly Bukacbed2062015-08-17 12:54:05 -07001// 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
7namespace base {
8namespace internal {
9
10WeakReference::Flag::Flag() : is_valid_(true) {
Vitaly Bukacbed2062015-08-17 12:54:05 -070011}
12
13void WeakReference::Flag::Invalidate() {
Vitaly Bukacbed2062015-08-17 12:54:05 -070014 is_valid_ = false;
15}
16
17bool WeakReference::Flag::IsValid() const {
Vitaly Bukacbed2062015-08-17 12:54:05 -070018 return is_valid_;
19}
20
21WeakReference::Flag::~Flag() {
22}
23
24WeakReference::WeakReference() {
25}
26
27WeakReference::WeakReference(const Flag* flag) : flag_(flag) {
28}
29
30WeakReference::~WeakReference() {
31}
32
33bool WeakReference::is_valid() const { return flag_.get() && flag_->IsValid(); }
34
35WeakReferenceOwner::WeakReferenceOwner() {
36}
37
38WeakReferenceOwner::~WeakReferenceOwner() {
39 Invalidate();
40}
41
42WeakReference 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
50void WeakReferenceOwner::Invalidate() {
51 if (flag_.get()) {
52 flag_->Invalidate();
53 flag_ = NULL;
54 }
55}
56
57WeakPtrBase::WeakPtrBase() {
58}
59
60WeakPtrBase::~WeakPtrBase() {
61}
62
63WeakPtrBase::WeakPtrBase(const WeakReference& ref) : ref_(ref) {
64}
65
66} // namespace internal
67} // namespace base