Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "tao/IORTable/IOR_Table_Impl.h"
00011 #include "ace/Guard_T.h"
00012
00013 ACE_RCSID (IORTable,
00014 IOR_Table_Impl,
00015 "$Id: IOR_Table_Impl.cpp 76995 2007-02-11 12:51:42Z johnnyw $")
00016
00017
00018 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00019
00020 TAO_IOR_Table_Impl_ptr
00021 TAO::Objref_Traits <TAO_IOR_Table_Impl>::duplicate (TAO_IOR_Table_Impl_ptr p)
00022 {
00023 if (!::CORBA::is_nil (p))
00024 {
00025 p->_add_ref ();
00026 }
00027
00028 return p;
00029 }
00030
00031 void
00032 TAO::Objref_Traits <TAO_IOR_Table_Impl>::release (TAO_IOR_Table_Impl_ptr p)
00033 {
00034 ::CORBA::release (p);
00035 }
00036
00037 TAO_IOR_Table_Impl_ptr
00038 TAO::Objref_Traits <TAO_IOR_Table_Impl>::nil (void)
00039 {
00040 return TAO_IOR_Table_Impl::_nil ();
00041 }
00042
00043 ::CORBA::Boolean
00044 TAO::Objref_Traits <TAO_IOR_Table_Impl>::marshal (const TAO_IOR_Table_Impl_ptr,
00045 TAO_OutputCDR &)
00046 {
00047 return false;
00048 }
00049
00050 TAO_IOR_Table_Impl::TAO_IOR_Table_Impl (void)
00051 {
00052 }
00053
00054 char *
00055 TAO_IOR_Table_Impl::find (const char *object_key)
00056 {
00057
00058
00059 {
00060 ACE_CString key (object_key);
00061 ACE_CString ior;
00062
00063 ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->lock_, 0);
00064 if (this->map_.find (key, ior) == 0)
00065 {
00066 return CORBA::string_dup (ior.c_str ());
00067 }
00068 if (CORBA::is_nil (this->locator_.in ()))
00069 throw IORTable::NotFound ();
00070 }
00071
00072 return this->locator_->locate (object_key);
00073 }
00074
00075 void
00076 TAO_IOR_Table_Impl::bind (const char * object_key, const char * IOR)
00077 {
00078 ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->lock_);
00079 if (this->map_.bind (object_key, IOR) != 0)
00080 throw IORTable::AlreadyBound ();
00081 }
00082
00083 void
00084 TAO_IOR_Table_Impl::rebind (const char * object_key, const char * IOR)
00085 {
00086 ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->lock_);
00087 this->map_.rebind (object_key, IOR);
00088 }
00089
00090 void
00091 TAO_IOR_Table_Impl::unbind (const char * object_key)
00092 {
00093 ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->lock_);
00094 if (this->map_.unbind (object_key) != 0)
00095 throw IORTable::NotFound ();
00096 }
00097
00098 void
00099 TAO_IOR_Table_Impl::set_locator (IORTable::Locator_ptr locator)
00100 {
00101 ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->lock_);
00102 this->locator_ = IORTable::Locator::_duplicate (locator);
00103 }
00104
00105 TAO_END_VERSIONED_NAMESPACE_DECL