diff options
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Trader/Offer_Database.h')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Trader/Offer_Database.h | 197 |
1 files changed, 0 insertions, 197 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Offer_Database.h b/TAO/orbsvcs/orbsvcs/Trader/Offer_Database.h deleted file mode 100644 index b79ecffe98a..00000000000 --- a/TAO/orbsvcs/orbsvcs/Trader/Offer_Database.h +++ /dev/null @@ -1,197 +0,0 @@ -/* -*- C++ -*- */ - -// ======================================================================== -// $Id$ -// -// = LIBRARY -// orbsvcs -// -// = FILENAME -// Offer_Database.h -// -// = AUTHOR -// Seth Widoff <sbw1@cs.wustl.edu> -// -// ======================================================================== - -#ifndef TAO_OFFER_DATABASE_H -#define TAO_OFFER_DATABASE_H - -#include "Trader.h" -#include "Offer_Iterators.h" - -template <class LOCK_TYPE> class TAO_Service_Offer_Iterator; - -template <class LOCK_TYPE> -class TAO_Offer_Database -// = DESCRIPTION -// 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? -{ - friend class TAO_Service_Offer_Iterator<LOCK_TYPE>; -public: - - // Traits - typedef TAO_Service_Offer_Iterator<LOCK_TYPE> offer_iterator; - - TAO_Offer_Database (void); - // No arg constructor. - - ~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. - - int remove_offer (const CosTrading::OfferId offer_id, - CORBA::Environment& _env) - TAO_THROW_SPEC ((CosTrading::IllegalOfferId, - CosTrading::UnknownOfferId)); - - CosTrading::Offer* lookup_offer (const CosTrading::OfferId offer_id, - CORBA::Environment& _env) - TAO_THROW_SPEC ((CosTrading::IllegalOfferId, - CosTrading::UnknownOfferId)); - // Lookup an offer whose offer_id is <offer_id>, and return - // it. Otherwise, throw the appropriate exception. - - CosTrading::Offer* lookup_offer (const CosTrading::OfferId offer_id, - char*& type_name, - CORBA::Environment& _env) - TAO_THROW_SPEC ((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. - - 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. - - struct Offer_Map_Entry - { - TAO_Offer_Map* offer_map_; - CORBA::ULong counter_; - LOCK_TYPE lock_; - }; - - typedef ACE_Hash_Map_Manager - < - TAO_String_Hash_Key, - Offer_Map_Entry*, - ACE_Null_Mutex - > - Offer_Database; - -private: - - // The internal id is a pointer here, not only to avoid copying, - // since we would only copy on insertion, and we only insert once - // --- with an empty Offer_Map_Entry --- but also since most locks - // have unimplemented copy constructors. - - CosTrading::Offer* lookup_offer (const char* type, - CORBA::ULong id); - // Lookup an offer whose type is <type> and id, <id>. Return 0 on - // failure. - - int remove_offer (const char* type, CORBA::ULong id); - // 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. - - static 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. - - static void parse_offer_id (const CosTrading::OfferId offer_id, - char* &service_type, - CORBA::ULong& id, - CORBA::Environment& _env) - TAO_THROW_SPEC ((CosTrading::IllegalOfferId)); - // Take in a previously generated offer id and return the type - // and id that were used to generate the offer id. - - // = Disallow these operations. - ACE_UNIMPLEMENTED_FUNC (void operator= (const TAO_Offer_Database<LOCK_TYPE> &)) - ACE_UNIMPLEMENTED_FUNC (TAO_Offer_Database (const TAO_Offer_Database<LOCK_TYPE> &)) - - LOCK_TYPE db_lock_; - - Offer_Database offer_db_; - // The protected data structure. -}; - -template <class LOCK_TYPE> -class TAO_Service_Offer_Iterator -// = TITLE -// TAO_Service_Offer_Iterator iterates over the set of exported -// offers for a given type. Handily, it takes care of all the -// necessary locking, acquiring them in the constructor, and -// releasing them in the destructor. -{ - public: - - typedef TAO_Offer_Database<LOCK_TYPE> Offer_Database; - - TAO_Service_Offer_Iterator (const char* type, - TAO_Offer_Database<LOCK_TYPE>& offer_database); - - ~TAO_Service_Offer_Iterator (void); - // Release all the locks acquired. - - int has_more_offers (void); - // Returns 1 if there are more offers, 0 otherwise. - - CosTrading::OfferId get_id (void); - // Get the id for the current offer. - - CosTrading::Offer* get_offer (void); - // Returns the next offer in the series. - - void next_offer (void); - // Advances the iterator 1. - - private: - // Protected constructor. - - TAO_Offer_Database<LOCK_TYPE>& stm_; - // Lock the top_level map. - - LOCK_TYPE* lock_; - // Lock for the internal map. - - TAO_Offer_Map::iterator* offer_iter_; - // Iterator over the actual offer map. - - const char* type_; - // The name of the type. Used for constructing offer ids. -}; - - -#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) -#include "Offer_Database.cpp" -#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ - -#endif /* TAO_SERVICE_TYPE_MAP_H */ |