You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
2.7 KiB
135 lines
2.7 KiB
//=================================================================
|
|
|
|
//
|
|
|
|
// refptrlite.CPP - Implementation of CRefPtrLite class
|
|
|
|
//
|
|
|
|
// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
|
|
//
|
|
// Revisions: 10/15/97 a-sanjes Created
|
|
//
|
|
//=================================================================
|
|
|
|
#include "precomp.h"
|
|
#include <assertbreak.h>
|
|
#include "refptrlite.h"
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Function: CRefPtrLite::CRefPtrLite
|
|
//
|
|
// Class Constructor.
|
|
//
|
|
// Inputs: None.
|
|
//
|
|
// Outputs: None.
|
|
//
|
|
// Return: None.
|
|
//
|
|
// Comments: None.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
CRefPtrLite::CRefPtrLite( void )
|
|
: m_lRefCount( 1 ) // Our initial ref count is always 1
|
|
{
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Function: CRefPtrLite::~CRefPtrLite
|
|
//
|
|
// Class Destructor.
|
|
//
|
|
// Inputs: None.
|
|
//
|
|
// Outputs: None.
|
|
//
|
|
// Return: None.
|
|
//
|
|
// Comments: None.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
CRefPtrLite::~CRefPtrLite( void )
|
|
{
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Function: CRefPtrLite::OnFinalRelease
|
|
//
|
|
// Virtual function called by Release() when our RefCount reaches 0.
|
|
//
|
|
// Inputs: None.
|
|
//
|
|
// Outputs: None.
|
|
//
|
|
// Return: None.
|
|
//
|
|
// Comments: Override if you want, but always call down to the base
|
|
// implementation and let it call delete on 'this'.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
void CRefPtrLite::OnFinalRelease( void )
|
|
{
|
|
delete this;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Function: CRefPtrLite::AddRef
|
|
//
|
|
// Increases our Reference count by one.
|
|
//
|
|
// Inputs: None.
|
|
//
|
|
// Outputs: None.
|
|
//
|
|
// Return: None.
|
|
//
|
|
// Comments:
|
|
//
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
LONG CRefPtrLite::AddRef( void )
|
|
{
|
|
LONG nRet = InterlockedIncrement(&m_lRefCount);
|
|
|
|
return nRet;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Function: CRefPtrLite::Release
|
|
//
|
|
// Decreases our Reference count by one.
|
|
//
|
|
// Inputs: None.
|
|
//
|
|
// Outputs: None.
|
|
//
|
|
// Return: None.
|
|
//
|
|
// Comments:
|
|
//
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
LONG CRefPtrLite::Release( void )
|
|
{
|
|
LONG nRet;
|
|
|
|
BOOL fFinalRelease = ( (nRet = InterlockedDecrement(&m_lRefCount)) == 0 );
|
|
|
|
ASSERT_BREAK(nRet >= 0);
|
|
|
|
if ( fFinalRelease )
|
|
{
|
|
OnFinalRelease();
|
|
}
|
|
|
|
return nRet;
|
|
}
|