Main Page Namespace List Class Hierarchy Alphabetical List Compound List File List Namespace Members Compound Members File Members

# TAO_Offer_Database Class Template Reference

The TAO_Offer_Database encapsulates the mapping of service types to those offers exported with that service types. More...

`#include <Offer_Database.h>`

Inheritance diagram for TAO_Offer_Database:

[legend]
Collaboration diagram for TAO_Offer_Database:

[legend]
List of all members.

## Public Types
typedef TAO_Service_Offer_Iterator< LOCK_TYPE > | offer_iterator
typedef ACE_Hash_Map_Manager_Ex< TAO_String_Hash_Key, Offer_Map_Entry *, ACE_Hash< TAO_String_Hash_Key >, ACE_Equal_To< TAO_String_Hash_Key >, ACE_Null_Mutex > | Offer_Database
## Public Methods
| TAO_Offer_Database (void)
| No arg constructor. More...
| ~TAO_Offer_Database (void)
CosTrading::OfferId | insert_offer (const char *type, CosTrading::Offer *offer)
| Add an offer of type <type> and generate a CosTrading::OfferId for it. Returns 0 on failure. More...
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)
| Lookup an offer whose offer_id is <offer_id>, and return it. Otherwise, throw the appropriate exception. More...
CosTrading::Offer * | lookup_offer (const CosTrading::OfferId offer_id, char *&type_name ACE_ENV_ARG_DECL) throw (CosTrading::IllegalOfferId, CosTrading::UnknownOfferId)
| Lookup an offer whose OfferId is <offer_id> and return in <type_name> the type name of the object. More...
TAO_Offer_Id_Iterator * | retrieve_all_offer_ids (void)
| Return an iterator that will traverse and return all the offer ids in the service type map. More...
## Private Methods
CosTrading::Offer * | lookup_offer (const char *type, CORBA::ULong id)
| Lookup an offer whose type is <type> and id, <id>. Return 0 on failure. More...
int | remove_offer (const char *type, CORBA::ULong id)
| Remove an offers whose id is <offer_id>. More...
void | operator= (const TAO_Offer_Database< LOCK_TYPE > &)
| TAO_Offer_Database (const TAO_Offer_Database< LOCK_TYPE > &)
## Static Private Methods
CosTrading::OfferId | generate_offer_id (const char *type_name, CORBA::ULong id)
| Take in a service type name for the offer the current value of of the counter and generate an offer id. More...
void | parse_offer_id (const CosTrading::OfferId offer_id, char *&service_type, CORBA::ULong &id ACE_ENV_ARG_DECL) throw (CosTrading::IllegalOfferId)
| Take in a previously generated offer id and return the type and id that were used to generate the offer id. More...
## Private Attributes
LOCK_TYPE | db_lock_
Offer_Database | offer_db_
## Friends
class | TAO_Service_Offer_Iterator< LOCK_TYPE >

## Detailed Description

### template<class LOCK_TYPE>
class TAO_Offer_Database< LOCK_TYPE >

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?

## Member Typedef Documentation

template<class LOCK_TYPE>
typedef ACE_Hash_Map_Manager_Ex< TAO_String_Hash_Key, Offer_Map_Entry*, ACE_Hash<TAO_String_Hash_Key>, ACE_Equal_To<TAO_String_Hash_Key>, ACE_Null_Mutex > TAO_Offer_Database::Offer_Database

template<class LOCK_TYPE>
typedef TAO_Service_Offer_Iterator<LOCK_TYPE> TAO_Offer_Database::offer_iterator

## Constructor & Destructor Documentation

template<class LOCK_TYPE>
TAO_Offer_Database< LOCK_TYPE >::TAO_Offer_Database | ( | void |  | ) |

| No arg constructor.

template<class LOCK_TYPE>
TAO_Offer_Database< LOCK_TYPE >::~TAO_Offer_Database | ( | void |  | ) |

