/* -*- Base: 10 ; Mode: C++ -*- */
/*------------------------------------------------------------------------
**
FOST project
**
--------------------------------------------------------------------------
--------------------------------------------------------------------------
FILE LOG
$Revision: 1.2 $ $Date: 2011-06-23 15:46:09 $
--------------------------------------------------------------------------
CREATION
F.CASIMIR
SUMMARY
DESCRIPTION
The main function performs the following actions :
------------------------------------------------------------------------*/
//=============================================================================
//
// History of code
//
// creation
//
// modification
//=============================================================================
#ifndef _PATTERN_SINGLETON_HH_
#define _PATTERN_SINGLETON_HH_ 1
#include
/**
*/
//=============================================================================
// Class Singleton
//=============================================================================
/*------------------------------------------------------------------------
CLASS
KEYWORDS
DESCRIPTION
------------------------------------------------------------------------*/
template< class T >
class Singleton
{
public:
/**
@return the only instance of C object
*/
static T* getInstance(void);
/**
*/
static void releaseInstance();
protected:
/**
Constructor (default one)
*/
Singleton() {};
/**
Copy Constructor (normally should not be used)
*/
Singleton(const Singleton& copied) {};
/**
Destructor
*/
virtual ~Singleton() {};
// Get Methods
// Set Methods
// Other Methods
//FIELDS
private:
// Static current instance
static T* _singleton;
static boost::mutex _pointerAccessMutex;
};
//=============================================================================
// Inline Methods for Class Singleton
//=============================================================================
// Initialisation
template T* Singleton::_singleton = 0;
template boost::mutex Singleton::_pointerAccessMutex;
//-----------------------------------------------------------------------------
// Get Methods
//-----------------------------------------------------------------------------
// Set Methods
//-----------------------------------------------------------------------------
// Other Methods
template< class T >
T* Singleton::getInstance(void)
{
if( _singleton==0 )
{
boost::lock_guard lock(_pointerAccessMutex);
if( _singleton==0 )
{
_singleton = new T;
}
}
return _singleton;
}
template< class T >
void Singleton::releaseInstance()
{
if ( _singleton!=0 )
{
boost::lock_guard lock(_pointerAccessMutex);
if ( _singleton!=0 )
{
delete _singleton ;
_singleton=0;
}
}
}
//=============================================================================
// End of Class Singleton
//=============================================================================
#endif // _PATTERN_SINGLETON_HH_