TAO-specific Singleton class. More...
#include <TAO_Singleton.h>
Public Member Functions | |
virtual void | cleanup (void *param=0) |
Static Public Member Functions | |
static TYPE * | instance (void) |
Global access point to the Singleton. | |
static void | dump (void) |
Dump the state of the object. | |
Protected Member Functions | |
TAO_Singleton (void) | |
Default constructor. | |
Static Protected Member Functions | |
static TAO_Singleton< TYPE, ACE_LOCK > *& | instance_i (void) |
Get pointer to the TAO Singleton instance. | |
Protected Attributes | |
TYPE | instance_ |
Contained instance. | |
Static Protected Attributes | |
static TAO_Singleton< TYPE, ACE_LOCK > * | singleton_ = 0 |
Pointer to the Singleton (ACE_Cleanup) instance. |
TAO-specific Singleton class.
TAO_Singletons are used by TAO to register TAO-specific singleton instances with the TAO_Object_Manager. This ensures that TAO singletons are isolated from ACE's Object_Manager, thus allowing TAO to be safely dynamically unloaded.
Definition at line 47 of file TAO_Singleton.h.
TAO_Singleton< TYPE, ACE_LOCK >::TAO_Singleton | ( | void | ) | [protected] |
void TAO_Singleton< TYPE, ACE_LOCK >::cleanup | ( | void * | param = 0 |
) | [virtual] |
Cleanup method, used by ace_cleanup_destroyer
to destroy the singleton.
Reimplemented from ACE_Cleanup.
Definition at line 108 of file TAO_Singleton.cpp.
{ delete this; TAO_Singleton<TYPE, ACE_LOCK>::instance_i () = 0; }
void TAO_Singleton< TYPE, ACE_LOCK >::dump | ( | void | ) | [static] |
Dump the state of the object.
Definition at line 28 of file TAO_Singleton.cpp.
{ #if defined (ACE_HAS_DUMP) ACE_TRACE ("TAO_Singleton<TYPE, ACE_LOCK>::dump"); #if !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES) ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("instance_ = %x"), TAO_Singleton<TYPE, ACE_LOCK>::instance_i ())); ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); #endif /* ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES */ #endif /* ACE_HAS_DUMP */ }
TYPE * TAO_Singleton< TYPE, ACE_LOCK >::instance | ( | void | ) | [static] |
Global access point to the Singleton.
Definition at line 56 of file TAO_Singleton.cpp.
{ ACE_TRACE ("TAO_Singleton<TYPE, ACE_LOCK>::instance"); TAO_Singleton<TYPE, ACE_LOCK> *&singleton = TAO_Singleton<TYPE, ACE_LOCK>::instance_i (); // Perform the Double-Check pattern... if (singleton == 0) { if (TAO_Singleton_Manager::starting_up () || TAO_Singleton_Manager::shutting_down ()) { // The program is still starting up, and therefore assumed // to be single threaded. There's no need to double-check. // Or, the TAO_Singleton_Manager instance has been destroyed, // so the preallocated lock is not available. Either way, // don't register for destruction with the // TAO_Singleton_Manager: we'll have to leak this instance. ACE_NEW_RETURN (singleton, (TAO_Singleton<TYPE, ACE_LOCK>), 0); } else { #if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) // Obtain a lock from the ACE_Object_Manager. The pointer // is static, so we only obtain one per TAO_Singleton // instantiation. static ACE_LOCK *lock = 0; if (ACE_Object_Manager::get_singleton_lock (lock) != 0) // Failed to acquire the lock! return 0; ACE_GUARD_RETURN (ACE_LOCK, ace_mon, *lock, 0); if (singleton == 0) { #endif /* ACE_MT_SAFE */ ACE_NEW_RETURN (singleton, (TAO_Singleton<TYPE, ACE_LOCK>), 0); // Register for destruction with TAO_Singleton_Manager. TAO_Singleton_Manager::at_exit (singleton, 0, typeid (TYPE).name()); #if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) } #endif /* ACE_MT_SAFE */ } } return &singleton->instance_; }
TAO_Singleton< TYPE, ACE_LOCK > *& TAO_Singleton< TYPE, ACE_LOCK >::instance_i | ( | void | ) | [static, protected] |
Get pointer to the TAO Singleton instance.
Definition at line 42 of file TAO_Singleton.cpp.
{ #if defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES) // Pointer to the Singleton instance. This works around a bug with // G++ and it's (mis-)handling of templates and statics... static TAO_Singleton<TYPE, ACE_LOCK> *singleton_ = 0; return singleton_; #else return TAO_Singleton<TYPE, ACE_LOCK>::singleton_; #endif /* ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES */ }
TYPE TAO_Singleton< TYPE, ACE_LOCK >::instance_ [protected] |
Contained instance.
Definition at line 66 of file TAO_Singleton.h.
TAO_Singleton< TYPE, ACE_LOCK > * TAO_Singleton< TYPE, ACE_LOCK >::singleton_ = 0 [static, protected] |
Pointer to the Singleton (ACE_Cleanup) instance.
Definition at line 70 of file TAO_Singleton.h.