template<class LOCK_TYPE>
TAO_Offer_Database< LOCK_TYPE >::TAO_Offer_Database | ( | const TAO_Offer_Database< LOCK_TYPE > & |  | ) | `[private]`

## Member Function Documentation

template<class LOCK_TYPE>
CosTrading::OfferId TAO_Offer_Database< LOCK_TYPE >::generate_offer_id | ( | const char * | service_type_name,
|  | CORBA::ULong | id
| ) | `[static, private]`

| Take in a service type name for the offer the current value of of the counter and generate an offer id.

template<class LOCK_TYPE>
CosTrading::OfferId TAO_Offer_Database< LOCK_TYPE >::insert_offer | ( | const char * | type,
|  | CosTrading::Offer * | offer
| ) |

| Add an offer of type <type> and generate a CosTrading::OfferId for it. Returns 0 on failure.

template<class LOCK_TYPE>
CosTrading::Offer * TAO_Offer_Database< LOCK_TYPE >::lookup_offer | ( | const char * | type,
|  | CORBA::ULong | id
| ) | `[private]`

| Lookup an offer whose type is <type> and id, <id>. Return 0 on failure.

template<class LOCK_TYPE>
CosTrading::Offer * TAO_Offer_Database< LOCK_TYPE >::lookup_offer | ( | const CosTrading::OfferId | offer_id,
|  | char *&type_name | ACE_ENV_ARG_DECL
| ) | throw (CosTrading::IllegalOfferId, CosTrading::UnknownOfferId)

| 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.

template<class LOCK_TYPE>
CosTrading::Offer * TAO_Offer_Database< LOCK_TYPE >::lookup_offer | ( | const CosTrading::OfferId offer_id | ACE_ENV_ARG_DECL | ) | throw (CosTrading::IllegalOfferId, CosTrading::UnknownOfferId)

| Lookup an offer whose offer_id is <offer_id>, and return it. Otherwise, throw the appropriate exception.

template<class LOCK_TYPE>
void TAO_Offer_Database< LOCK_TYPE >::operator= | ( | const TAO_Offer_Database< LOCK_TYPE > & |  | ) | `[private]`

template<class LOCK_TYPE>
void TAO_Offer_Database< LOCK_TYPE >::parse_offer_id | ( | const CosTrading::OfferId | offer_id,
|  | char *& | service_type,
|  | CORBA::ULong &id | ACE_ENV_ARG_DECL
| ) | throw (CosTrading::IllegalOfferId)`[static, private]`

| Take in a previously generated offer id and return the type and id that were used to generate the offer id.

template<class LOCK_TYPE>
int TAO_Offer_Database< LOCK_TYPE >::remove_offer | ( | const char * | type,
|  | CORBA::ULong | id
| ) | `[private]`

| Remove an offers whose id is <offer_id>. Returns 0 on success, -1 on failure, and throws a CosTrading::IllegalOfferId if it can't parse the CosTrading::OfferId.

template<class LOCK_TYPE>
int TAO_Offer_Database< LOCK_TYPE >::remove_offer | ( | const CosTrading::OfferId offer_id | ACE_ENV_ARG_DECL | ) | throw (CosTrading::IllegalOfferId, CosTrading::UnknownOfferId)

template<class LOCK_TYPE>
TAO_Offer_Id_Iterator * TAO_Offer_Database< LOCK_TYPE >::retrieve_all_offer_ids | ( | void |  | ) |

| Return an iterator that will traverse and return all the offer ids in the service type map.

## Friends And Related Function Documentation

template<class LOCK_TYPE>
friend class TAO_Service_Offer_Iterator< LOCK_TYPE >`[friend]`

## Member Data Documentation

template<class LOCK_TYPE>
LOCK_TYPE TAO_Offer_Database::db_lock_`[private]`

template<class LOCK_TYPE>
Offer_Database TAO_Offer_Database::offer_db_`[private]`

The documentation for this class was generated from the following files:

- Offer_Database.h
- Offer_Database.cpp