Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(223)

Side by Side Diff: ppapi/native_client/src/include/ref_counted.h

Issue 10386080: Rename nacl::RefCounted to nacl::RefCountedThreadSafe (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: License bump Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef NATIVE_CLIENT_SRC_INCLUDE_REF_COUNTED_H_ 5 #ifndef NATIVE_CLIENT_SRC_INCLUDE_REF_COUNTED_H_
6 #define NATIVE_CLIENT_SRC_INCLUDE_REF_COUNTED_H_ 6 #define NATIVE_CLIENT_SRC_INCLUDE_REF_COUNTED_H_
7 7
8 #include "native_client/src/shared/platform/nacl_sync_checked.h" 8 #include "native_client/src/shared/platform/nacl_sync_checked.h"
9 9
10 namespace nacl { 10 namespace nacl {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 // class MyFoo : public nacl::RefCounted<MyFoo> { 58 // class MyFoo : public nacl::RefCounted<MyFoo> {
59 // ... 59 // ...
60 // private: 60 // private:
61 // friend class nacl::RefCounted<MyFoo>; 61 // friend class nacl::RefCounted<MyFoo>;
62 // ~MyFoo(); 62 // ~MyFoo();
63 // }; 63 // };
64 // 64 //
65 // You should always make your destructor private, to avoid any code deleting 65 // You should always make your destructor private, to avoid any code deleting
66 // the object accidently while there are references to it. 66 // the object accidently while there are references to it.
67 template <class T> 67 template <class T>
68 class RefCounted : public subtle::RefCountedBase { 68 class RefCountedThreadSafe : public subtle::RefCountedBase {
69 public: 69 public:
70 RefCounted() { } 70 RefCountedThreadSafe() {}
71 ~RefCounted() { }
72 71
73 void AddRef() const { 72 void AddRef() const {
74 subtle::RefCountedBase::AddRef(); 73 subtle::RefCountedBase::AddRef();
75 } 74 }
76 75
77 void Release() const { 76 void Release() const {
78 if (subtle::RefCountedBase::Release()) { 77 if (subtle::RefCountedBase::Release()) {
79 delete static_cast<const T*>(this); 78 delete static_cast<const T*>(this);
80 } 79 }
81 } 80 }
82 81
82 protected:
83 ~RefCountedThreadSafe() {}
84
83 private: 85 private:
84 RefCounted(const RefCounted<T>&); 86 RefCountedThreadSafe(const RefCountedThreadSafe<T>&);
85 void operator=(const RefCounted<T>&); 87 void operator=(const RefCountedThreadSafe<T>&);
86 }; 88 };
87 89
88 // 90 //
89 // A wrapper for some piece of data so we can place other things in 91 // A wrapper for some piece of data so we can place other things in
90 // scoped_refptrs<>. 92 // scoped_refptrs<>.
91 // 93 //
92 template<typename T> 94 template<typename T>
93 class RefCountedData : public nacl::RefCounted< nacl::RefCountedData<T> > { 95 class RefCountedData
96 : public RefCountedThreadSafe<RefCountedData<T> > {
94 public: 97 public:
95 RefCountedData() : data() {} 98 RefCountedData() : data() {}
96 RefCountedData(const T& in_value) : data(in_value) {} 99 RefCountedData(const T& in_value) : data(in_value) {}
97 100
98 T data; 101 T data;
99 }; 102 };
100 103
101 } // namespace nacl 104 } // namespace nacl
102 105
103 // 106 //
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 // scoped_refptr<MyFoo> a = new MyFoo(); 147 // scoped_refptr<MyFoo> a = new MyFoo();
145 // scoped_refptr<MyFoo> b; 148 // scoped_refptr<MyFoo> b;
146 // 149 //
147 // b = a; 150 // b = a;
148 // // now, |a| and |b| each own a reference to the same MyFoo object. 151 // // now, |a| and |b| each own a reference to the same MyFoo object.
149 // } 152 // }
150 // 153 //
151 template <class T> 154 template <class T>
152 class scoped_refptr { 155 class scoped_refptr {
153 public: 156 public:
154 scoped_refptr() : ptr_((T*)0) { 157 scoped_refptr() : ptr_((T*)0) {}
155 }
156 158
157 scoped_refptr(T* p) : ptr_(p) { 159 scoped_refptr(T* p) : ptr_(p) {
158 if (ptr_) 160 if (ptr_)
159 ptr_->AddRef(); 161 ptr_->AddRef();
160 } 162 }
161 163
162 scoped_refptr(const scoped_refptr<T>& r) : ptr_(r.ptr_) { 164 scoped_refptr(const scoped_refptr<T>& r) : ptr_(r.ptr_) {
163 if (ptr_) 165 if (ptr_)
164 ptr_->AddRef(); 166 ptr_->AddRef();
165 } 167 }
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 }; 226 };
225 227
226 // Handy utility for creating a scoped_refptr<T> out of a T* explicitly without 228 // Handy utility for creating a scoped_refptr<T> out of a T* explicitly without
227 // having to retype all the template arguments 229 // having to retype all the template arguments
228 template <typename T> 230 template <typename T>
229 scoped_refptr<T> make_scoped_refptr(T* t) { 231 scoped_refptr<T> make_scoped_refptr(T* t) {
230 return scoped_refptr<T>(t); 232 return scoped_refptr<T>(t);
231 } 233 }
232 234
233 #endif // NATIVE_CLIENT_SRC_INCLUDE_REF_COUNTED_H_ 235 #endif // NATIVE_CLIENT_SRC_INCLUDE_REF_COUNTED_H_
OLDNEW
« no previous file with comments | « gpu/command_buffer/client/ref_counted.h ('k') | ppapi/native_client/src/shared/ppapi_proxy/array_buffer_proxy_var.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698