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

Side by Side Diff: include/private/SkUniquePtr.h

Issue 1565283003: More <type_traits> for SkTLogic.h. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 11 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
« no previous file with comments | « include/private/SkTLogic.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2015 Google Inc. 2 * Copyright 2015 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef SkUniquePtr_DEFINED 8 #ifndef SkUniquePtr_DEFINED
9 #define SkUniquePtr_DEFINED 9 #define SkUniquePtr_DEFINED
10 10
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 } 87 }
88 void swap(compressed_data& that) /*noexcept*/ { 88 void swap(compressed_data& that) /*noexcept*/ {
89 compressed_base<deleter_type>::swap(static_cast<compressed_base<dele ter_type>>(that)); 89 compressed_base<deleter_type>::swap(static_cast<compressed_base<dele ter_type>>(that));
90 SkTSwap(fPtr, that.fPtr); 90 SkTSwap(fPtr, that.fPtr);
91 } 91 }
92 }; 92 };
93 compressed_data data; 93 compressed_data data;
94 94
95 public: 95 public:
96 /*constexpr*/ unique_ptr() /*noexcept*/ : data() { 96 /*constexpr*/ unique_ptr() /*noexcept*/ : data() {
97 static_assert(!is_pointer<deleter_type>::value, "Deleter is nullptr func tion pointer!"); 97 static_assert(!std::is_pointer<deleter_type>::value, "Deleter nullptr fu nction pointer!");
98 } 98 }
99 99
100 /*constexpr*/ unique_ptr(std::nullptr_t) /*noexcept*/ : unique_ptr() { } 100 /*constexpr*/ unique_ptr(std::nullptr_t) /*noexcept*/ : unique_ptr() { }
101 101
102 explicit unique_ptr(pointer ptr) /*noexcept*/ : data(ptr, deleter_type()) { 102 explicit unique_ptr(pointer ptr) /*noexcept*/ : data(ptr, deleter_type()) {
103 static_assert(!is_pointer<deleter_type>::value, "Deleter is nullptr func tion pointer!"); 103 static_assert(!std::is_pointer<deleter_type>::value, "Deleter nullptr fu nction pointer!");
104 } 104 }
105 105
106 unique_ptr(pointer ptr, 106 unique_ptr(pointer ptr,
107 conditional_t<is_reference<deleter_type>::value, deleter_type,con st deleter_type&> d) 107 conditional_t<std::is_reference<deleter_type>::value,
108 deleter_type, const deleter_type&> d)
108 /*noexcept*/ : data(ptr, d) 109 /*noexcept*/ : data(ptr, d)
109 {} 110 {}
110 111
111 unique_ptr(pointer ptr, remove_reference_t<deleter_type>&& d) /*noexcept*/ 112 unique_ptr(pointer ptr, remove_reference_t<deleter_type>&& d) /*noexcept*/
112 : data(std::move(ptr), std::move(d)) 113 : data(std::move(ptr), std::move(d))
113 { 114 {
114 static_assert(!is_reference<deleter_type>::value, 115 static_assert(!std::is_reference<deleter_type>::value,
115 "Binding an rvalue reference deleter as an lvalue reference deleter is not allowed."); 116 "Binding an rvalue reference deleter as an lvalue reference deleter is not allowed.");
116 } 117 }
117 118
118 119
119 unique_ptr(unique_ptr&& that) /*noexcept*/ 120 unique_ptr(unique_ptr&& that) /*noexcept*/
120 : data(that.release(), std::forward<deleter_type>(that.get_deleter())) 121 : data(that.release(), std::forward<deleter_type>(that.get_deleter()))
121 {} 122 {}
122 123
123 template <typename U, typename ThatD, typename = enable_if_t< 124 template <typename U, typename ThatD, typename = enable_if_t<
124 is_convertible<typename unique_ptr<U, ThatD>::pointer, pointer>::value & & 125 is_convertible<typename unique_ptr<U, ThatD>::pointer, pointer>::value & &
125 !is_array<U>::value && 126 !std::is_array<U>::value &&
126 conditional_t<is_reference<D>::value, is_same<ThatD, D>, is_convertible< ThatD, D>>::value>> 127 conditional_t<std::is_reference<D>::value,
128 std::is_same<ThatD, D>,
129 is_convertible<ThatD, D>>::value>>
127 unique_ptr(unique_ptr<U, ThatD>&& that) /*noexcept*/ 130 unique_ptr(unique_ptr<U, ThatD>&& that) /*noexcept*/
128 : data(that.release(), std::forward<ThatD>(that.get_deleter())) 131 : data(that.release(), std::forward<ThatD>(that.get_deleter()))
129 {} 132 {}
130 133
131 ~unique_ptr() /*noexcept*/ { 134 ~unique_ptr() /*noexcept*/ {
132 pointer& ptr = data.getPointer(); 135 pointer& ptr = data.getPointer();
133 if (ptr != nullptr) { 136 if (ptr != nullptr) {
134 get_deleter()(ptr); 137 get_deleter()(ptr);
135 } 138 }
136 ptr = pointer(); 139 ptr = pointer();
137 } 140 }
138 141
139 unique_ptr& operator=(unique_ptr&& that) /*noexcept*/ { 142 unique_ptr& operator=(unique_ptr&& that) /*noexcept*/ {
140 reset(that.release()); 143 reset(that.release());
141 get_deleter() = std::forward<deleter_type>(that.get_deleter()); 144 get_deleter() = std::forward<deleter_type>(that.get_deleter());
142 return *this; 145 return *this;
143 } 146 }
144 147
145 template <typename U, typename ThatD> enable_if_t< 148 template <typename U, typename ThatD> enable_if_t<
146 is_convertible<typename unique_ptr<U, ThatD>::pointer, pointer>::value & & 149 is_convertible<typename unique_ptr<U, ThatD>::pointer, pointer>::value & &
147 !is_array<U>::value, 150 !std::is_array<U>::value,
148 unique_ptr&> operator=(unique_ptr<U, ThatD>&& that) /*noexcept*/ { 151 unique_ptr&> operator=(unique_ptr<U, ThatD>&& that) /*noexcept*/ {
149 reset(that.release()); 152 reset(that.release());
150 get_deleter() = std::forward<ThatD>(that.get_deleter()); 153 get_deleter() = std::forward<ThatD>(that.get_deleter());
151 return *this; 154 return *this;
152 } 155 }
153 156
154 unique_ptr& operator=(std::nullptr_t) /*noexcept*/ { 157 unique_ptr& operator=(std::nullptr_t) /*noexcept*/ {
155 reset(); 158 reset();
156 return *this; 159 return *this;
157 } 160 }
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 } 260 }
258 void swap(compressed_data& that) /*noexcept*/ { 261 void swap(compressed_data& that) /*noexcept*/ {
259 compressed_base<deleter_type>::swap(static_cast<compressed_base<dele ter_type>>(that)); 262 compressed_base<deleter_type>::swap(static_cast<compressed_base<dele ter_type>>(that));
260 SkTSwap(fPtr, that.fPtr); 263 SkTSwap(fPtr, that.fPtr);
261 } 264 }
262 }; 265 };
263 compressed_data data; 266 compressed_data data;
264 267
265 public: 268 public:
266 /*constexpr*/ unique_ptr() /*noexcept*/ : data() { 269 /*constexpr*/ unique_ptr() /*noexcept*/ : data() {
267 static_assert(!is_pointer<deleter_type>::value, "Deleter is nullptr func tion pointer!"); 270 static_assert(!std::is_pointer<deleter_type>::value, "Deleter nullptr fu nction pointer!");
268 } 271 }
269 272
270 /*constexpr*/ unique_ptr(std::nullptr_t) /*noexcept*/ : unique_ptr() { } 273 /*constexpr*/ unique_ptr(std::nullptr_t) /*noexcept*/ : unique_ptr() { }
271 274
272 explicit unique_ptr(pointer ptr) /*noexcept*/ : data(ptr, deleter_type()) { 275 explicit unique_ptr(pointer ptr) /*noexcept*/ : data(ptr, deleter_type()) {
273 static_assert(!is_pointer<deleter_type>::value, "Deleter is nullptr func tion pointer!"); 276 static_assert(!std::is_pointer<deleter_type>::value, "Deleter nullptr fu nction pointer!");
274 } 277 }
275 278
276 unique_ptr(pointer ptr, 279 unique_ptr(pointer ptr,
277 conditional_t<is_reference<deleter_type>::value, deleter_type,con st deleter_type&> d) 280 conditional_t<std::is_reference<deleter_type>::value,
281 deleter_type, const deleter_type&> d)
278 /*noexcept*/ : data(ptr, d) 282 /*noexcept*/ : data(ptr, d)
279 {} 283 {}
280 284
281 unique_ptr(pointer ptr, remove_reference_t<deleter_type>&& d) /*noexcept*/ 285 unique_ptr(pointer ptr, remove_reference_t<deleter_type>&& d) /*noexcept*/
282 : data(std::move(ptr), std::move(d)) 286 : data(std::move(ptr), std::move(d))
283 { 287 {
284 static_assert(!is_reference<deleter_type>::value, 288 static_assert(!std::is_reference<deleter_type>::value,
285 "Binding an rvalue reference deleter as an lvalue reference deleter is not allowed."); 289 "Binding an rvalue reference deleter as an lvalue reference deleter is not allowed.");
286 } 290 }
287 291
288 unique_ptr(unique_ptr&& that) /*noexcept*/ 292 unique_ptr(unique_ptr&& that) /*noexcept*/
289 : data(that.release(), std::forward<deleter_type>(that.get_deleter())) 293 : data(that.release(), std::forward<deleter_type>(that.get_deleter()))
290 {} 294 {}
291 295
292 ~unique_ptr() { 296 ~unique_ptr() {
293 pointer& ptr = data.getPointer(); 297 pointer& ptr = data.getPointer();
294 if (ptr != nullptr) { 298 if (ptr != nullptr) {
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 392
389 template <typename T, typename D> 393 template <typename T, typename D>
390 inline bool operator!=(std::nullptr_t, const unique_ptr<T, D>& b) /*noexcept*/ { 394 inline bool operator!=(std::nullptr_t, const unique_ptr<T, D>& b) /*noexcept*/ {
391 //return (bool)b; 395 //return (bool)b;
392 return b.is_attached(); 396 return b.is_attached();
393 } 397 }
394 398
395 } // namespace skstd 399 } // namespace skstd
396 400
397 #endif 401 #endif
OLDNEW
« no previous file with comments | « include/private/SkTLogic.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698