Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

ACE_TSS_Singleton Class Template Reference

This class uses the Adapter pattern to turn ordinary classes into Thread-specific Singletons optimized with the Double-Checked Locking optimization pattern. More...

#include <Singleton.h>

Inheritance diagram for ACE_TSS_Singleton:

Inheritance graph
[legend]
Collaboration diagram for ACE_TSS_Singleton:

Collaboration graph
[legend]
List of all members.

Public Methods

virtual void cleanup (void *param=0)
 Cleanup method, used by <ace_cleanup_destroyer> to destroy the singleton. More...


Static Public Methods

TYPE * instance (void)
 Global access point to the Singleton. More...

void dump (void)
 Dump the state of the object. More...


Protected Methods

 ACE_TSS_Singleton (void)
 Default constructor. More...

 ACE_TSS_TYPE (TYPE) instance_
 Contained instance. More...

void operator= (const ACE_TSS_Singleton< TYPE, ACE_LOCK > &)
 ACE_TSS_Singleton (const ACE_TSS_Singleton< TYPE, ACE_LOCK > &)

Static Protected Methods

ACE_TSS_Singleton< TYPE, ACE_LOCK > *& instance_i (void)
 Get pointer to the TSS Singleton instance. More...


Static Protected Attributes

ACE_TSS_Singleton< TYPE, ACE_LOCK > * singleton_ = 0
 Pointer to the Singleton (ACE_Cleanup) instance. More...


Detailed Description

template<class TYPE, class ACE_LOCK>
class ACE_TSS_Singleton< TYPE, ACE_LOCK >

This class uses the Adapter pattern to turn ordinary classes into Thread-specific Singletons optimized with the Double-Checked Locking optimization pattern.

This implementation is another variation on the GoF Singleton pattern. In this case, a single <ACE_TSS_Singleton<TYPE, LOCK> > instance is allocated here, not a <TYPE> instance. Each call to the <instance> static method returns a Singleton whose pointer resides in thread-specific storage. As with <ACE_Singleton>, we use the <ACE_Object_Manager> so that the Singleton can be cleaned up when the process exits. For this scheme to work, a (static) <cleanup> function must be provided. <ACE_Singleton> provides one so that TYPE doesn't need to.


Constructor & Destructor Documentation

template<class TYPE, class ACE_LOCK>
ACE_INLINE ACE_TSS_Singleton< TYPE, ACE_LOCK >::ACE_TSS_Singleton void    [protected]
 

Default constructor.

template<class TYPE, class ACE_LOCK>
ACE_TSS_Singleton< TYPE, ACE_LOCK >::ACE_TSS_Singleton const ACE_TSS_Singleton< TYPE, ACE_LOCK > &    [protected]
 


Member Function Documentation

template<class TYPE, class ACE_LOCK>
ACE_TSS_Singleton< TYPE, ACE_LOCK >::ACE_TSS_TYPE TYPE    [protected]
 

Contained instance.

template<class TYPE, class ACE_LOCK>
void ACE_TSS_Singleton< TYPE, ACE_LOCK >::cleanup void *    param = 0 [virtual]
 

Cleanup method, used by <ace_cleanup_destroyer> to destroy the singleton.

Reimplemented from ACE_Cleanup.

template<class TYPE, class ACE_LOCK>
void ACE_TSS_Singleton< TYPE, ACE_LOCK >::dump void    [static]
 

Dump the state of the object.

Reimplemented in ACE_Unmanaged_TSS_Singleton.

template<class TYPE, class ACE_LOCK>
TYPE * ACE_TSS_Singleton< TYPE, ACE_LOCK >::instance void    [static]
 

Global access point to the Singleton.

Reimplemented in ACE_Unmanaged_TSS_Singleton.

template<class TYPE, class ACE_LOCK>
ACE_TSS_Singleton< TYPE, ACE_LOCK > *& ACE_TSS_Singleton< TYPE, ACE_LOCK >::instance_i void    [static, protected]
 

Get pointer to the TSS Singleton instance.

Reimplemented in ACE_Unmanaged_TSS_Singleton.

template<class TYPE, class ACE_LOCK>
void ACE_TSS_Singleton< TYPE, ACE_LOCK >::operator= const ACE_TSS_Singleton< TYPE, ACE_LOCK > &    [protected]
 


Member Data Documentation

template<class TYPE, class ACE_LOCK>
ACE_TSS_Singleton< TYPE, ACE_LOCK > * ACE_TSS_Singleton< TYPE, ACE_LOCK >::singleton_ = 0 [static, protected]
 

Pointer to the Singleton (ACE_Cleanup) instance.

Reimplemented in ACE_Unmanaged_TSS_Singleton.


The documentation for this class was generated from the following files:
Generated on Thu May 23 00:24:08 2002 for ACE by doxygen1.2.13.1 written by Dimitri van Heesch, © 1997-2001