Revert "Minor modernization of DynamicAny code"
[ACE_TAO.git] / TAO / tao / ObjectKey_Table.inl
blob0a9cb33d70ed6d8acba26fb0f9bc00ec5e81a64d
1 #include "tao/Refcounted_ObjectKey.h"
3 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
5 ACE_INLINE
6 int
7 TAO::ObjectKey_Table::bind (const TAO::ObjectKey &key,
8                             TAO::Refcounted_ObjectKey *&key_new)
11   key_new = 0;
13   int retval = 0;
15   {
16     ACE_GUARD_RETURN (TAO_SYNCH_MUTEX,
17                       ace_mon,
18                       this->lock_,
19                       0);
21     // This is a tradeoff.. We could avoid this two stage process of
22     // using a find () and then a bind () , which would make things
23     // efficient. BUT we may have to do allocation upfront and delete if
24     // bind () returns with an entry. We take one of the routes that
25     // avoids allocation.
26     retval = this->table_.find (key, key_new);
28     if (retval == -1)
29       {
30         return this->bind_i (key, key_new);
31       }
33     (void) key_new->incr_refcount ();
34   }
36   return retval;
39 ACE_INLINE
40 int
41 TAO::ObjectKey_Table::unbind (TAO::Refcounted_ObjectKey *&key_new)
44   ACE_GUARD_RETURN (TAO_SYNCH_MUTEX,
45                     ace_mon,
46                     this->lock_,
47                     0);
49   // If the refcount has dropped to 1, just go ahead and unbind it
50   // from the table.
51   if (key_new && key_new->decr_refcount () == 1)
52     {
53       return this->unbind_i (key_new);
54     }
56   return 0;
59 TAO_END_VERSIONED_NAMESPACE_DECL