Go to the documentation of this file.00001
00002
00003 #include "tao/CSD_Framework/CSD_Strategy_Repository.h"
00004 #include "tao/debug.h"
00005
00006 ACE_RCSID (CSD_Framework,
00007 CSD_Strategy_Factory,
00008 "$Id: CSD_Strategy_Repository.cpp 84443 2009-02-12 20:26:35Z johnnyw $")
00009
00010
00011 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00012
00013 TAO_CSD_Strategy_Repository::TAO_CSD_Strategy_Repository()
00014 {
00015 }
00016
00017
00018 TAO_CSD_Strategy_Repository::~TAO_CSD_Strategy_Repository()
00019 {
00020 delete this->strategy_list_head_;
00021 }
00022
00023 int
00024 TAO_CSD_Strategy_Repository::init(int, ACE_TCHAR **)
00025 {
00026
00027 static int initialized = 0;
00028
00029
00030 if (initialized)
00031 return 0;
00032
00033 initialized = 1;
00034 this->strategy_list_head_ = 0;
00035 return 0;
00036 }
00037
00038 CSD_Framework::Strategy_ptr
00039 TAO_CSD_Strategy_Repository::find (const ACE_CString& name)
00040 {
00041
00042 if (this->strategy_list_head_ != 0)
00043 {
00044 Strategy_Node *node = this->strategy_list_head_->find(name);
00045 if (node != 0)
00046 return CSD_Framework::Strategy::_duplicate (node->strategy_.in());
00047 }
00048
00049 return CSD_Framework::Strategy::_nil();
00050 }
00051
00052
00053 int
00054 TAO_CSD_Strategy_Repository::add_strategy (const ACE_CString& name,
00055 CSD_Framework::Strategy_ptr strat)
00056 {
00057 Strategy_Node *node = 0;
00058 ACE_NEW_RETURN (node, Strategy_Node(name,strat),-1);
00059 if (this->strategy_list_head_ == 0)
00060 this->strategy_list_head_ = node;
00061 else
00062 this->strategy_list_head_->add_node(node);
00063
00064 if (TAO_debug_level > 3)
00065 {
00066 ACE_DEBUG ((LM_DEBUG,
00067 ACE_TEXT("Strategy_Repository::add_strategy for %C\n"),
00068 name.c_str ()));
00069 }
00070 return 0;
00071 }
00072
00073 TAO_CSD_Strategy_Repository::Strategy_Node::Strategy_Node (const ACE_CString& name,
00074 CSD_Framework::Strategy_ptr strat)
00075 : poa_name_(name),
00076 strategy_(CSD_Framework::Strategy::_duplicate(strat)),
00077 next_(0)
00078 {
00079 }
00080
00081 TAO_CSD_Strategy_Repository::Strategy_Node::~Strategy_Node ()
00082 {
00083 if (this->next_)
00084 delete this->next_;
00085 }
00086
00087 void
00088 TAO_CSD_Strategy_Repository::Strategy_Node::add_node(Strategy_Node *node)
00089 {
00090 if (this->next_)
00091 this->next_->add_node(node);
00092 else
00093 this->next_ = node;
00094 }
00095
00096 TAO_CSD_Strategy_Repository::Strategy_Node *
00097 TAO_CSD_Strategy_Repository::Strategy_Node::find(const ACE_CString &name)
00098 {
00099 if (this->poa_name_ == name)
00100 return this;
00101 if (this->next_)
00102 return this->next_->find(name);
00103 return 0;
00104 }
00105
00106
00107
00108
00109 ACE_FACTORY_DEFINE (TAO_CSD_FW, TAO_CSD_Strategy_Repository)
00110 ACE_STATIC_SVC_DEFINE (TAO_CSD_Strategy_Repository,
00111 ACE_TEXT ("TAO_CSD_Strategy_Repository"),
00112 ACE_SVC_OBJ_T,
00113 &ACE_SVC_NAME (TAO_CSD_Strategy_Repository),
00114 ACE_Service_Type::DELETE_THIS
00115 | ACE_Service_Type::DELETE_OBJ,
00116 0)
00117 TAO_END_VERSIONED_NAMESPACE_DECL