summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Trader/Link.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Trader/Link.cpp')
-rw-r--r--TAO/orbsvcs/orbsvcs/Trader/Link.cpp57
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;
}