Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00025
00028
00029 #ifndef THOR_COPIEDPTR_HPP
00030 #define THOR_COPIEDPTR_HPP
00031
00032 #include <Thor/Detail/SmartPtrImpl.hpp>
00033 #include <Thor/Config.hpp>
00034
00035 #include <algorithm>
00036 #include <cassert>
00037
00038
00039 namespace thor
00040 {
00041
00042 template <typename T, template <typename> class OwnershipPolicy>
00043 class MovedPtr;
00044
00047
00062 template <typename T, template <typename> class OwnershipPolicy = DynamicCopy>
00063 class CopiedPtr
00064 {
00065
00066
00067 public:
00070 CopiedPtr();
00071
00077 template <typename U>
00078 explicit CopiedPtr(U* pointer);
00079
00084 CopiedPtr(const CopiedPtr& origin);
00085
00088 CopiedPtr(MovedPtr<T, OwnershipPolicy> source);
00089
00093 ~CopiedPtr();
00094
00098 CopiedPtr& operator= (const CopiedPtr& origin);
00099
00102 CopiedPtr& operator= (MovedPtr<T, OwnershipPolicy> source);
00103
00106 void Swap(CopiedPtr& other);
00107
00111 void Reset();
00112
00119 template <typename U>
00120 void Reset(U* pointer);
00121
00125 T* Release();
00126
00132 operator THOR_DETAIL SafeBool() const;
00133
00136 T& operator* () const;
00137
00140 T* operator-> () const;
00141
00144 T* Get() const;
00145
00146
00147
00148
00149 private:
00150 detail::SmartPtrImpl<T, OwnershipPolicy> mImpl;
00151
00152
00153
00154
00155 friend struct detail::SmartPtrAccessor;
00156 };
00157
00168 template <typename T, template <typename> class OwnershipPolicy>
00169 MovedPtr<T, OwnershipPolicy> Move(CopiedPtr<T, OwnershipPolicy>& source);
00170
00180 template <typename T, template <typename> class OwnershipPolicy>
00181 MovedPtr<T, OwnershipPolicy> Copy(const CopiedPtr<T, OwnershipPolicy>& origin);
00182
00185 template <typename T, template <typename> class OwnershipPolicy>
00186 void swap(CopiedPtr<T, OwnershipPolicy>& lhs, CopiedPtr<T, OwnershipPolicy>& rhs);
00187
00189
00190 }
00191
00192 #include <Thor/Detail/CopiedPtr.inl>
00193 #endif // THOR_COPIEDPTR_HPP