diff options
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Trader/Link.cpp')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Trader/Link.cpp | 57 |
1 files changed, 19 insertions, 38 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Link.cpp b/TAO/orbsvcs/orbsvcs/Trader/Link.cpp index 6d9574722f4..4cec6e0e243 100644 --- a/TAO/orbsvcs/orbsvcs/Trader/Link.cpp +++ b/TAO/orbsvcs/orbsvcs/Trader/Link.cpp @@ -37,7 +37,7 @@ TAO_Link<TRADER,MAP_LOCK_TYPE>::~TAO_Link (void) } template <class TRADER, class MAP_LOCK_TYPE> void -TAO_Link<TRADER,MAP_LOCK_TYPE>:: +TAO_Link<TRADER, MAP_LOCK_TYPE>:: add_link (const char *name, CosTrading::Lookup_ptr target, CosTrading::FollowOption def_pass_on_follow_rule, @@ -50,18 +50,13 @@ add_link (const char *name, CosTrading::Link::DefaultFollowTooPermissive, CosTrading::Link::LimitingFollowTooPermissive)) { - TAO_WRITE_GUARD (MAP_LOCK_TYPE, - ace_mon, - this->links_.lock ()); - // Ensure the link name is valid. if (! TAO_Trader_Base::is_valid_identifier_name (name)) TAO_THROW (CosTrading::Link::IllegalLinkName (name)); // Ensure this isn't a duplicate link name. - string link_name (name); - LINKS::iterator links_iter = this->links_.find (link_name); - if (links_iter != this->links_.end ()) + TAO_String_Hash_Key link_name (name); + if (this->links_.find (link_name) == -1) TAO_THROW (CosTrading::Link::DuplicateLinkName (name)); // Ensure the lookup_ptr isn't nil. @@ -89,7 +84,7 @@ add_link (const char *name, TAO_CHECK_ENV_RETURN_VOID (_env); // Insert this link into the collection of links. - this->links_.insert (link_name, link_info); + this->links_.bind (link_name, link_info); } template <class TRADER, class MAP_LOCK_TYPE> void @@ -99,22 +94,17 @@ TAO_Link<TRADER,MAP_LOCK_TYPE>::remove_link (const char *name, CosTrading::Link::IllegalLinkName, CosTrading::Link::UnknownLinkName)) { - TAO_WRITE_GUARD (MAP_LOCK_TYPE, - ace_mon, - this->links_.lock ()); - // Ensure the link name is valid. if (! TAO_Trader_Base::is_valid_identifier_name (name)) TAO_THROW (CosTrading::Link::IllegalLinkName (name)); // Ensure this isn't a duplicate link name. - string link_name (name); - LINKS::iterator links_iter = this->links_.find (link_name); - if (links_iter == this->links_.end ()) + TAO_String_Hash_Key link_name (name); + if (this->links_.find (link_name) == -1) TAO_THROW (CosTrading::Link::UnknownLinkName (name)); // Erase the link state from the map. - this->links_.erase (links_iter); + this->links_.unbind (links_iter); } template <class TRADER, class MAP_LOCK_TYPE> CosTrading::Link::LinkInfo * @@ -134,37 +124,32 @@ TAO_Link<TRADER,MAP_LOCK_TYPE>::describe_link (const char *name, TAO_THROW_RETURN (CosTrading::Link::IllegalLinkName (name), 0); // Ensure this isn't a duplicate link name. - string link_name (name); - LINKS::iterator links_iter = this->links_.find (link_name); - if (links_iter == this->links_.end ()) + LINKS::ENTRY* link_entry; + TAO_String_Hash_Key link_name (name); + if (this->links_.find (link_name, link_entry) == -1) TAO_THROW_RETURN (CosTrading::Link::UnknownLinkName (name), 0); // return the link infor for this link name. - return &(*links_iter).second; + return *(link_entry->int_id_); } template <class TRADER, class MAP_LOCK_TYPE> CosTrading::LinkNameSeq* TAO_Link<TRADER,MAP_LOCK_TYPE>::list_links (CORBA::Environment& _env) TAO_THROW_SPEC ((CORBA::SystemException)) { - TAO_READ_GUARD_RETURN (MAP_LOCK_TYPE, - ace_mon, - this->links_.lock (), - (CosTrading::LinkNameSeq*) 0); - // Allocate space for the link names. CORBA::ULong size = this->links_.size (), i = 0; CosTrading::LinkName* link_seq = CosTrading::LinkNameSeq::allocbuf (size); // Copy the link names into the buffer. - for (LINKS::iterator links_iter = this->links_.begin (); - links_iter != this->links_.end (); + for (LINKS::iterator links_iter (this->links_); + ! links_iter.done (); links_iter++) - link_seq[i++] = CORBA::string_dup ((*links_iter).first.data ()); + link_seq[i++] = CORBA::string_dup ((*links_iter).int_id_.in ()); // Return a sequence of the buf names. - return new CosTrading::LinkNameSeq (i, i, link_seq, 1); + return new CosTrading::LinkNameSeq (i, i, link_seq, CORBA::B_TRUE); } template <class TRADER, class MAP_LOCK_TYPE> void @@ -179,18 +164,14 @@ modify_link (const char *name, CosTrading::Link::DefaultFollowTooPermissive, CosTrading::Link::LimitingFollowTooPermissive)) { - TAO_WRITE_GUARD (MAP_LOCK_TYPE, - ace_mon, - this->links_.lock ()); - // Ensure the link name is valid. if (! TAO_Trader_Base::is_valid_identifier_name (name)) TAO_THROW (CosTrading::Link::IllegalLinkName (name)); // Ensure this isn't a duplicate link name. - string link_name (name); - LINKS::iterator links_iter = this->links_.find (link_name); - if (links_iter == this->links_.end ()) + LINKS::ENTRY* link_entry = 0; + TAO_String_Hash_Key link_name (name); + if (this->links_.find (link_name, link_entry) == -1) TAO_THROW (CosTrading::Link::UnknownLinkName (name)); // Ensure that the default link behavior isn't stronger than the @@ -206,7 +187,7 @@ modify_link (const char *name, (limiting_follow_rule, this->max_link_follow_policy (_env))); // Adjust the link settings - CosTrading::Link::LinkInfo& link_info = (*links_iter).second; + CosTrading::Link::LinkInfo& link_info = link_entry->int_id_; link_info.def_pass_on_follow_rule = def_pass_on_follow_rule; link_info.limiting_follow_rule = limiting_follow_rule; } |