diff options
Diffstat (limited to 'ace/Framework_Component.h')
-rw-r--r-- | ace/Framework_Component.h | 210 |
1 files changed, 0 insertions, 210 deletions
diff --git a/ace/Framework_Component.h b/ace/Framework_Component.h deleted file mode 100644 index d0d2e6f89e2..00000000000 --- a/ace/Framework_Component.h +++ /dev/null @@ -1,210 +0,0 @@ -// -*- C++ -*- - -//============================================================================= -/** - * @file Framework_Component.h - * - * $Id$ - * - * A prototype mechanism that allows framework components, singletons - * such as ACE_Reactor, ACE_Proactor, etc, to be registered with a - * central repository managed by the <ACE_Object_Manager> or - * ACE_Service_Config that will handle destruction. - * - * This technique obviates changing ACE_Object_Manager and - * ACE_Service_Config everytime a new framework is added. Which also - * means that unused framework components don't need to linked into - * the final application which is important for applications with - * stringent footprint requirements. - * - * Framework components need only provide a static method, - * close_singleton() and add the ACE_REGISTER_FRAMEWORK_COMPONENT macro - * call to their instance() methods in order to participate. Components - * that don't have a close_singleton() method can also participate via - * template specialization of ACE_Framework_Component_T. - * - * This design uses the External Polymorphism pattern to avoid having - * to derive all framework components from a common base class that - * has virtual methods (this is crucial to avoid unnecessary overhead), - * and is based on the dump debugging implementation found in - * <ace/Dump.h>. - * - * @author Don Hinton <dhinton@ieee.org>. - */ -//============================================================================= - -#ifndef ACE_FRAMEWORK_COMPONENT_H -#define ACE_FRAMEWORK_COMPONENT_H -#include /**/ "ace/pre.h" - -#include "ace/ACE_export.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -#include "ace/os_include/os_signal.h" -#include "ace/Thread_Mutex.h" - -#define ACE_DEFAULT_FRAMEWORK_REPOSITORY_SIZE 1024 - -ACE_BEGIN_VERSIONED_NAMESPACE_DECL - -/** - * @class ACE_Framework_Component - * - * @brief Base class that defines a uniform interface for all managed - * framework components. - */ -class ACE_Export ACE_Framework_Component -{ -public: - friend class ACE_Framework_Repository; - - /// Constructor. - ACE_Framework_Component (void *_this, - const ACE_TCHAR *dll_name = 0, - const ACE_TCHAR *name = 0); - - /// Close the contained singleton. - virtual void close_singleton (void) = 0; - -protected: - /// Destructor. - virtual ~ACE_Framework_Component (void); - -private: - // No copy possible - ACE_Framework_Component (const ACE_Framework_Component &); - void operator= (const ACE_Framework_Component &); - -private: - /// Pointer to the actual component. - const void *this_; - - /// Library associated with this component - const ACE_TCHAR *dll_name_; - - /// Component name - const ACE_TCHAR *name_; -}; - -/** - * @class ACE_Framework_Repository - * - * @brief Contains all framework components used by an application. - * - * This class contains a vector of ACE_Framework_Component *'s. On - * destruction, framework components are destroyed in the reverse order - * that they were added originally. - */ -class ACE_Export ACE_Framework_Repository -{ -public: - // This is just to silence a compiler warning about no public ctors - friend class ACE_Framework_Component; - - enum - { - DEFAULT_SIZE = ACE_DEFAULT_FRAMEWORK_REPOSITORY_SIZE - }; - - /// Close down the repository and free up dynamically allocated - /// resources. - ~ACE_Framework_Repository (void); - - /// Initialize the repository. - int open (int size = DEFAULT_SIZE); - - /// Close down the repository and free up dynamically allocated - /// resources, also called by dtor. - int close (void); - - /// Get pointer to a process-wide <ACE_Framework_Repository>. - static ACE_Framework_Repository *instance - (int size = ACE_Framework_Repository::DEFAULT_SIZE); - - /// Delete the dynamically allocated Singleton. - static void close_singleton (void); - - // = Search structure operations (all acquire locks as necessary). - - /// Insert a new component. Returns -1 when the repository is full - /// and 0 on success. - int register_component (ACE_Framework_Component *fc); - - /// Remove a component. Returns -1 on error or if component not found - /// and 0 on success. - int remove_component (const ACE_TCHAR *name); - - /// Remove all components associated with a particular dll. - int remove_dll_components (const ACE_TCHAR *dll_name); - - /// Return the current size of the repository. - int current_size (void) const; - - /// Return the total size of the repository. - int total_size (void) const; - - /// Dump the state of an object. - void dump (void) const; - - /// Declare the dynamic allocation hooks. - ACE_ALLOC_HOOK_DECLARE; - -protected: - - /// Initialize the repository. - ACE_Framework_Repository (int size = ACE_Framework_Repository::DEFAULT_SIZE); - -private: - - /// Actually removes the dll components, must be called with locks held. - int remove_dll_components_i (const ACE_TCHAR *dll_name); - - /// Compact component_vector_ after components have been removed__maintains - /// order. - void compact (void); - - /// Disallow copying and assignment. - ACE_Framework_Repository (const ACE_Framework_Repository &); - ACE_Framework_Repository &operator= (const ACE_Framework_Repository &); - -private: - - /// Contains all the framework components. - ACE_Framework_Component **component_vector_; - - /// Current number of components. - int current_size_; - - /// Maximum number of components. - int total_size_; - - /// Pointer to a process-wide ACE_Framework_Repository. - static ACE_Framework_Repository *repository_; - - /// Flag set when repository is the process of shutting down. This - /// is necessary to keep from self-deadlocking since some of - /// the components might make calls back to the repository to - /// unload their components, e.g., ACE_DLL_Manager. - static sig_atomic_t shutting_down_; - -#if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0) - /// Synchronization variable for the MT_SAFE Repository - ACE_Thread_Mutex lock_; -#endif /* ACE_MT_SAFE */ - -}; - -ACE_END_VERSIONED_NAMESPACE_DECL - -#if defined (__ACE_INLINE__) -#include "ace/Framework_Component.inl" -#endif /* __ACE_INLINE__ */ - -// Include the templates classes at this point. -#include "ace/Framework_Component_T.h" - -#include /**/ "ace/post.h" -#endif /* ACE_FRAMEWORK_COMPONENT_H */ |