1 #ifndef PROTON_INTERNAL_UNIQUE_PTR_HPP 2 #define PROTON_INTERNAL_UNIQUE_PTR_HPP 25 #include "./config.hpp" 40 template <
class T>
class pn_unique_ptr {
42 pn_unique_ptr(T* p=0) : ptr_(p) {}
43 #if PN_CPP_HAS_RVALUE_REFERENCES 44 pn_unique_ptr(pn_unique_ptr&& x) : ptr_(0) { std::swap(ptr_, x.ptr_); }
46 pn_unique_ptr(
const pn_unique_ptr& x) : ptr_() { std::swap(ptr_, const_cast<pn_unique_ptr&>(x).ptr_); }
48 ~pn_unique_ptr() {
delete(ptr_); }
49 T& operator*()
const {
return *ptr_; }
50 T* operator->()
const {
return ptr_; }
51 T*
get()
const {
return ptr_; }
52 void reset(T* p = 0) { pn_unique_ptr<T> tmp(p); std::swap(ptr_, tmp.ptr_); }
53 T* release() { T *p = ptr_; ptr_ = 0;
return p; }
54 #if PN_CPP_HAS_EXPLICIT_CONVERSIONS 55 explicit operator bool()
const {
return get(); }
57 bool operator !()
const {
return !
get(); }
59 #if PN_CPP_HAS_UNIQUE_PTR 60 operator std::unique_ptr<T>() { T *p = ptr_; ptr_ = 0;
return std::unique_ptr<T>(p); }
70 #endif // PROTON_INTERNAL_UNIQUE_PTR_HPP The main Proton namespace.
Definition: annotation_key.hpp:30