Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Delta Between Two Patch Sets: compiled/intrusive_ptr.h

Issue 29333474: Issue 4125 - [emscripten] Convert filter classes to C++ (Closed)
Left Patch Set: Addressed comments from Patch Set 24 Created Dec. 6, 2016, 10:43 a.m.
Right Patch Set: Addressed comments from Patch Set 28 Created March 21, 2017, 10:04 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « compiled/debug.h ('k') | compiled/shell.js » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 // Parts of this code have been copied from boost/smart_ptr/intrusive_ptr.hpp. 1 // Parts of this code have been copied from boost/smart_ptr/intrusive_ptr.hpp.
2 // 2 //
3 // Copyright (c) 2001, 2002 Peter Dimov 3 // Copyright (c) 2001, 2002 Peter Dimov
4 // 4 //
5 // Distributed under the Boost Software License, Version 1.0. (See 5 // Distributed under the Boost Software License, Version 1.0. (See
6 // accompanying file LICENSE_1_0.txt or copy at 6 // accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt) 7 // http://www.boost.org/LICENSE_1_0.txt)
8 8
9 #pragma once 9 #pragma once
10 10
(...skipping 16 matching lines...) Expand all
27 if (--mRefCount == 0) 27 if (--mRefCount == 0)
28 delete this; 28 delete this;
29 } 29 }
30 30
31 protected: 31 protected:
32 ref_counted() 32 ref_counted()
33 : mRefCount(1) 33 : mRefCount(1)
34 { 34 {
35 } 35 }
36 36
37 // We need this virtual destructor, otherwise the numerical value of
38 // a ref_counted pointer and the numerical value of a pointer to a derived
39 // class will no longer be identical - despite still pointing to the same
40 // object. So for example `(int)(Filter*)ptr - (int)(ref_counted*)ptr` will be
41 // four, something that presents an issue for our JavaScript bindings which
42 // don't know how to convert pointers between different types.
43 virtual ~ref_counted() 37 virtual ~ref_counted()
44 { 38 {
45 assert(mRefCount == 0, u"Destroying a ref-counted object with a non-zero ref erence count"_str); 39 assert(mRefCount == 0, u"Destroying a ref-counted object with a non-zero ref erence count"_str);
46 } 40 }
47 41
48 private: 42 private:
49 int mRefCount; 43 int mRefCount;
50 }; 44 };
51 45
52 template<typename T, 46 template<typename T,
53 class = typename std::enable_if<std::is_base_of<ref_counted,T>::value>::type > 47 class = typename std::enable_if<std::is_base_of<ref_counted,T>::value>::type >
54 class intrusive_ptr 48 class intrusive_ptr
55 { 49 {
56 public: 50 public:
57 intrusive_ptr() 51 explicit intrusive_ptr()
58 : mPointer(nullptr) 52 : mPointer(nullptr)
59 { 53 {
60 } 54 }
61 55
62 explicit intrusive_ptr(T* pointer) 56 explicit intrusive_ptr(T* pointer)
63 : mPointer(pointer) 57 : mPointer(pointer)
64 { 58 {
65 // Raw pointers always had their reference count increased by whatever gave 59 // Raw pointers always had their reference count increased by whatever gave
66 // us the pointer so we don't need to do it here. 60 // us the pointer so we don't need to do it here.
67 } 61 }
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 inline bool operator==(const T* a, const intrusive_ptr<U>& b) 191 inline bool operator==(const T* a, const intrusive_ptr<U>& b)
198 { 192 {
199 return a == b.get(); 193 return a == b.get();
200 } 194 }
201 195
202 template<typename T, typename U> 196 template<typename T, typename U>
203 inline bool operator!=(const T* a, intrusive_ptr<U> const& b) 197 inline bool operator!=(const T* a, intrusive_ptr<U> const& b)
204 { 198 {
205 return a != b.get(); 199 return a != b.get();
206 } 200 }
LEFTRIGHT

Powered by Google App Engine
This is Rietveld