19 #include <boost/mpl/assert.hpp>
23 template<
class V,
class LkT>
inline typename unique_ptr<V, LkT>::atomic_ptr_t
25 atomic_ptr_t tmp(
nullptr);
26 tmp.swap(
this->data_);
30 template<
class V,
class LkT>
inline void
36 template<
class V,
class LkT>
inline void
41 template<
class V,
class LkT>
42 template<
class V1>
inline void
44 BOOST_MPL_ASSERT((
std::is_base_of<value_type, V1>));
48 template<
class V,
class LkT>
49 template<
class V2,
class LkT2>
inline void
51 BOOST_MPL_ASSERT((
std::is_base_of<value_type, V2>));
55 template<
class V,
class LkT>
inline constexpr
60 template<
class V,
class LkT>
65 BOOST_MPL_ASSERT((
std::is_base_of<value_type, V1>));
68 template<
class V,
class LkT>
inline
71 BOOST_MPL_ASSERT((
std::is_base_of<value_type,
typename atomic_ptr_t::value_type>));
75 template<
class V,
class LkT>
76 template<
class V1,
template<
class>
class At>
80 BOOST_MPL_ASSERT((
std::is_base_of<value_type, V1>));
82 assert(
dynamic_cast<V1 *>(ptr.get()));
84 assert(
dynamic_cast<value_type *>(data_.get()));
88 template<
class V,
class LkT>
inline constexpr
90 : data_(d.release()) {
93 template<
class V,
class LkT>
97 : data_(d.release()) {
98 BOOST_MPL_ASSERT((
std::is_base_of<value_type, V1>));
104 template<
class V,
class LkT>
inline constexpr
106 : data_(s.release()) {
109 template<
class V,
class LkT>
110 template<
typename V2,
class LkT2>
inline
112 : data_(s.release()) {
113 BOOST_MPL_ASSERT((
std::is_base_of<value_type, V2>));
116 template<
class V,
class LkT>
inline
118 atomic_ptr_t tmp(
nullptr);
119 tmp.swap(
this->data_);
125 template<
class V,
class LkT>
126 template<
typename V2,
class LkT2>
inline void
128 BOOST_MPL_ASSERT((
std::is_base_of<value_type, V2>));
133 template<
class V,
class LkT>
inline void
139 template<
class V,
class LkT>
constexpr inline bool
141 return (data_.get() && s.data_.get()) ? (*data_.get()<*s.data_.get()) :
false;
143 template<
class V,
class LkT>
constexpr inline bool
145 return !((data_<s.data_) || (s.data_<data_));
147 template<
class V,
class LkT>
inline constexpr bool
151 template<
class V,
class LkT>
constexpr inline
153 return dynamic_cast<value_type
const *>(data_.get())!=
nullptr;
155 template<
class V,
class LkT>
constexpr inline bool
157 return (data_!=s.data_) && (s.data_<data_);
160 template<
class V,
class LkT>
constexpr inline typename unique_ptr<V, LkT>::atomic_ptr_t
const &
164 template<
class V,
class LkT>
inline typename unique_ptr<V, LkT>::atomic_ptr_t &
168 template<
class V,
class LkT>
constexpr inline typename unique_ptr<V, LkT>::value_type
const &
170 assert(
dynamic_cast<value_type
const *>(data_.get()));
173 template<
class V,
class LkT>
inline typename unique_ptr<V, LkT>::value_type &
175 assert(
dynamic_cast<value_type *>(data_.get()));
178 template<
class V,
class LkT>
constexpr inline typename unique_ptr<V, LkT>::value_type
const *
182 template<
class V,
class LkT>
inline typename unique_ptr<V, LkT>::value_type *
187 template<
class V,
class LkT>
inline tstring
190 os<<
"data_="<<data_.get();
191 if (
LIKELY(
dynamic_cast<value_type *>(data_.get()))) {
192 os<<
", data: "<<data_->to_string()
193 <<
", type: "<<ppd::api_threading_traits<ppd::platform_api, ppd::sequential_mode>::demangle_name(
typeid(unique_ptr));