Rosetta Utilities  2015.09
Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Attributes | List of all members
utility::SingletonBase< T > Class Template Reference

SingletonBase is meant to serve as a base class for singleton classes in Rosetta handling the initialization of the singleton in a thread-safe way. More...

#include <SingletonBase.hh>

Public Member Functions

 SingletonBase ()
 public constructor (the derived class must have a private constructor, of course). More...
 

Static Public Member Functions

static T * get_instance ()
 Safely instantiate a singleton class in a (possibly) multithreaded context. More...
 

Private Member Functions

 SingletonBase (SingletonBase< T > const &)
 Private, unimplemented copy constructor – uncopyable. More...
 
SingletonBase< T > const & operator= (SingletonBase< T > const &rhs)
 Private, unimplemented assignment operator – uncopyable. More...
 
template<>
WriteableCacheableDataFactoryinstance_ (0)
 
template<>
MessageListenerFactoryinstance_ (0)
 
template<>
FallbackConfigurationFactoryinstance_ (0)
 
template<>
ResourceLoaderFactoryinstance_ (0)
 
template<>
ResourceLocatorFactoryinstance_ (0)
 
template<>
ResourceManagerinstance_ (0)
 
template<>
ResourceManagerFactoryinstance_ (0)
 
template<>
ResourceOptionsFactoryinstance_ (0)
 
template<>
QuaternionGridManagerinstance_ (0)
 
template<>
Inline_File_Providerinstance_ (0)
 

Static Private Attributes

static T * instance_
 

Detailed Description

template<class T>
class utility::SingletonBase< T >

SingletonBase is meant to serve as a base class for singleton classes in Rosetta handling the initialization of the singleton in a thread-safe way.

The derived class must a) implement a private, static function: T * create_singleton_instance() so that the SingletonBase class can invoke this function, and b) declare the SingletonBase class to be a friend, so that it can invoke this function The .cc file in which the derived singleton must be put will need to include the definitions for the two static data members, instance_ and singleton_mutex_.

Constructor & Destructor Documentation

template<class T>
utility::SingletonBase< T >::SingletonBase ( )
inline

public constructor (the derived class must have a private constructor, of course).

template<class T>
utility::SingletonBase< T >::SingletonBase ( SingletonBase< T > const &  )
private

Private, unimplemented copy constructor – uncopyable.

Member Function Documentation

template<class T>
static T* utility::SingletonBase< T >::get_instance ( )
inlinestatic

Safely instantiate a singleton class in a (possibly) multithreaded context.

In the non-multithreaded case, this simply checks the singleton's instance member; in the multithreaded case, it checks the instance member, then it obtains the singleton's instance-creation mutex, then it checks the instance member again, to ensure that no other thread has already created the instance, it creates the instance, and then it releases the mutex.

template<>
Inline_File_Provider * utility::SingletonBase< Inline_File_Provider >::instance_ ( )
private
template<>
ResourceManagerFactory * utility::SingletonBase< ResourceManagerFactory >::instance_ ( )
private
template<>
ResourceLocatorFactory * utility::SingletonBase< ResourceLocatorFactory >::instance_ ( )
private
template<>
ResourceLoaderFactory * utility::SingletonBase< ResourceLoaderFactory >::instance_ ( )
private
template<>
MessageListenerFactory * utility::SingletonBase< MessageListenerFactory >::instance_ ( )
private
template<>
ResourceOptionsFactory * utility::SingletonBase< ResourceOptionsFactory >::instance_ ( )
private
template<>
ResourceManager * utility::SingletonBase< ResourceManager >::instance_ ( )
private
template<>
QuaternionGridManager * utility::SingletonBase< QuaternionGridManager >::instance_ ( )
private
template<class T>
SingletonBase< T > const& utility::SingletonBase< T >::operator= ( SingletonBase< T > const &  rhs)
private

Private, unimplemented assignment operator – uncopyable.

Member Data Documentation

template<class T>
T* utility::SingletonBase< T >::instance_
staticprivate

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