Corrected comments. Added operator= function. Improved efficiency of
dtor. Other minor changes. git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@641 7ec92016-0320-0410-acc4-a06ded1c099a
This commit is contained in:
parent
5a1e25a204
commit
0e8b336c0a
1 changed files with 33 additions and 14 deletions
|
@ -531,8 +531,8 @@ private:
|
||||||
/// This implementation of StrongPtr's OwnershipPolicy uses a pointer to a
|
/// This implementation of StrongPtr's OwnershipPolicy uses a pointer to a
|
||||||
/// shared instance of TwoRefCountInfo. This is the default policy for
|
/// shared instance of TwoRefCountInfo. This is the default policy for
|
||||||
/// OwnershipPolicy. Some functions are trivial enough to be inline, while
|
/// OwnershipPolicy. Some functions are trivial enough to be inline, while
|
||||||
/// others are implemented in elsewhere. It is not thread safe, and is
|
/// others are implemented elsewhere. It is not thread safe, and is intended
|
||||||
/// intended for single-threaded environments.
|
/// for single-threaded environments.
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
class LOKI_EXPORT TwoRefCounts
|
class LOKI_EXPORT TwoRefCounts
|
||||||
|
@ -572,16 +572,18 @@ protected:
|
||||||
|
|
||||||
void ZapPointer( void );
|
void ZapPointer( void );
|
||||||
|
|
||||||
inline void * GetPointer( void ) const
|
|
||||||
{
|
|
||||||
return m_counts->GetPointer();
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void * & GetPointerRef( void ) const
|
inline void * & GetPointerRef( void ) const
|
||||||
{
|
{
|
||||||
return m_counts->GetPointerRef();
|
return m_counts->GetPointerRef();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
inline void * GetPointer( void ) const
|
||||||
|
{
|
||||||
|
return m_counts->GetPointer();
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TwoRefCounts( void );
|
TwoRefCounts( void );
|
||||||
TwoRefCounts & operator = ( const TwoRefCounts & );
|
TwoRefCounts & operator = ( const TwoRefCounts & );
|
||||||
|
@ -597,7 +599,7 @@ private:
|
||||||
/// This implementation of StrongPtr's OwnershipPolicy uses a pointer to a
|
/// This implementation of StrongPtr's OwnershipPolicy uses a pointer to a
|
||||||
/// shared instance of LockableTwoRefCountInfo. It behaves very similarly to
|
/// shared instance of LockableTwoRefCountInfo. It behaves very similarly to
|
||||||
/// TwoRefCounts, except that it provides thread-safety. Some functions are
|
/// TwoRefCounts, except that it provides thread-safety. Some functions are
|
||||||
/// trivial enough to be inline, while others are implemented in elsewhere.
|
/// trivial enough to be inline, while others are implemented elsewhere.
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
class LOKI_EXPORT LockableTwoRefCounts
|
class LOKI_EXPORT LockableTwoRefCounts
|
||||||
|
@ -767,8 +769,6 @@ class StrongPtr
|
||||||
, public ResetPolicy< T >
|
, public ResetPolicy< T >
|
||||||
, public DeletePolicy< T >
|
, public DeletePolicy< T >
|
||||||
{
|
{
|
||||||
|
|
||||||
typedef OwnershipPolicy OP;
|
|
||||||
typedef ConversionPolicy CP;
|
typedef ConversionPolicy CP;
|
||||||
typedef CheckingPolicy< T * > KP;
|
typedef CheckingPolicy< T * > KP;
|
||||||
typedef ResetPolicy< T > RP;
|
typedef ResetPolicy< T > RP;
|
||||||
|
@ -776,6 +776,8 @@ class StrongPtr
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
typedef OwnershipPolicy OP;
|
||||||
|
|
||||||
typedef T * StoredType; // the type of the pointer
|
typedef T * StoredType; // the type of the pointer
|
||||||
typedef T * PointerType; // type returned by operator->
|
typedef T * PointerType; // type returned by operator->
|
||||||
typedef T & ReferenceType; // type returned by operator*
|
typedef T & ReferenceType; // type returned by operator*
|
||||||
|
@ -829,7 +831,7 @@ public:
|
||||||
>
|
>
|
||||||
StrongPtr(
|
StrongPtr(
|
||||||
const StrongPtr< T1, S1, OP1, CP1, KP1, RP1, DP1, CNP1 > & rhs )
|
const StrongPtr< T1, S1, OP1, CP1, KP1, RP1, DP1, CNP1 > & rhs )
|
||||||
: OP( rhs, Strong ), CP( rhs ), KP( rhs ), DP( rhs )
|
: OP( rhs, Strong )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -846,7 +848,7 @@ public:
|
||||||
>
|
>
|
||||||
StrongPtr(
|
StrongPtr(
|
||||||
StrongPtr< T1, S1, OP1, CP1, KP1, RP1, DP1, CNP1 > & rhs )
|
StrongPtr< T1, S1, OP1, CP1, KP1, RP1, DP1, CNP1 > & rhs )
|
||||||
: OP( rhs, Strong ), CP( rhs ), KP( rhs ), DP( rhs )
|
: OP( rhs, Strong )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -870,6 +872,16 @@ public:
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StrongPtr & operator = ( T * p )
|
||||||
|
{
|
||||||
|
if ( GetPointer() != p )
|
||||||
|
{
|
||||||
|
StrongPtr temp( p );
|
||||||
|
Swap( temp );
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
template
|
template
|
||||||
<
|
<
|
||||||
typename T1,
|
typename T1,
|
||||||
|
@ -915,8 +927,11 @@ public:
|
||||||
// undefined behavior. Therefore, this must get pointer before
|
// undefined behavior. Therefore, this must get pointer before
|
||||||
// zapping it, and then delete the temp pointer.
|
// zapping it, and then delete the temp pointer.
|
||||||
T * p = GetPointer();
|
T * p = GetPointer();
|
||||||
OP::ZapPointer();
|
if ( p != 0 )
|
||||||
DP::Delete( p );
|
{
|
||||||
|
OP::ZapPointer();
|
||||||
|
DP::Delete( p );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1467,6 +1482,10 @@ namespace std
|
||||||
#endif // end file guardian
|
#endif // end file guardian
|
||||||
|
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.6 2006/04/21 21:45:17 rich_sposato
|
||||||
|
// Corrected comments. Added operator= function. Improved efficiency of
|
||||||
|
// dtor. Other minor changes.
|
||||||
|
//
|
||||||
// Revision 1.5 2006/04/19 01:04:26 rich_sposato
|
// Revision 1.5 2006/04/19 01:04:26 rich_sposato
|
||||||
// Changed DeleteSingle and DeleteArray policy to not allow use of incomplete
|
// Changed DeleteSingle and DeleteArray policy to not allow use of incomplete
|
||||||
// types.
|
// types.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue