00001 /* -*- C++ -*- */ 00002 00003 //============================================================================= 00004 /** 00005 * @file Dynamic_Service_Base.h 00006 * 00007 * $Id: Dynamic_Service_Base.h 80826 2008-03-04 14:51:23Z wotte $ 00008 * 00009 * @author Prashant Jain <pjain@cs.wustl.edu> 00010 * @author Douglas C. Schmidt <schmidt@cs.wustl.edu> 00011 */ 00012 //============================================================================= 00013 00014 #ifndef ACE_DYNAMIC_SERVICE_BASE_H 00015 #define ACE_DYNAMIC_SERVICE_BASE_H 00016 00017 #include /**/ "ace/pre.h" 00018 00019 #include /**/ "ace/ACE_export.h" 00020 00021 #if !defined (ACE_LACKS_PRAGMA_ONCE) 00022 # pragma once 00023 #endif /* ACE_LACKS_PRAGMA_ONCE */ 00024 00025 ACE_BEGIN_VERSIONED_NAMESPACE_DECL 00026 00027 class ACE_Service_Gestalt; 00028 class ACE_Service_Type; 00029 00030 /** 00031 * @class ACE_Dynamic_Service_Base 00032 * 00033 * @brief Base class for all ACE_Dynamic_Service instantiations. 00034 * 00035 * Factors out common code shared by all ACE_Dynamic_Service 00036 * instantiations, this avoid code bloat. 00037 */ 00038 class ACE_Export ACE_Dynamic_Service_Base 00039 { 00040 00041 public: 00042 /// Dump the current static of the object 00043 void dump (void) const; 00044 00045 protected: 00046 /// Perform the default repo search, but optionally skip searching the global 00047 /// repo. 00048 static void* instance (const ACE_TCHAR *name, bool no_global = false); 00049 00050 static void* instance (const ACE_Service_Gestalt* repo, 00051 const ACE_TCHAR *name, 00052 bool no_global = false); 00053 00054 /// No need to create, or assign instances of this class 00055 ACE_Dynamic_Service_Base (void); 00056 ~ACE_Dynamic_Service_Base (void); 00057 const ACE_Dynamic_Service_Base& operator= (const ACE_Dynamic_Service_Base&); 00058 00059 private: 00060 /// Implement the service search policy, i.e. "look for the service first 00061 /// locally and then globally" 00062 static const ACE_Service_Type *find_i (const ACE_Service_Gestalt* &repo, 00063 const ACE_TCHAR *name, 00064 bool no_global); 00065 00066 /// The dependency declaration class needs access to the service search 00067 /// policy, implemented by find_i() 00068 friend class ACE_Dynamic_Service_Dependency; 00069 }; 00070 00071 ACE_END_VERSIONED_NAMESPACE_DECL 00072 00073 #include /**/ "ace/post.h" 00074 #endif /* ACE_DYNAMIC_SERVICE_BASE_H */