#if !defined(_INLINE)
static char cvsid[] = "@(#)$Id: LinkManager.cpp,v 1.3 1999/03/03 19:09:27 philogelos Exp $";
static char debugFileId[] = __FILE__;
#endif
#include "LinkManager.hpp"
#include "MemoryMonitor.hpp"
#include "Debug.hpp"
#include "String.hpp"
LinkManager::LinkManager()
{}
LinkManager::~LinkManager()
{}
LinkManager *LinkManager::getInstance()
{
if( instance == ( LinkManager * ) NIL )
{
initClass();
}
test_( instance != ( LinkManager * ) NIL );
return instance;
}
void LinkManager::initClass()
{
instance = new LinkManager();
}
void LinkManager::reg( const Top *aFrom, const Top *aTo )
{
getInstance() -> regImpl( aFrom, aTo );
}
void LinkManager::unreg( const Top *aFrom, const Top *aTo )
{
getInstance() -> unregImpl( aFrom, aTo );
}
void LinkManager::free( const Top *aFrom, const Top *aTo )
{
getInstance() -> freeImpl( aFrom, aTo );
}
void LinkManager::move( const Top *anOwner, const Top *aFrom, const Top *aTo )
{
getInstance() -> moveImpl( anOwner, aFrom, aTo );
}
void LinkManager::recycle( const Top *anObject )
{
getInstance() -> recycleImpl( anObject );
}
void LinkManager::regImpl( const Top *aFrom, const Top *aTo )
{
preC_( aFrom != nil );
preC_( aTo != nil );
aTo -> addRef();
}
void LinkManager::unregImpl( const Top *aFrom, const Top *aTo )
{
preC_( aFrom != nil );
preC_( aTo != nil );
aTo -> delRef();
}
void LinkManager::freeImpl( const Top *aFrom, const Top *aTo )
{
preC_( aFrom != nil );
preC_( aTo != nil );
unreg( aFrom, aTo );
recycle( aTo );
}
void LinkManager::moveImpl( const Top *anOwner, const Top *aFrom, const Top *aTo )
{
if( aTo != null )
{
reg( anOwner, aTo );
}
if( aFrom != null )
{
free( anOwner, aFrom );
}
}
void LinkManager::recycleImpl( const Top *anObject )
{
preC_( anObject != nil );
if( !( anObject -> isRef() ) )
{
if( ! ( anObject -> isBeingDeleted() ) )
{
anObject -> setBeingDeleted( true );
delete ( Top * ) anObject;
}
}
}
Top *LinkManager::clone() const
{
return new LinkManager();
}
String LinkManager::getClassName() const
{
return "LinkManager";
}
LinkManager *LinkManager::instance = ( LinkManager * ) NIL;
#if defined(_INLINE)
#include "../src/Debug.ipp"
#endif
#if defined(_INLINE)
#include "../src/String.ipp"
#endif