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_TSS_Singleton (void) | |
| Default constructor. | |
| ACE_TSS_TYPE (TYPE) instance_ | |
| Contained instance. | |
Static Protected Member Functions | |
| static TAO_TSS_Singleton< TYPE, ACE_LOCK > *& | instance_i (void) |
| Get pointer to the TAO TSS Singleton instance. | |
Static Protected Attributes | |
| static TAO_TSS_Singleton< TYPE, ACE_LOCK > * | singleton_ = 0 |
| Pointer to the Singleton (ACE_Cleanup) instance. | |
Private Member Functions | |
| void | operator= (const TAO_TSS_Singleton< TYPE, ACE_LOCK > &) |
| TAO_TSS_Singleton (const TAO_TSS_Singleton< TYPE, ACE_LOCK > &) | |
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 89 of file TAO_Singleton.h.
| TAO_TSS_Singleton< TYPE, ACE_LOCK >::TAO_TSS_Singleton | ( | void | ) | [protected] |
| TAO_TSS_Singleton< TYPE, ACE_LOCK >::TAO_TSS_Singleton | ( | const TAO_TSS_Singleton< TYPE, ACE_LOCK > & | ) | [private] |
| TAO_TSS_Singleton< TYPE, ACE_LOCK >::ACE_TSS_TYPE | ( | TYPE | ) | [protected] |
Contained instance.
| void TAO_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.
Definition at line 206 of file TAO_Singleton.cpp.
{
delete this;
TAO_TSS_Singleton<TYPE, ACE_LOCK>::instance_i () = 0;
}
| void TAO_TSS_Singleton< TYPE, ACE_LOCK >::dump | ( | void | ) | [static] |
Dump the state of the object.
Definition at line 125 of file TAO_Singleton.cpp.
{
#if defined (ACE_HAS_DUMP)
ACE_TRACE ("TAO_TSS_Singleton<TYPE, ACE_LOCK>::dump");
#if !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES)
ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("instance_ = %x"),
TAO_TSS_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_TSS_Singleton< TYPE, ACE_LOCK >::instance | ( | void | ) | [static] |
Global access point to the Singleton.
Definition at line 153 of file TAO_Singleton.cpp.
{
ACE_TRACE ("TAO_TSS_Singleton<TYPE, ACE_LOCK>::instance");
TAO_TSS_Singleton<TYPE, ACE_LOCK> *&singleton =
TAO_TSS_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_TSS_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_TSS_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 ACE_TSS_GET (&singleton->instance_, TYPE);
}
| TAO_TSS_Singleton< TYPE, ACE_LOCK > *& TAO_TSS_Singleton< TYPE, ACE_LOCK >::instance_i | ( | void | ) | [static, protected] |
Get pointer to the TAO TSS Singleton instance.
Definition at line 139 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_TSS_Singleton<TYPE, ACE_LOCK> *singleton_ = 0;
return singleton_;
#else
return TAO_TSS_Singleton<TYPE, ACE_LOCK>::singleton_;
#endif /* ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES */
}
| void TAO_TSS_Singleton< TYPE, ACE_LOCK >::operator= | ( | const TAO_TSS_Singleton< TYPE, ACE_LOCK > & | ) | [private] |
TAO_TSS_Singleton< TYPE, ACE_LOCK > * TAO_TSS_Singleton< TYPE, ACE_LOCK >::singleton_ = 0 [static, protected] |
Pointer to the Singleton (ACE_Cleanup) instance.
Definition at line 112 of file TAO_Singleton.h.
1.7.0