TAO_Offer_Database< LOCK_TYPE > Class Template Reference
Collaboration diagram for TAO_Offer_Database< LOCK_TYPE >:
[legend]List of all members.
TAO_String_Hash_Key, Offer_Map_Entry *,
ACE_Hash< TAO_String_Hash_Key >,
ACE_Equal_To< TAO_String_Hash_Key >,
Public Member Functions
| ||TAO_Offer_Database (void)|
| ||No arg constructor. |
| ||~TAO_Offer_Database (void)|
|CosTrading::OfferId ||insert_offer (const char *type, CosTrading::Offer *offer)|
|int ||remove_offer (const CosTrading::OfferId offer_id ACE_ENV_ARG_DECL) throw (CosTrading::IllegalOfferId, CosTrading::UnknownOfferId)|
|CosTrading::Offer * ||lookup_offer (const CosTrading::OfferId offer_id ACE_ENV_ARG_DECL) throw (CosTrading::IllegalOfferId, CosTrading::UnknownOfferId)|
|CosTrading::Offer * ||lookup_offer (const CosTrading::OfferId offer_id, char *&type_name ACE_ENV_ARG_DECL) throw (CosTrading::IllegalOfferId, CosTrading::UnknownOfferId)|
|TAO_Offer_Id_Iterator * ||retrieve_all_offer_ids (void)|
Private Member Functions
|CosTrading::Offer * ||lookup_offer (const char *type, CORBA::ULong id)|
|int ||remove_offer (const char *type, CORBA::ULong id)|
|void ||operator= (const TAO_Offer_Database< LOCK_TYPE > &)|
| ||TAO_Offer_Database (const TAO_Offer_Database< LOCK_TYPE > &)|
Static Private Member Functions
|CosTrading::OfferId ||generate_offer_id (const char *type_name, CORBA::ULong id)|
|void ||parse_offer_id (const CosTrading::OfferId offer_id, char *&service_type, CORBA::ULong &id ACE_ENV_ARG_DECL) throw (CosTrading::IllegalOfferId)|
The TAO_Offer_Database encapsulates the mapping of service types to those offers exported with that service types. The underlying structure is a map of maps. The first maps maps the service type name to a map of exported offers. The second map maps the identifying index for that offer within the service types. So a service type name and an index uniquely identifies an exported offer. In fact, when the register export interface returns a CosTrading::OfferId, it's returning no more than a simple string concatenation of these two values. In addition to all these wonderful things, the TAO_Offer_Database has built-in locking, one reader/writer-style lock for modifying the top-level map and a reader/writer-style for each of the offer maps. Needless to say the locks are acquired when the TAO_Offer_Database performs operations on the structures they guard. NOTE: TAO_Offer_Database needs to be parameterized by a READER/WRITER LOCK, a RECURSIVE MUTEX, or a NULL MUTEX, not a simple binary mutex! Mutexes will cause deadlock when you try to contruct an iterator (which acquires a read lock on the map under an existing read lock). Just don't do it, ok?
class TAO_Offer_Database< LOCK_TYPE >
Member Typedef Documentation
Constructor & Destructor Documentation
Member Function Documentation
Take in a service type name for the offer the current value of of the counter and generate an offer id.
Lookup an offer whose type is <type> and id, <id>. Return 0 on failure.
Lookup an offer whose OfferId is <offer_id> and return in <type_name> the type name of the object. Type name is just a pointer to a location in offer_id, so DON'T DELETE IT.
Lookup an offer whose offer_id is <offer_id>, and return it. Otherwise, throw the appropriate exception.
Take in a previously generated offer id and return the type and id that were used to generate the offer id.
Return an iterator that will traverse and return all the offer ids in the service type map.
Friends And Related Function Documentation
Member Data Documentation
The documentation for this class was generated from the following files:
Generated on Thu Feb 10 21:03:42 2005 for TAO_CosTrader by