00001 // -*- C++ -*- 00002 00003 //============================================================================= 00004 /** 00005 * @file CSD_Strategy_Repository.h 00006 * 00007 * $Id: CSD_Strategy_Repository.h 84281 2009-01-30 15:01:17Z wotte $ 00008 * 00009 * @author Yan Dai <dai_y@ociweb.com> 00010 */ 00011 //============================================================================= 00012 00013 #ifndef TAO_CSD_STRATEGY_FACTORY_H 00014 #define TAO_CSD_STRATEGY_FACTORY_H 00015 00016 #include /**/ "ace/pre.h" 00017 00018 #include "tao/CSD_Framework/CSD_FW_Export.h" 00019 #include "tao/CSD_Framework/CSD_FrameworkC.h" 00020 #include "ace/Service_Object.h" 00021 #include "ace/Service_Config.h" 00022 #include "ace/Synch.h" 00023 00024 #if !defined (ACE_LACKS_PRAGMA_ONCE) 00025 # pragma once 00026 #endif /* ACE_LACKS_PRAGMA_ONCE */ 00027 00028 TAO_BEGIN_VERSIONED_NAMESPACE_DECL 00029 00030 /** 00031 * @class TAO_CSD_Strategy_Factory 00032 * 00033 * @brief An ACE_Service_Object capable of creating TP_Strategy objects. 00034 * 00035 * TBD - Explain in more detail. 00036 * 00037 */ 00038 class TAO_CSD_FW_Export TAO_CSD_Strategy_Repository : public ACE_Service_Object 00039 { 00040 public: 00041 00042 /// Constructor. 00043 TAO_CSD_Strategy_Repository(); 00044 00045 /// Virtual Destructor. 00046 virtual ~TAO_CSD_Strategy_Repository(); 00047 00048 int init (int argc, ACE_TCHAR ** argv); 00049 00050 /// Factory method used to create a CSD_Strategy object. 00051 CSD_Framework::Strategy_ptr find (const ACE_CString& poa_name); 00052 00053 int add_strategy (const ACE_CString& poa_name, 00054 CSD_Framework::Strategy_ptr strategy); 00055 00056 private: 00057 struct Strategy_Node { 00058 Strategy_Node(const ACE_CString& poa_name, 00059 CSD_Framework::Strategy_ptr strategy); 00060 ~Strategy_Node(); 00061 void add_node (Strategy_Node *); 00062 Strategy_Node *find(const ACE_CString& name); 00063 00064 ACE_CString poa_name_; 00065 CSD_Framework::Strategy_var strategy_; 00066 Strategy_Node * next_; 00067 }; 00068 Strategy_Node * strategy_list_head_; 00069 }; 00070 00071 00072 ACE_STATIC_SVC_DECLARE_EXPORT (TAO_CSD_FW, TAO_CSD_Strategy_Repository) 00073 ACE_FACTORY_DECLARE (TAO_CSD_FW, TAO_CSD_Strategy_Repository) 00074 00075 TAO_END_VERSIONED_NAMESPACE_DECL 00076 00077 #include /**/ "ace/post.h" 00078 00079 #endif /* TAO_CSD_STRATEGY_FACTORY_H */