TAO  2.3.4
Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
TAO::ObjectKey_Table Class Reference

Table that maintains the set of ObjectKey's seen by the ORB. More...

#include <ObjectKey_Table.h>

Collaboration diagram for TAO::ObjectKey_Table:
Collaboration graph
[legend]

Public Member Functions

 ObjectKey_Table (void)
 Default Constructor and destructor.. More...
 
 ~ObjectKey_Table (void)
 
int destroy (void)
 Iterates and unbinds the contents of the table. More...
 
int bind (const ObjectKey &key, Refcounted_ObjectKey *&key_new)
 Bind the ObjectKey in the table. More...
 
int unbind (TAO::Refcounted_ObjectKey *&key)
 Unbind an ObjectKey from the table. More...
 

Protected Member Functions

int bind_i (const ObjectKey &key, Refcounted_ObjectKey *&key_new)
 Implementation for bind (). More...
 
int unbind_i (Refcounted_ObjectKey *&key)
 Implementation for unbind (). More...
 

Private Types

typedef ACE_RB_Tree< TAO::ObjectKey, TAO::Refcounted_ObjectKey *, TAO::Less_Than_ObjectKey, ACE_Null_MutexTABLE
 Some useful typedefs. More...
 

Private Member Functions

 ObjectKey_Table (const ObjectKey_Table &)
 
ObjectKey_Tableoperator= (const ObjectKey_Table &)
 

Private Attributes

TAO_SYNCH_MUTEX lock_
 Lock for the table. More...
 
TABLE table_
 Table that contains the data. More...
 

Detailed Description

Table that maintains the set of ObjectKey's seen by the ORB.

The ORB maintains one table for the whole ORB. ObjectKeys generated by the ORB or the ones seen by the ORB from remote ORB's are stored here. The ObjectKeys are stored through a wrapper which encapsulates the reference count on them. This class actually provides the synchronization mechanism for manipulating the reference counts on the object keys provided by the wrapper class.

This class does not offer a find () call with a reason. The call to bind () will return a pointer which is expected to be cached by the client/caller and use the pointer in every invocation.

Note
This class uses the ACE_RB_Tree to maintain the table of ObjectKeys. The RB_Tree has good insertion and lookup properties. Its Iteration properties are not that good, but we don't need to do much iteration unless we are closing down the table.
The reasons to use RB_Tree are its good dynamic properties. We should try to strategize the class to use either a Hash_Map or a RB_Tree based on some runtime option. For that we need an adapter class in ACE, like an ACE_Lock_Adapter class. We will do that if our instrumentation shows the need for it.

Member Typedef Documentation

Some useful typedefs.

Constructor & Destructor Documentation

TAO::ObjectKey_Table::ObjectKey_Table ( void  )

Default Constructor and destructor..

TAO::ObjectKey_Table::~ObjectKey_Table ( void  )
TAO::ObjectKey_Table::ObjectKey_Table ( const ObjectKey_Table )
private

Member Function Documentation

int TAO::ObjectKey_Table::bind ( const ObjectKey key,
Refcounted_ObjectKey *&  key_new 
)

Bind the ObjectKey in the table.

Bind an ObjectKey in the table and return a pointer to the Refcounted_ObjectKey which the client can use. If the ObjectKey is already available in the table, this operation just increments the refcount on the ObjectKey. If the ObjectKey is new it is bounded to the table. Returns a 0 on success and a -1 on failure.

int TAO::ObjectKey_Table::bind_i ( const ObjectKey key,
Refcounted_ObjectKey *&  key_new 
)
protected

Implementation for bind ().

int TAO::ObjectKey_Table::destroy ( void  )

Iterates and unbinds the contents of the table.

ObjectKey_Table& TAO::ObjectKey_Table::operator= ( const ObjectKey_Table )
private
int TAO::ObjectKey_Table::unbind ( TAO::Refcounted_ObjectKey *&  key)

Unbind an ObjectKey from the table.

int TAO::ObjectKey_Table::unbind_i ( TAO::Refcounted_ObjectKey *&  key_new)
protected

Implementation for unbind ().

Member Data Documentation

TAO_SYNCH_MUTEX TAO::ObjectKey_Table::lock_
private

Lock for the table.

TABLE TAO::ObjectKey_Table::table_
private

Table that contains the data.


The documentation for this class was generated from the following files: