diff options
author | nobody <nobody@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1997-12-11 06:01:44 +0000 |
---|---|---|
committer | nobody <nobody@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1997-12-11 06:01:44 +0000 |
commit | 29bc99605b3001024214877b685194229b053770 (patch) | |
tree | f893f1e4b64e027ecb12bd3ad323b84d9ba58a26 /ace/Singleton.cpp | |
parent | 00318e0f86593079270e84624efbcac2b1285aff (diff) | |
download | ATCD-poa_start.tar.gz |
This commit was manufactured by cvs2svn to create tag 'poa_start'.poa_start
Diffstat (limited to 'ace/Singleton.cpp')
-rw-r--r-- | ace/Singleton.cpp | 197 |
1 files changed, 0 insertions, 197 deletions
diff --git a/ace/Singleton.cpp b/ace/Singleton.cpp deleted file mode 100644 index 19b04e76776..00000000000 --- a/ace/Singleton.cpp +++ /dev/null @@ -1,197 +0,0 @@ -// $Id$ - -#if !defined (ACE_SINGLETON_C) -#define ACE_SINGLETON_C - -#define ACE_BUILD_DLL -#include "ace/Singleton.h" -#include "ace/Synch_T.h" -#include "ace/Object_Manager.h" - -#if !defined (__ACE_INLINE__) -#include "ace/Singleton.i" -#endif /* __ACE_INLINE__ */ - -template <class TYPE, class ACE_LOCK> void -ACE_Singleton<TYPE, ACE_LOCK>::dump (void) -{ - ACE_TRACE ("ACE_Singleton<TYPE, ACE_LOCK>::dump"); - -#if !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES) - ACE_DEBUG ((LM_DEBUG, "instance_ = %x", - ACE_Singleton<TYPE, ACE_LOCK>::instance_i ())); - ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); -#endif /* ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES */ -} - -template <class TYPE, class ACE_LOCK> ACE_Singleton<TYPE, ACE_LOCK> *& -ACE_Singleton<TYPE, ACE_LOCK>::instance_i (void) -{ -#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 ACE_Singleton<TYPE, ACE_LOCK> *singleton_ = 0; - - return singleton_; -#else - return ACE_Singleton<TYPE, ACE_LOCK>::singleton_; -#endif /* ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES */ -} - -template <class TYPE, class ACE_LOCK> TYPE * -ACE_Singleton<TYPE, ACE_LOCK>::instance (void) -{ - ACE_TRACE ("ACE_Singleton<TYPE, ACE_LOCK>::instance"); - - ACE_Singleton<TYPE, ACE_LOCK> *&singleton = - ACE_Singleton<TYPE, ACE_LOCK>::instance_i (); - - // Perform the Double-Check pattern... - if (singleton == 0) - { -#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) - if (ACE_Object_Manager::starting_up () || - ACE_Object_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 ACE_Object_Manager instance has been destroyed, - // so the preallocated lock is not available. -#endif /* ACE_MT_SAFE */ - ACE_NEW_RETURN (singleton, (ACE_Singleton<TYPE, ACE_LOCK>), 0); - - // Register for destruction with ACE_Object_Manager. - ACE_Object_Manager::at_exit (singleton); -#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) - } - else - { - // Obtain a lock from the ACE_Object_Manager. The pointer - // is static, so we only obtain one per ACE_Singleton instantiation. - static ACE_LOCK *lock = 0; - if (ACE_Object_Manager::get_singleton_lock (lock) != 0) - // Failed to allocate the lock! - return 0; - - ACE_GUARD_RETURN (ACE_LOCK, ace_mon, *lock, 0); - - if (singleton == 0) - { - ACE_NEW_RETURN (singleton, - (ACE_Singleton<TYPE, ACE_LOCK>), 0); - - // Register for destruction with ACE_Object_Manager. - ACE_Object_Manager::at_exit (singleton); - } - } -#endif /* ACE_MT_SAFE */ - } - - return &singleton->instance_; -} - -template <class TYPE, class ACE_LOCK> void -ACE_Singleton<TYPE, ACE_LOCK>::cleanup (void *) -{ - delete this; -} - -#if !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES) -// Pointer to the Singleton instance. -template <class TYPE, class ACE_LOCK> ACE_Singleton<TYPE, ACE_LOCK> * -ACE_Singleton<TYPE, ACE_LOCK>::singleton_ = 0; -#endif /* !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES) */ - -template <class TYPE, class ACE_LOCK> void -ACE_TSS_Singleton<TYPE, ACE_LOCK>::dump (void) -{ - ACE_TRACE ("ACE_TSS_Singleton<TYPE, ACE_LOCK>::dump"); - -#if !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES) - ACE_DEBUG ((LM_DEBUG, "instance_ = %x", - ACE_TSS_Singleton<TYPE, ACE_LOCK>::instance_i ())); - ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); -#endif /* ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES */ -} - -template <class TYPE, class ACE_LOCK> ACE_TSS_Singleton<TYPE, ACE_LOCK> *& -ACE_TSS_Singleton<TYPE, ACE_LOCK>::instance_i (void) -{ -#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 ACE_TSS_Singleton<TYPE, ACE_LOCK> *singleton_ = 0; - - return singleton_; -#else - return ACE_TSS_Singleton<TYPE, ACE_LOCK>::singleton_; -#endif /* ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES */ -} - -template <class TYPE, class ACE_LOCK> TYPE * -ACE_TSS_Singleton<TYPE, ACE_LOCK>::instance (void) -{ - ACE_TRACE ("ACE_TSS_Singleton<TYPE, ACE_LOCK>::instance"); - - ACE_TSS_Singleton<TYPE, ACE_LOCK> *&singleton = - ACE_TSS_Singleton<TYPE, ACE_LOCK>::instance_i (); - - // Perform the Double-Check pattern... - if (singleton == 0) - { -#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) - if (ACE_Object_Manager::starting_up () || - ACE_Object_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 ACE_Object_Manager instance has been destroyed, - // so the preallocated lock is not available. -#endif /* ACE_MT_SAFE */ - ACE_NEW_RETURN (singleton, (ACE_TSS_Singleton<TYPE, ACE_LOCK>), 0); - - // Register for destruction with ACE_Object_Manager. - ACE_Object_Manager::at_exit (singleton); -#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) - } - else - { - // Obtain a lock from the ACE_Object_Manager. The pointer - // is static, so we only obtain one per ACE_Singleton instantiation. - static ACE_LOCK *lock = 0; - if (ACE_Object_Manager::get_singleton_lock (lock) != 0) - // Failed to allocate the lock! - return 0; - - ACE_GUARD_RETURN (ACE_LOCK, ace_mon, *lock, 0); - - if (singleton == 0) - { - ACE_NEW_RETURN (singleton, - (ACE_TSS_Singleton<TYPE, ACE_LOCK>), 0); - - // Register for destruction with ACE_Object_Manager. - ACE_Object_Manager::at_exit (singleton); - } - } -#endif /* ACE_MT_SAFE */ - } - - return ACE_TSS_GET (&singleton->instance_, TYPE); -} - -template <class TYPE, class ACE_LOCK> void -ACE_TSS_Singleton<TYPE, ACE_LOCK>::cleanup (void *) -{ - ACE_TRACE ("ACE_TSS_Singleton::cleanup"); - - delete this; -} - -#if !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES) -// Pointer to the Singleton instance. -template <class TYPE, class ACE_LOCK> ACE_TSS_Singleton <TYPE, ACE_LOCK> * -ACE_TSS_Singleton<TYPE, ACE_LOCK>::singleton_ = 0; -#endif /* !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES) */ - -#endif /* ACE_SINGLETON_C */ |