CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy > Class Template Reference

#include <smart_ptr.h>

List of all members.

Classes

struct  Insipid
struct  Tester

Public Types

typedef SP::PointerType PointerType
typedef SP::StoredType StoredType
typedef SP::ReferenceType ReferenceType
typedef Select
< OP::destructiveCopy,
CSmartPtr, const CSmartPtr >
::Result 
CopyArg

Public Member Functions

 CSmartPtr ()
 CSmartPtr (ExplicitArg p)
 CSmartPtr (ImplicitArg p)
 CSmartPtr (CopyArg &rhs)
template<typename T1 , template< class > class OP1, class CP1 , template< class > class KP1, template< class > class SP1>
 CSmartPtr (const CSmartPtr< T1, OP1, CP1, KP1, SP1 > &rhs)
template<typename T1 , template< class > class OP1, class CP1 , template< class > class KP1, template< class > class SP1>
 CSmartPtr (CSmartPtr< T1, OP1, CP1, KP1, SP1 > &rhs)
 CSmartPtr (ByRef< CSmartPtr > rhs)
 operator ByRef< CSmartPtr > ()
CSmartPtroperator= (CopyArg &rhs)
template<typename T1 , template< class > class OP1, class CP1 , template< class > class KP1, template< class > class SP1>
CSmartPtroperator= (const CSmartPtr< T1, OP1, CP1, KP1, SP1 > &rhs)
template<typename T1 , template< class > class OP1, class CP1 , template< class > class KP1, template< class > class SP1>
CSmartPtroperator= (CSmartPtr< T1, OP1, CP1, KP1, SP1 > &rhs)
void Swap (CSmartPtr &rhs)
 ~CSmartPtr ()
PointerType operator-> ()
PointerType operator-> () const
ReferenceType operator* ()
ReferenceType operator* () const
bool operator! () const
template<typename T1 , template< class > class OP1, class CP1 , template< class > class KP1, template< class > class SP1>
bool operator== (const CSmartPtr< T1, OP1, CP1, KP1, SP1 > &rhs) const
template<typename T1 , template< class > class OP1, class CP1 , template< class > class KP1, template< class > class SP1>
bool operator!= (const CSmartPtr< T1, OP1, CP1, KP1, SP1 > &rhs) const
template<typename T1 , template< class > class OP1, class CP1 , template< class > class KP1, template< class > class SP1>
bool operator< (const CSmartPtr< T1, OP1, CP1, KP1, SP1 > &rhs) const
 operator unspecified_boolean_type () const
 operator AutomaticConversionResult () const

Private Types

typedef StoragePolicy< T > SP
typedef OwnershipPolicy
< typename StoragePolicy< T >
::PointerType
OP
typedef CheckingPolicy
< typename StoragePolicy< T >
::StoredType
KP
typedef ConversionPolicy CP
typedef const StoredTypeImplicitArg
typedef Select< false, const
StoredType &, NeverMatched >
::Result 
ExplicitArg
typedef Select< CP::allow,
Tester,
unspecified_boolean_type_ >
::Result 
unspecified_boolean_type
typedef Select< CP::allow,
PointerType, Insipid >::Result 
AutomaticConversionResult
typedef void(Tester::* unspecified_boolean_type_ )()

Friends

void Release (CSmartPtr &sp, typename SP::StoredType &p)
void Reset (CSmartPtr &sp, typename SP::StoredType p)


Detailed Description

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
class CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >

Definition at line 504 of file smart_ptr.h.


Member Typedef Documentation

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
typedef StoragePolicy<T> CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::SP [private]

Definition at line 510 of file smart_ptr.h.

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
typedef OwnershipPolicy<typename StoragePolicy<T>::PointerType> CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::OP [private]

Definition at line 511 of file smart_ptr.h.

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
typedef CheckingPolicy<typename StoragePolicy<T>::StoredType> CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::KP [private]

Definition at line 512 of file smart_ptr.h.

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
typedef ConversionPolicy CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::CP [private]

Definition at line 513 of file smart_ptr.h.

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
typedef SP::PointerType CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::PointerType

Definition at line 516 of file smart_ptr.h.

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
typedef SP::StoredType CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::StoredType

