#include <Trader_Interfaces.h>
Inheritance diagram for TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >:
Public Member Functions | |
TAO_Link (TAO_Trader< TRADER_LOCK_TYPE, MAP_LOCK_TYPE > &trader) | |
~TAO_Link (void) | |
virtual void | add_link (const char *name, CosTrading::Lookup_ptr target, CosTrading::FollowOption def_pass_on_follow_rule, CosTrading::FollowOption limiting_follow_rule) |
virtual void | remove_link (const char *name) |
virtual CosTrading::Link::LinkInfo * | describe_link (const char *name) |
virtual CosTrading::LinkNameSeq * | list_links (void) |
virtual void | modify_link (const char *name, CosTrading::FollowOption def_pass_on_follow_rule, CosTrading::FollowOption limiting_follow_rule) |
Private Types | |
typedef ACE_Hash_Map_Manager_Ex< CORBA::String_var, CosTrading::Link::LinkInfo, ACE_Hash< CORBA::String_var >, ACE_Equal_To< CORBA::String_var >, MAP_LOCK_TYPE > | Links |
Private Member Functions | |
void | operator= (const TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE > &) |
TAO_Link (const TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE > &) | |
Private Attributes | |
Links | links_ |
TAO_Trader< TRADER_LOCK_TYPE, MAP_LOCK_TYPE > & | trader_ |
Definition at line 626 of file Trader_Interfaces.h.
typedef ACE_Hash_Map_Manager_Ex< CORBA::String_var, CosTrading::Link::LinkInfo, ACE_Hash<CORBA::String_var>, ACE_Equal_To<CORBA::String_var>, MAP_LOCK_TYPE > TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::Links [private] |
Definition at line 772 of file Trader_Interfaces.h.
TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::TAO_Link | ( | TAO_Trader< TRADER_LOCK_TYPE, MAP_LOCK_TYPE > & | trader | ) |
Definition at line 1450 of file Trader_Interfaces.cpp.
01451 : TAO_Trader_Components <POA_CosTrading::Link> (trader.trading_components ()), 01452 TAO_Support_Attributes <POA_CosTrading::Link> (trader.support_attributes ()), 01453 TAO_Link_Attributes <POA_CosTrading::Link> (trader.link_attributes ()), 01454 trader_ (trader) 01455 { 01456 }
TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::TAO_Link | ( | const TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE > & | ) | [private] |
void TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::add_link | ( | const char * | name, | |
CosTrading::Lookup_ptr | target, | |||
CosTrading::FollowOption | def_pass_on_follow_rule, | |||
CosTrading::FollowOption | limiting_follow_rule | |||
) | [virtual] |
BEGIN SPEC The add_link operation allows a trader subsequently to use the service of another trader in the performance of its own trading service operations.
Definition at line 1466 of file Trader_Interfaces.cpp.
References ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::bind(), CosTrading::Link::LinkInfo::def_pass_on_follow_rule, CORBA::is_nil(), TAO_Trader_Base::is_valid_link_name(), CosTrading::Link::LinkInfo::limiting_follow_rule, TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::links_, TAO_Link_Attributes< POA_CosTrading::Link >::max_link_follow_policy(), and CosTrading::Link::LinkInfo::target.
01470 { 01471 // Ensure the link name is valid. 01472 if (! TAO_Trader_Base::is_valid_link_name (name)) 01473 throw CosTrading::Link::IllegalLinkName (name); 01474 01475 // Ensure this isn't a duplicate link name. 01476 CORBA::String_var link_name (name); 01477 if (this->links_.find (link_name) == 0) 01478 throw CosTrading::Link::DuplicateLinkName (name); 01479 01480 // Ensure the lookup_ptr isn't nil. 01481 if (CORBA::is_nil (target)) 01482 throw CosTrading::InvalidLookupRef (target); 01483 01484 // Ensure that the default link behavior isn't stronger than the 01485 // limiting link behavior. 01486 if (def_pass_on_follow_rule > limiting_follow_rule) 01487 throw CosTrading::Link::DefaultFollowTooPermissive( 01488 def_pass_on_follow_rule, 01489 limiting_follow_rule); 01490 01491 // Ensure that the limiting link behavior for this link doesn't 01492 // exceed the maximum allowed for a link. 01493 CosTrading::FollowOption follow_policy = 01494 this->max_link_follow_policy (); 01495 if (limiting_follow_rule < follow_policy) 01496 throw CosTrading::Link::LimitingFollowTooPermissive( 01497 limiting_follow_rule, 01498 follow_policy); 01499 01500 // Create a link info structure for this link of the federation. 01501 CosTrading::Link::LinkInfo link_info; 01502 01503 link_info.target = CosTrading::Lookup::_duplicate (target); 01504 01505 link_info.def_pass_on_follow_rule = def_pass_on_follow_rule; 01506 link_info.limiting_follow_rule = limiting_follow_rule; 01507 01508 // Insert this link into the collection of links. 01509 this->links_.bind (link_name, link_info); 01510 }
CosTrading::Link::LinkInfo * TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::describe_link | ( | const char * | name | ) | [virtual] |
Definition at line 1532 of file Trader_Interfaces.cpp.
References ACE_NEW_THROW_EX, CosTrading::Link::LinkInfo::def_pass_on_follow_rule, TAO_Trader_Base::is_valid_link_name(), CosTrading::Link::LinkInfo::limiting_follow_rule, CosTrading::Link::LinkInfo::target, and CosTrading::Link::LinkInfo::target_reg.
01533 { 01534 // Ensure the link name is valid. 01535 if (! TAO_Trader_Base::is_valid_link_name (name)) 01536 throw CosTrading::Link::IllegalLinkName (name); 01537 01538 // Ensure this isn't a duplicate link name. 01539 typename Links::ENTRY* link_entry = 0; 01540 CORBA::String_var link_name (name); 01541 if (this->links_.find (link_name, link_entry) == -1) 01542 throw CosTrading::Link::UnknownLinkName (name); 01543 01544 // Build a new Link Info structure. 01545 CosTrading::Link::LinkInfo* new_link_info = 0; 01546 CosTrading::Link::LinkInfo& old_link_info = link_entry->int_id_; 01547 01548 ACE_NEW_THROW_EX (new_link_info, 01549 CosTrading::Link::LinkInfo, 01550 CORBA::NO_MEMORY ()); 01551 01552 new_link_info->def_pass_on_follow_rule = old_link_info.def_pass_on_follow_rule; 01553 new_link_info->limiting_follow_rule = old_link_info.limiting_follow_rule; 01554 01555 new_link_info->target = old_link_info.target; 01556 01557 // Delayed retrieval of register interface. 01558 // This avoids the nested upcall that would occur were we to invoke 01559 // this method in the add_link method. 01560 01561 new_link_info->target_reg = old_link_info.target->register_if (); 01562 01563 // return the link information for this link name. 01564 return new_link_info; 01565 }
CosTrading::LinkNameSeq * TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::list_links | ( | void | ) | [virtual] |
Definition at line 1569 of file Trader_Interfaces.cpp.
References ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::current_size(), TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::links_, size, and CORBA::string_dup().
01570 { 01571 // Allocate space for the link names. 01572 size_t size = this->links_.current_size (); 01573 CORBA::ULong i = 0; 01574 CosTrading::LinkName* link_seq = 01575 CosTrading::LinkNameSeq::allocbuf (static_cast<CORBA::ULong> (size)); 01576 01577 // Copy the link names into the buffer. 01578 for (typename Links::iterator links_iter (this->links_); 01579 ! links_iter.done (); 01580 links_iter++) 01581 link_seq[i++] = CORBA::string_dup ((*links_iter).ext_id_.in ()); 01582 01583 // Return a sequence of the buf names. 01584 return new CosTrading::LinkNameSeq (i, i, link_seq, 1); 01585 }
void TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::modify_link | ( | const char * | name, | |
CosTrading::FollowOption | def_pass_on_follow_rule, | |||
CosTrading::FollowOption | limiting_follow_rule | |||
) | [virtual] |
Definition at line 1590 of file Trader_Interfaces.cpp.
References CosTrading::Link::LinkInfo::def_pass_on_follow_rule, TAO_Trader_Base::is_valid_link_name(), CosTrading::Link::LinkInfo::limiting_follow_rule, and TAO_Link_Attributes< POA_CosTrading::Link >::max_link_follow_policy().
01593 { 01594 // Ensure the link name is valid. 01595 if (! TAO_Trader_Base::is_valid_link_name (name)) 01596 throw CosTrading::Link::IllegalLinkName (name); 01597 01598 // Ensure this isn't a duplicate link name. 01599 typename Links::ENTRY* link_entry = 0; 01600 CORBA::String_var link_name (name); 01601 if (this->links_.find (link_name, link_entry) == -1) 01602 throw CosTrading::Link::UnknownLinkName (name); 01603 01604 // Ensure that the default link behavior isn't stronger than the 01605 // limiting link behavior. 01606 if (def_pass_on_follow_rule > limiting_follow_rule) 01607 throw CosTrading::Link::DefaultFollowTooPermissive( 01608 def_pass_on_follow_rule, 01609 limiting_follow_rule); 01610 01611 // Ensure that the limiting link behavior for this link doesn't 01612 // exceed the maximum allowed for a link. 01613 CosTrading::FollowOption follow_policy = 01614 this->max_link_follow_policy (); 01615 01616 if (limiting_follow_rule < follow_policy) 01617 throw CosTrading::Link::LimitingFollowTooPermissive( 01618 limiting_follow_rule, 01619 follow_policy); 01620 01621 // Adjust the link settings 01622 CosTrading::Link::LinkInfo& link_info = link_entry->int_id_; 01623 link_info.def_pass_on_follow_rule = def_pass_on_follow_rule; 01624 link_info.limiting_follow_rule = limiting_follow_rule; 01625 }
void TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::operator= | ( | const TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE > & | ) | [private] |
void TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::remove_link | ( | const char * | name | ) | [virtual] |
Definition at line 1515 of file Trader_Interfaces.cpp.
References TAO_Trader_Base::is_valid_link_name(), TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::links_, and ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::unbind().
01516 { 01517 // Ensure the link name is valid. 01518 if (! TAO_Trader_Base::is_valid_link_name (name)) 01519 throw CosTrading::Link::IllegalLinkName (name); 01520 01521 // Ensure this isn't a duplicate link name. 01522 CORBA::String_var link_name (name); 01523 if (this->links_.find (link_name) == -1) 01524 throw CosTrading::Link::UnknownLinkName (name); 01525 01526 // Erase the link state from the map. 01527 this->links_.unbind (link_name); 01528 }
Links TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::links_ [private] |
The collection of link connecting this trader to others in the federation.
Definition at line 776 of file Trader_Interfaces.h.
Referenced by TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::add_link(), TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::list_links(), and TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::remove_link().
TAO_Trader<TRADER_LOCK_TYPE,MAP_LOCK_TYPE>& TAO_Link< TRADER_LOCK_TYPE, MAP_LOCK_TYPE >::trader_ [private] |
Definition at line 778 of file Trader_Interfaces.h.