Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Protected Member Functions | Static Protected Attributes | Private Member Functions

TAO_TSS_Singleton< TYPE, ACE_LOCK > Class Template Reference

TAO-specific Singleton class. More...

#include <TAO_Singleton.h>

Inheritance diagram for TAO_TSS_Singleton< TYPE, ACE_LOCK >:
Inheritance graph
[legend]
Collaboration diagram for TAO_TSS_Singleton< TYPE, ACE_LOCK >:
Collaboration graph
[legend]

List of all members.

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 > &)

Detailed Description

template<class TYPE, class ACE_LOCK>
class 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.


Constructor & Destructor Documentation

template<class TYPE , class ACE_LOCK >
TAO_TSS_Singleton< TYPE, ACE_LOCK >::TAO_TSS_Singleton ( void   )  [protected]

Default constructor.

Definition at line 19 of file TAO_Singleton.inl.

{
}

template<class TYPE, class ACE_LOCK>
TAO_TSS_Singleton< TYPE, ACE_LOCK >::TAO_TSS_Singleton ( const TAO_TSS_Singleton< TYPE, ACE_LOCK > &   )  [private]

Member Function Documentation

template<class TYPE, class ACE_LOCK>
TAO_TSS_Singleton< TYPE, ACE_LOCK >::ACE_TSS_TYPE ( TYPE   )  [protected]

Contained instance.

template<class TYPE , class ACE_LOCK >
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.

template<class TYPE , class ACE_LOCK >
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 */
}

template<class TYPE , class ACE_LOCK >
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);
}

template<class TYPE , class ACE_LOCK >
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 */
}

template<class TYPE, class ACE_LOCK>
void TAO_TSS_Singleton< TYPE, ACE_LOCK >::operator= ( const TAO_TSS_Singleton< TYPE, ACE_LOCK > &   )  [private]

Member Data Documentation

template<class TYPE, class ACE_LOCK>
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.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines