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

Side by Side Diff: third_party/base/nonstd_unique_ptr.h

Issue 1544923002: Start using allowed C++11 features. (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: Created 5 years 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 | « samples/image_diff.cc ('k') | third_party/base/nonstd_unique_ptr_unittest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 Google Inc. All Rights Reserved. 1 // Copyright 2013 Google Inc. All Rights Reserved.
2 // 2 //
3 // Redistribution and use in source and binary forms, with or without 3 // Redistribution and use in source and binary forms, with or without
4 // modification, are permitted provided that the following conditions are 4 // modification, are permitted provided that the following conditions are
5 // met: 5 // met:
6 // 6 //
7 // * Redistributions of source code must retain the above copyright 7 // * Redistributions of source code must retain the above copyright
8 // notice, this list of conditions and the following disclaimer. 8 // notice, this list of conditions and the following disclaimer.
9 // * Redistributions in binary form must reproduce the above 9 // * Redistributions in binary form must reproduce the above
10 // copyright notice, this list of conditions and the following disclaimer 10 // copyright notice, this list of conditions and the following disclaimer
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 #define NONSTD_UNIQUE_PTR_H_ 67 #define NONSTD_UNIQUE_PTR_H_
68 68
69 // This is an implementation designed to match the anticipated future C++11 69 // This is an implementation designed to match the anticipated future C++11
70 // implementation of the unique_ptr class. 70 // implementation of the unique_ptr class.
71 71
72 #include <assert.h> 72 #include <assert.h>
73 #include <stddef.h> 73 #include <stddef.h>
74 #include <stdlib.h> 74 #include <stdlib.h>
75 75
76 #include <ostream> 76 #include <ostream>
77 #include <utility>
77 78
78 #include "template_util.h" 79 #include "template_util.h"
79 80
80 namespace nonstd { 81 namespace nonstd {
81 82
82 // Replacement for move, but doesn't allow things that are already
83 // rvalue references.
84 template <class T>
85 T&& move(T& t) {
86 return static_cast<T&&>(t);
87 }
88
89 // Function object which deletes its parameter, which must be a pointer. 83 // Function object which deletes its parameter, which must be a pointer.
90 // If C is an array type, invokes 'delete[]' on the parameter; otherwise, 84 // If C is an array type, invokes 'delete[]' on the parameter; otherwise,
91 // invokes 'delete'. The default deleter for unique_ptr<T>. 85 // invokes 'delete'. The default deleter for unique_ptr<T>.
92 template <class T> 86 template <class T>
93 struct DefaultDeleter { 87 struct DefaultDeleter {
94 DefaultDeleter() {} 88 DefaultDeleter() {}
95 template <typename U> 89 template <typename U>
96 DefaultDeleter(const DefaultDeleter<U>& other) { 90 DefaultDeleter(const DefaultDeleter<U>& other) {
97 // IMPLEMENTATION NOTE: C++11 20.7.1.1.2p2 only provides this constructor 91 // IMPLEMENTATION NOTE: C++11 20.7.1.1.2p2 only provides this constructor
98 // if U* is implicitly convertible to T* and U is not an array type. 92 // if U* is implicitly convertible to T* and U is not an array type.
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 explicit unique_ptr(C* p) : internal::unique_ptr_base<C, D>(p) {} 231 explicit unique_ptr(C* p) : internal::unique_ptr_base<C, D>(p) {}
238 232
239 // Constructor. Allows initialization of a stateful deleter. 233 // Constructor. Allows initialization of a stateful deleter.
240 unique_ptr(C* p, const D& d) : internal::unique_ptr_base<C, D>(p, d) {} 234 unique_ptr(C* p, const D& d) : internal::unique_ptr_base<C, D>(p, d) {}
241 235
242 // Constructor. Allows construction from a nullptr. 236 // Constructor. Allows construction from a nullptr.
243 unique_ptr(decltype(nullptr)) : internal::unique_ptr_base<C, D>(nullptr) {} 237 unique_ptr(decltype(nullptr)) : internal::unique_ptr_base<C, D>(nullptr) {}
244 238
245 // Move constructor. 239 // Move constructor.
246 unique_ptr(unique_ptr&& that) 240 unique_ptr(unique_ptr&& that)
247 : internal::unique_ptr_base<C, D>(nonstd::move(that)) {} 241 : internal::unique_ptr_base<C, D>(std::move(that)) {}
248 242
249 // operator=. Allows assignment from a nullptr. Deletes the currently owned 243 // operator=. Allows assignment from a nullptr. Deletes the currently owned
250 // object, if any. 244 // object, if any.
251 unique_ptr& operator=(decltype(nullptr)) { 245 unique_ptr& operator=(decltype(nullptr)) {
252 this->reset(); 246 this->reset();
253 return *this; 247 return *this;
254 } 248 }
255 249
256 // Move assignment. 250 // Move assignment.
257 unique_ptr<C>& operator=(unique_ptr<C>&& that) { 251 unique_ptr<C>& operator=(unique_ptr<C>&& that) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 // - it cannot be const-qualified differently from T per unique_ptr spec 304 // - it cannot be const-qualified differently from T per unique_ptr spec
311 // (http://cplusplus.github.com/LWG/lwg-active.html#2118). Users wanting 305 // (http://cplusplus.github.com/LWG/lwg-active.html#2118). Users wanting
312 // to work around this may use const_cast<const T*>(). 306 // to work around this may use const_cast<const T*>().
313 explicit unique_ptr(C* p) : internal::unique_ptr_base<C, D>(p) {} 307 explicit unique_ptr(C* p) : internal::unique_ptr_base<C, D>(p) {}
314 308
315 // Constructor. Allows construction from a nullptr. 309 // Constructor. Allows construction from a nullptr.
316 unique_ptr(decltype(nullptr)) : internal::unique_ptr_base<C, D>(nullptr) {} 310 unique_ptr(decltype(nullptr)) : internal::unique_ptr_base<C, D>(nullptr) {}
317 311
318 // Move constructor. 312 // Move constructor.
319 unique_ptr(unique_ptr&& that) 313 unique_ptr(unique_ptr&& that)
320 : internal::unique_ptr_base<C, D>(nonstd::move(that)) {} 314 : internal::unique_ptr_base<C, D>(std::move(that)) {}
321 315
322 // operator=. Allows assignment from a nullptr. Deletes the currently owned 316 // operator=. Allows assignment from a nullptr. Deletes the currently owned
323 // array, if any. 317 // array, if any.
324 unique_ptr& operator=(decltype(nullptr)) { 318 unique_ptr& operator=(decltype(nullptr)) {
325 this->reset(); 319 this->reset();
326 return *this; 320 return *this;
327 } 321 }
328 322
329 // Move assignment. 323 // Move assignment.
330 unique_ptr<C>& operator=(unique_ptr<C>&& that) { 324 unique_ptr<C>& operator=(unique_ptr<C>&& that) {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 } 389 }
396 390
397 template <typename T> 391 template <typename T>
398 std::ostream& operator<<(std::ostream& out, const unique_ptr<T>& p) { 392 std::ostream& operator<<(std::ostream& out, const unique_ptr<T>& p) {
399 return out << p.get(); 393 return out << p.get();
400 } 394 }
401 395
402 } // namespace nonstd 396 } // namespace nonstd
403 397
404 #endif // NONSTD_UNIQUE_PTR_H_ 398 #endif // NONSTD_UNIQUE_PTR_H_
OLDNEW
« no previous file with comments | « samples/image_diff.cc ('k') | third_party/base/nonstd_unique_ptr_unittest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698