21 #ifndef CAELUM__PRIVATE_PTR_H 22 #define CAELUM__PRIVATE_PTR_H 36 template<
class Po
intedT>
48 static inline PointedT*
getPointer (
const InnerPointerType& inner) {
53 static void destroy (InnerPointerType& inner)
80 template<
class Po
intedT,
typename TraitsT = DefaultPrivatePtrTraits<Po
intedT> >
88 InnerPointerType mInner;
94 void reset (
const InnerPointerType& newInner = TraitsT::getNullValue()) {
95 if (mInner == newInner) {
98 TraitsT::destroy (mInner);
102 InnerPointerType release () {
103 InnerPointerType result = mInner;
104 mInner = TraitsT::getNullValue();
114 PrivatePtr (
const InnerPointerType& inner) { mInner = inner; }
125 this->reset (rhs.mInner);
126 rhs.mInner = TraitsT::getNullValue ();
135 this->reset (rhs.mInner);
136 rhs.mInner = TraitsT::getNullValue ();
142 bool isNull ()
const {
return mInner == TraitsT::getNullValue (); }
146 TraitsT::destroy (mInner);
147 assert(this->isNull());
150 PointedT*
getPointer ()
const {
return TraitsT::getPointer (mInner); }
151 PointedT*
get ()
const {
return getPointer (); }
152 PointedT* operator-> ()
const {
return getPointer (); }
153 PointedT& operator* ()
const{
return *
getPointer (); }
159 template<
class MovableT>
164 static void destroy (InnerPointerType& inner)
169 inner->_getManager ()->destroyMovableObject (inner);
189 static void destroy (InnerPointerType& inner)
194 inner->getCreator ()->destroySceneNode (inner->getName ());
219 template<
class Po
intedT,
class InnerT,
class ManagerT>
228 static PointedT*
getPointer (
const InnerPointerType& inner) {
229 return inner.getPointer ();
232 static void destroy (InnerPointerType& inner) {
233 if (!inner.isNull ()) {
238 ManagerT::getSingletonPtr ()->remove (inner->getHandle ());
239 assert (inner.unique () &&
"Resource pointer not unique after destruction");
250 Ogre::MaterialManager
264 #endif // CAELUM__PRIVATE_PTR_H PrivatePtr traits for uniquely-owned resources.
~PrivatePtr()
Non-virtual destructor (don't derive from this).
static void destroy(InnerPointerType &inner)
Destroy the inner value (and set null).
PrivatePtr traits for a movable object.
PrivatePtr traits for a scene node.
static const InnerPointerType getNullValue()
Return an InnerPointerType repressenting a null value.
PrivatePtr(PrivatePtr &rhs)
Copy constructor; clears right-hand-side.
PrivatePtr(const InnerPointerType &inner)
Initializing constructur.
PrivatePtr()
Constructor; always initialize to 0.
PointedT * InnerPointerType
The type of the inner member to hold in PrivatePtr.
bool isNull() const
Check if this is null.
Template for smart pointers with strict unique ownership.
void reset(const InnerPointerType &newInner=TraitsT::getNullValue())
Change the inner value.
void setNull()
Set to null and destroy contents (if any).
static PointedT * getPointer(const InnerPointerType &inner)
Convert InnerPointerType to a naked PointedT.
Default traits for Caelum::PrivatePtr.