IOR_Table_Impl.cpp

Go to the documentation of this file.
00001 /**
00002  * @file IOR_Table_Impl.cpp
00003  *
00004  * $Id: IOR_Table_Impl.cpp 76995 2007-02-11 12:51:42Z johnnyw $
00005  *
00006  * @author Carlos O'Ryan <coryan@uci.edu>
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   // We don't want the lock held during locate, so make it go out
00058   // of scope before then.
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

Generated on Tue Feb 2 17:43:41 2010 for TAO_IORTable by  doxygen 1.4.7