summaryrefslogtreecommitdiff
path: root/ace/Singleton.h
diff options
context:
space:
mode:
Diffstat (limited to 'ace/Singleton.h')
-rw-r--r--ace/Singleton.h160
1 files changed, 0 insertions, 160 deletions
diff --git a/ace/Singleton.h b/ace/Singleton.h
deleted file mode 100644
index b4d0a128e6b..00000000000
--- a/ace/Singleton.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/* -*- C++ -*- */
-// $Id$
-
-// ============================================================================
-//
-// = LIBRARY
-// ace
-//
-// = FILENAME
-// Singleton.h
-//
-// = DESCRIPTION
-//
-// = AUTHOR
-// Tim Harrison (harrison@cs.wustl.edu), Douglas C. Schmidt, Chris
-// Lahey, Rich Christy, and David Levine.
-//
-// ============================================================================
-
-#if !defined (ACE_SINGLETON_H)
-#define ACE_SINGLETON_H
-
-#include "ace/Synch.h"
-
-template <class TYPE, class ACE_LOCK>
-class ACE_Singleton : public ACE_Cleanup
-{
- // = TITLE
- // A Singleton Adapter uses the Adapter pattern to turn ordinary
- // classes into Singletons optimized with the Double-Checked
- // Locking optimization pattern.
- //
- // = DESCRIPTION
- // This implementation is a slight variation on the GoF
- // Singleton pattern. In particular, a single
- // <ACE_Singleton<TYPE, ACE_LOCK> > instance is allocated here,
- // not a <TYPE> instance. The reason for this is to allow
- // registration with 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.
- //
- // If you want to make sure that only the singleton instance of
- // <T> is created, and that users cannot create their own
- // instances of <T>, do the following to class <T>:
- //
- // (a) Make the constructor of <T> private (or protected)
- // (b) Make Singleton a friend of <T>
- //
- // Here is an example:
- //
- // class foo
- // {
- // friend class ACE_Singleton<foo, ACE_Null_Mutex>;
- // private:
- // foo () { cout << "foo constructed" << endl; }
- // ~foo () { cout << "foo destroyed" << endl; }
- // };
- //
- // typedef ACE_Singleton<foo, ACE_Null_Mutex> FOO;
- //
- // NOTE: the best types to use for ACE_LOCK are
- // ACE_Recursive_Thread_Mutex and ACE_Null_Mutex.
- // ACE_Recursive_Thread_Mutex should be used in multi-threaded
- // programs in which it is possible for more than one thread to
- // access the <ACE_Singleton<TYPE, ACE_LOCK>> instance.
- // ACE_Null_Mutex can be used otherwise. The reason that these
- // types of locks are best has to do with their allocation by
- // the ACE_Object_Manager. Single ACE_Recursive_Thread_Mutex
- // and ACE_Null_Mutex instances are used for all ACE_Singleton
- // instantiations. However, other types of locks are allocated
- // per ACE_Singleton instantiation.
- //
-public:
- static TYPE *instance (void);
- // Global access point to the Singleton.
-
- virtual void cleanup (void *param = 0);
- // Cleanup method, used by <ace_cleanup_destroyer> to destroy the
- // <ACE_Singleton>.
-
- static void dump (void);
- // Dump the state of the object.
-
-protected:
- ACE_Singleton (void);
- // Default constructor.
-
- TYPE instance_;
- // Contained instance.
-
-#if !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES)
- static ACE_Singleton<TYPE, ACE_LOCK> *singleton_;
- // Pointer to the Singleton (ACE_Cleanup) instance.
-#endif /* ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES */
-
- static ACE_Singleton<TYPE, ACE_LOCK> *&instance_i (void);
- // Get pointer to the Singleton instance.
-};
-
-template <class TYPE, class ACE_LOCK>
-class ACE_TSS_Singleton : public ACE_Cleanup
-{
- // = TITLE
- // This class uses the Adapter pattern to turn ordinary classes
- // into Thread-specific Singletons optimized with the
- // Double-Checked Locking optimization pattern.
- //
- // = DESCRIPTION
- // 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.
-public:
- static TYPE *instance (void);
- // Global access point to the Singleton.
-
- virtual void cleanup (void *param = 0);
- // Cleanup method, used by <ace_cleanup_destroyer> to destroy the
- // singleton.
-
- static void dump (void);
- // Dump the state of the object.
-
-protected:
- ACE_TSS_Singleton (void);
- // Default constructor.
-
- ACE_TSS_TYPE (TYPE) instance_;
- // Contained instance.
-
-#if !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES)
- static ACE_TSS_Singleton<TYPE, ACE_LOCK> *singleton_;
- // Pointer to the Singleton (ACE_Cleanup) instance.
-#endif /* ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES */
-
- static ACE_TSS_Singleton<TYPE, ACE_LOCK> *&instance_i (void);
- // Get pointer to the TSS Singleton instance.
-};
-
-#if defined (__ACE_INLINE__)
-#include "ace/Singleton.i"
-#endif /* __ACE_INLINE__ */
-
-#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
-#include "ace/Singleton.cpp"
-#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
-
-#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
-#pragma implementation ("Singleton.cpp")
-#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */
-
-#endif /* ACE_SINGLETON_H */