Definition at line 517 of file smart_ptr.h.

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
typedef SP::ReferenceType CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::ReferenceType

Definition at line 518 of file smart_ptr.h.

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
typedef Select<OP::destructiveCopy, CSmartPtr, const CSmartPtr>::Result CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::CopyArg

Definition at line 522 of file smart_ptr.h.

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
typedef const StoredType& CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::ImplicitArg [private]

Definition at line 525 of file smart_ptr.h.

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
typedef Select<false, const StoredType&, NeverMatched>::Result CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::ExplicitArg [private]

Definition at line 532 of file smart_ptr.h.

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
typedef Select<CP::allow, Tester, unspecified_boolean_type_>::Result CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::unspecified_boolean_type [private]

Definition at line 719 of file smart_ptr.h.

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
typedef Select<CP::allow, PointerType, Insipid>::Result CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::AutomaticConversionResult [private]

Definition at line 736 of file smart_ptr.h.

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
typedef void(Tester::* CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::unspecified_boolean_type_)() [private]


Constructor & Destructor Documentation

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::CSmartPtr (  )  [inline]

Definition at line 537 of file smart_ptr.h.

00538         { KP::OnDefault(GetImpl(*this)); }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::CSmartPtr ( ExplicitArg  p  )  [inline, explicit]

Definition at line 541 of file smart_ptr.h.

00541                                  : SP(p)
00542         { KP::OnInit(GetImpl(*this)); }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::CSmartPtr ( ImplicitArg  p  )  [inline]

Definition at line 544 of file smart_ptr.h.

00544                                  : SP(p)
00545         { KP::OnInit(GetImpl(*this)); }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::CSmartPtr ( CopyArg rhs  )  [inline]

Definition at line 547 of file smart_ptr.h.

00548         : SP(rhs), OP(rhs), KP(rhs), CP(rhs)
00549         { GetImplRef(*this) = OP::Clone(GetImplRef(rhs)); }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
template<typename T1 , template< class > class OP1, class CP1 , template< class > class KP1, template< class > class SP1>
CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::CSmartPtr ( const CSmartPtr< T1, OP1, CP1, KP1, SP1 > &  rhs  )  [inline]

Definition at line 559 of file smart_ptr.h.

00560         : SP(rhs), OP(rhs), KP(rhs), CP(rhs)
00561         { GetImplRef(*this) = OP::Clone(GetImplRef(rhs)); }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
template<typename T1 , template< class > class OP1, class CP1 , template< class > class KP1, template< class > class SP1>
CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::CSmartPtr ( CSmartPtr< T1, OP1, CP1, KP1, SP1 > &  rhs  )  [inline]

Definition at line 571 of file smart_ptr.h.

00572         : SP(rhs), OP(rhs), KP(rhs), CP(rhs)
00573         { GetImplRef(*this) = OP::Clone(GetImplRef(rhs)); }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::CSmartPtr ( ByRef< CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy > >  rhs  )  [inline]

Definition at line 575 of file smart_ptr.h.

00576         : SP(rhs), OP(rhs), KP(rhs), CP(rhs)
00577         {}

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::~CSmartPtr (  )  [inline]

Definition at line 627 of file smart_ptr.h.

00628         {
00629             if (OP::Release(GetImpl(*static_cast<SP*>(this))))
00630             {
00631                 SP::Destroy();
00632             }
00633         }


Member Function Documentation

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::operator ByRef< CSmartPtr > (  )  [inline]

Definition at line 579 of file smart_ptr.h.

00580         { return ByRef<CSmartPtr>(*this); }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
CSmartPtr& CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::operator= ( CopyArg rhs  )  [inline]

Definition at line 582 of file smart_ptr.h.

00583         {
00584             CSmartPtr temp(rhs);
00585             temp.Swap(*this);
00586             return *this;
00587         }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
template<typename T1 , template< class > class OP1, class CP1 , template< class > class KP1, template< class > class SP1>
CSmartPtr& CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::operator= ( const CSmartPtr< T1, OP1, CP1, KP1, SP1 > &  rhs  )  [inline]

Definition at line 597 of file smart_ptr.h.

