diff options
Diffstat (limited to 'TAO/tao/PortableServer/Active_Object_Map.inl')
-rw-r--r-- | TAO/tao/PortableServer/Active_Object_Map.inl | 264 |
1 files changed, 264 insertions, 0 deletions
diff --git a/TAO/tao/PortableServer/Active_Object_Map.inl b/TAO/tao/PortableServer/Active_Object_Map.inl new file mode 100644 index 00000000000..4ccd3ff3281 --- /dev/null +++ b/TAO/tao/PortableServer/Active_Object_Map.inl @@ -0,0 +1,264 @@ +// -*- C++ -*- +// +// $Id$ + +#include "tao/PortableServer/Active_Object_Map_Entry.h" + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE int +TAO_Active_Object_Map::is_servant_in_map (PortableServer::Servant servant, + bool &deactivated) +{ + return this->id_uniqueness_strategy_->is_servant_in_map (servant, + deactivated); +} + +ACE_INLINE int +TAO_Active_Object_Map::bind_using_system_id_returning_system_id (PortableServer::Servant servant, + CORBA::Short priority, + PortableServer::ObjectId_out system_id) +{ + if (servant == 0 && + !this->using_active_maps_) + { + PortableServer::ObjectId id; + + int result = + this->user_id_map_->create_key (id); + + if (result == 0) + { + ACE_NEW_RETURN (system_id, + PortableServer::ObjectId (id), + -1); + } + + return result; + } + + TAO_Active_Object_Map_Entry *entry = 0; + + int result = this->id_assignment_strategy_->bind_using_system_id (servant, + priority, + entry); + + if (result == 0) + result = this->id_hint_strategy_->system_id (system_id, + *entry); + return result; +} + +ACE_INLINE int +TAO_Active_Object_Map::bind_using_system_id_returning_user_id (PortableServer::Servant servant, + CORBA::Short priority, + PortableServer::ObjectId_out user_id) +{ + TAO_Active_Object_Map_Entry *entry = 0; + + int result = this->id_assignment_strategy_->bind_using_system_id (servant, + priority, + entry); + if (result == 0) + ACE_NEW_RETURN (user_id, + PortableServer::ObjectId (entry->user_id_), + -1); + return result; +} + +ACE_INLINE int +TAO_Active_Object_Map::bind_using_user_id (PortableServer::Servant servant, + const PortableServer::ObjectId &user_id, + CORBA::Short priority) +{ + TAO_Active_Object_Map_Entry *entry = 0; + return this->id_uniqueness_strategy_->bind_using_user_id (servant, + user_id, + priority, + entry); +} + +ACE_INLINE int +TAO_Active_Object_Map::find_system_id_using_user_id (const PortableServer::ObjectId &user_id, + CORBA::Short priority, + PortableServer::ObjectId_out system_id) +{ + if (!this->using_active_maps_) + { + ACE_NEW_RETURN (system_id, + PortableServer::ObjectId (user_id), + -1); + + return 0; + } + + TAO_Active_Object_Map_Entry *entry = 0; + int result = this->id_uniqueness_strategy_->bind_using_user_id (0, + user_id, + priority, + entry); + if (result == 0) + result = this->id_hint_strategy_->system_id (system_id, + *entry); + return result; +} + +ACE_INLINE int +TAO_Active_Object_Map::rebind_using_user_id_and_system_id (PortableServer::Servant servant, + const PortableServer::ObjectId &user_id, + const PortableServer::ObjectId &system_id, + TAO_Active_Object_Map_Entry *&entry) +{ + ACE_UNUSED_ARG (system_id); + + return this->id_uniqueness_strategy_->bind_using_user_id (servant, + user_id, + -1, + entry); +} + +ACE_INLINE int +TAO_Active_Object_Map::unbind_using_user_id (const PortableServer::ObjectId &user_id) +{ + return this->id_uniqueness_strategy_->unbind_using_user_id (user_id); +} + +ACE_INLINE int +TAO_Active_Object_Map::find_user_id_using_servant (PortableServer::Servant servant, + PortableServer::ObjectId_out user_id) +{ + return this->id_uniqueness_strategy_->find_user_id_using_servant (servant, + user_id); +} + +ACE_INLINE int +TAO_Active_Object_Map::find_system_id_using_servant (PortableServer::Servant servant, + PortableServer::ObjectId_out system_id, + CORBA::Short &priority) +{ + return this->id_uniqueness_strategy_->find_system_id_using_servant (servant, + system_id, + priority); +} + +ACE_INLINE int +TAO_Active_Object_Map::find_servant_using_user_id (const PortableServer::ObjectId &user_id, + PortableServer::Servant &servant) +{ + TAO_Active_Object_Map_Entry *entry = 0; + int result = this->user_id_map_->find (user_id, + entry); + if (result == 0) + { + if (entry->deactivated_) + result = -1; + else if (entry->servant_ == 0) + result = -1; + else + servant = entry->servant_; + } + + return result; +} + +ACE_INLINE int +TAO_Active_Object_Map::find_servant_using_system_id_and_user_id (const PortableServer::ObjectId &system_id, + const PortableServer::ObjectId &user_id, + PortableServer::Servant &servant, + TAO_Active_Object_Map_Entry *&entry) +{ + return this->lifespan_strategy_->find_servant_using_system_id_and_user_id (system_id, + user_id, + servant, + entry); +} + +ACE_INLINE int +TAO_Active_Object_Map::find_entry_using_user_id (const PortableServer::ObjectId &user_id, + TAO_Active_Object_Map_Entry *&entry) +{ + int result = this->user_id_map_->find (user_id, + entry); + + if (result == 0) + { + if (entry->deactivated_) + result = -1; + } + + return result; +} + +ACE_INLINE int +TAO_Active_Object_Map::find_servant_and_system_id_using_user_id (const PortableServer::ObjectId &user_id, + PortableServer::Servant &servant, + PortableServer::ObjectId_out system_id, + CORBA::Short &priority) +{ + TAO_Active_Object_Map_Entry *entry = 0; + int result = this->find_entry_using_user_id (user_id, + entry); + + if (result == 0) + { + if (entry->servant_ == 0) + { + result = -1; + } + else + { + result = this->id_hint_strategy_->system_id (system_id, + *entry); + if (result == 0) + { + servant = entry->servant_; + priority = entry->priority_; + } + } + } + + return result; +} + +ACE_INLINE int +TAO_Active_Object_Map::find_user_id_using_system_id (const PortableServer::ObjectId &system_id, + PortableServer::ObjectId_out user_id) +{ + PortableServer::ObjectId id; + int result = this->id_hint_strategy_->recover_key (system_id, + id); + if (result == 0) + ACE_NEW_RETURN (user_id, + PortableServer::ObjectId (id), + -1); + return 0; +} + +ACE_INLINE int +TAO_Active_Object_Map::find_user_id_using_system_id (const PortableServer::ObjectId &system_id, + PortableServer::ObjectId &user_id) +{ + return this->id_hint_strategy_->recover_key (system_id, + user_id); +} + +ACE_INLINE CORBA::Boolean +TAO_Active_Object_Map::remaining_activations (PortableServer::Servant servant) +{ + return this->id_uniqueness_strategy_->remaining_activations (servant); +} + +ACE_INLINE size_t +TAO_Active_Object_Map::current_size (void) +{ + return this->user_id_map_->current_size (); +} + +/* static */ +ACE_INLINE size_t +TAO_Active_Object_Map::system_id_size (void) +{ + return TAO_Active_Object_Map::system_id_size_; +} + +TAO_END_VERSIONED_NAMESPACE_DECL |