00598         {
00599             CSmartPtr temp(rhs);
00600             temp.Swap(*this);
00601             return *this;
00602         }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
template<typename T1 , template< class > class OP1, class CP1 , template< class > class KP1, template< class > class SP1>
CSmartPtr& CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::operator= ( CSmartPtr< T1, OP1, CP1, KP1, SP1 > &  rhs  )  [inline]

Definition at line 612 of file smart_ptr.h.

00613         {
00614             CSmartPtr temp(rhs);
00615             temp.Swap(*this);
00616             return *this;
00617         }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
void CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::Swap ( CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy > &  rhs  )  [inline]

Definition at line 619 of file smart_ptr.h.

00620         {
00621             OP::Swap(rhs);
00622             CP::Swap(rhs);
00623             KP::Swap(rhs);
00624             SP::Swap(rhs);
00625         }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
PointerType CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::operator-> (  )  [inline]

Definition at line 644 of file smart_ptr.h.

00645         {
00646             KP::OnDereference(GetImplRef(*this));
00647             return SP::operator->();
00648         }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
PointerType CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::operator-> (  )  const [inline]

Definition at line 650 of file smart_ptr.h.

00651         {
00652             KP::OnDereference(GetImplRef(*this));
00653             return SP::operator->();
00654         }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
ReferenceType CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::operator* (  )  [inline]

Definition at line 656 of file smart_ptr.h.

00657         {
00658             KP::OnDereference(GetImplRef(*this));
00659             return SP::operator*();
00660         }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
ReferenceType CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::operator* (  )  const [inline]

Definition at line 662 of file smart_ptr.h.

00663         {
00664             KP::OnDereference(GetImplRef(*this));
00665             return SP::operator*();
00666         }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
bool CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::operator! (  )  const [inline]

Definition at line 668 of file smart_ptr.h.

00669         { return GetImpl(*this) == 0; }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
template<typename T1 , template< class > class OP1, class CP1 , template< class > class KP1, template< class > class SP1>
bool CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::operator== ( const CSmartPtr< T1, OP1, CP1, KP1, SP1 > &  rhs  )  const [inline]

Definition at line 681 of file smart_ptr.h.

00682         { return GetImpl(*this) == GetImpl(rhs); }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
template<typename T1 , template< class > class OP1, class CP1 , template< class > class KP1, template< class > class SP1>
bool CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::operator!= ( const CSmartPtr< T1, OP1, CP1, KP1, SP1 > &  rhs  )  const [inline]

Definition at line 693 of file smart_ptr.h.

00694         { return !(*this == rhs); }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
template<typename T1 , template< class > class OP1, class CP1 , template< class > class KP1, template< class > class SP1>
bool CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::operator< ( const CSmartPtr< T1, OP1, CP1, KP1, SP1 > &  rhs  )  const [inline]

Definition at line 705 of file smart_ptr.h.

00706         { return GetImpl(*this) < GetImpl(rhs); }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::operator unspecified_boolean_type (  )  const [inline]

Definition at line 723 of file smart_ptr.h.

00724         {
00725             return !*this ? 0 : &Tester::dummy;
00726         }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy >::operator AutomaticConversionResult (  )  const [inline]

Definition at line 739 of file smart_ptr.h.

00740         { return GetImpl(*this); }


Friends And Related Function Documentation

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
void Release ( CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy > &  sp,
typename SP::StoredType &  p 
) [friend]

Definition at line 635 of file smart_ptr.h.

00636         {
00637             p = GetImplRef(sp);
00638             GetImplRef(sp) = SP::Default();
00639         }

template<typename T, template< class > class OwnershipPolicy, class ConversionPolicy, template< class > class CheckingPolicy, template< class > class StoragePolicy>
void Reset ( CSmartPtr< T, OwnershipPolicy, ConversionPolicy, CheckingPolicy, StoragePolicy > &  sp,
typename SP::StoredType  p 
) [friend]

Definition at line 641 of file smart_ptr.h.

00642         { CSmartPtr(p).Swap(sp); }


The documentation for this class was generated from the following file:

Generated on Tue Aug 30 02:36:58 2011 for Smacky by  doxygen 1.5.8