summaryrefslogtreecommitdiff
path: root/TAO/tao/Object_Table.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/Object_Table.cpp')
-rw-r--r--TAO/tao/Object_Table.cpp662
1 files changed, 0 insertions, 662 deletions
diff --git a/TAO/tao/Object_Table.cpp b/TAO/tao/Object_Table.cpp
deleted file mode 100644
index 567b48af86e..00000000000
--- a/TAO/tao/Object_Table.cpp
+++ /dev/null
@@ -1,662 +0,0 @@
-// $Id$
-
-#include "ace/Auto_Ptr.h"
-
-#include "tao/corba.h"
-#include "tao/Object_Table.h"
-
-ACE_RCSID(tao, Object_Table, "$Id$")
-
-TAO_Object_Table_Iterator_Impl::~TAO_Object_Table_Iterator_Impl (void)
-{
-}
-
-TAO_Object_Table_Impl::~TAO_Object_Table_Impl (void)
-{
-}
-
-int
-TAO_Object_Table_Impl::find (const PortableServer::Servant servant)
-{
- PortableServer::ObjectId* id;
- PortableServer::ObjectId_out id_out (id);
- int ret = this->find (servant, id_out);
- if (ret == -1)
- return -1;
-
- // It was found and returned in <id>, we must release it.
- delete id;
- return 0;
-}
-
-int
-TAO_Object_Table_Impl::find (const PortableServer::ObjectId &id)
-{
- PortableServer::Servant servant;
- return this->find (id, servant);
-}
-
-int
-TAO_Object_Table_Impl::find (const PortableServer::Servant servant,
- PortableServer::ObjectId_out id)
-{
- id.ptr () = 0;
- auto_ptr<TAO_Object_Table_Iterator_Impl> end (this->end ());
- for (auto_ptr<TAO_Object_Table_Iterator_Impl> i (this->begin ());
- !i->done (end.get ());
- i->advance ())
- {
- const TAO_Object_Table_Entry& item = i->item ();
- if (item.int_id_ == servant)
- {
- if (id.ptr () != 0)
- {
- // More than one match return -1.
- delete id.ptr ();
- return -1;
- }
- // Store the match....
- id.ptr () = new PortableServer::ObjectId (item.ext_id_);
- }
- }
- return (id.ptr () == 0)?-1:0;
-}
-
-
-
-TAO_Object_Table_Iterator::
-TAO_Object_Table_Iterator (TAO_Object_Table_Iterator_Impl *impl)
- : impl_ (impl)
-{
-}
-
-TAO_Object_Table_Iterator::
-TAO_Object_Table_Iterator (const TAO_Object_Table_Iterator &x)
- : impl_ (0)
-{
- if (x.impl_ != 0)
- {
- this->impl_ = x.impl_->clone ();
- }
-}
-
-TAO_Object_Table_Iterator&
-TAO_Object_Table_Iterator::operator= (const TAO_Object_Table_Iterator &x)
-{
- if (this != &x)
- {
- delete this->impl_;
- if (x.impl_ == 0)
- {
- this->impl_ = 0;
- }
- else
- {
- this->impl_ = x.impl_->clone ();
- }
- }
- return *this;
-}
-
-TAO_Object_Table_Iterator::~TAO_Object_Table_Iterator (void)
-{
- if (this->impl_ != 0)
- {
- delete this->impl_;
- this->impl_ = 0;
- }
-}
-
-const TAO_Object_Table_Entry&
-TAO_Object_Table_Iterator::operator* (void) const
-{
- return this->impl_->item ();
-}
-
-TAO_Object_Table_Iterator
-TAO_Object_Table_Iterator::operator++ (void)
-{
- TAO_Object_Table_Iterator tmp = *this;
- this->impl_->advance ();
- return tmp;
-}
-
-TAO_Object_Table_Iterator
-TAO_Object_Table_Iterator::operator++ (int)
-{
- this->impl_->advance ();
- return *this;
-}
-
-int
-operator== (const TAO_Object_Table_Iterator &l,
- const TAO_Object_Table_Iterator &r)
-{
- return l.impl_->done (r.impl_);
-}
-
-int
-operator!= (const TAO_Object_Table_Iterator &l,
- const TAO_Object_Table_Iterator &r)
-{
- return !(l == r);
-}
-
-
-
-TAO_Object_Table::TAO_Object_Table (void)
-{
- this->impl_ = TAO_ORB_Core_instance ()->server_factory ()->create_object_table ();
-}
-
-TAO_Object_Table::~TAO_Object_Table (void)
-{
- delete this->impl_;
-}
-
-int
-TAO_Object_Table::find (const PortableServer::ObjectId &id,
- PortableServer::Servant &servant)
-{
- return this->impl_->find (id, servant);
-}
-
-int
-TAO_Object_Table::bind (const PortableServer::ObjectId &id,
- PortableServer::Servant servant)
-{
- return this->impl_->bind (id, servant);
-}
-
-int
-TAO_Object_Table::unbind (const PortableServer::ObjectId &id,
- PortableServer::Servant &servant)
-{
- return this->impl_->unbind (id, servant);
-}
-
-int
-TAO_Object_Table::find (const PortableServer::Servant servant)
-{
- return this->impl_->find (servant);
-}
-
-int
-TAO_Object_Table::find (const PortableServer::ObjectId &id)
-{
- return this->impl_->find (id);
-}
-
-int
-TAO_Object_Table::find (const PortableServer::Servant servant,
- PortableServer::ObjectId_out id)
-{
- return this->impl_->find (servant, id);
-}
-
-TAO_Object_Table::iterator
-TAO_Object_Table::begin (void) const
-{
- return TAO_Object_Table::iterator (this->impl_->begin ());
-}
-
-TAO_Object_Table::iterator
-TAO_Object_Table::end (void) const
-{
- return TAO_Object_Table::iterator (this->impl_->end ());
-}
-
-
-
-/*
-int
-operator== (const PortableServer::ObjectId &l,
- const PortableServer::ObjectId &r)
-{
- if (l.length () != r.length ())
- return 0;
-
- for (CORBA::ULong i = 0;
- i < l.length ();
- ++i)
- {
- if (l[i] != r[i])
- return 0;
- }
- return 1;
-}
-*/
-
-// Template specialization....
-u_long
-ACE_Hash_Map_Manager<PortableServer::ObjectId, PortableServer::Servant, ACE_SYNCH_NULL_MUTEX>::
-hash (const PortableServer::ObjectId &ext_id)
-{
- // Based on hash_pjw function on the ACE library.
- u_long hash = 0;
-
- for (CORBA::ULong i = 0;
- i < ext_id.length ();
- ++i)
- {
- hash = (hash << 4) + (ext_id[i] * 13);
-
- u_long g = hash & 0xf0000000;
-
- if (g)
- {
- hash ^= (g >> 24);
- hash ^= g;
- }
- }
-
- return hash;
-}
-
-TAO_Dynamic_Hash_ObjTable::TAO_Dynamic_Hash_ObjTable (CORBA::ULong size)
- : hash_map_ (size)
-{
-}
-
-int
-TAO_Dynamic_Hash_ObjTable::find (const PortableServer::Servant servant)
-{
- return this->TAO_Object_Table_Impl::find (servant);
-}
-
-int
-TAO_Dynamic_Hash_ObjTable::find (const PortableServer::ObjectId &id)
-{
- return this->TAO_Object_Table_Impl::find (id);
-}
-
-int
-TAO_Dynamic_Hash_ObjTable::find (const PortableServer::Servant servant,
- PortableServer::ObjectId_out id)
-{
- return this->TAO_Object_Table_Impl::find (servant, id);
-}
-
-int
-TAO_Dynamic_Hash_ObjTable::find (const PortableServer::ObjectId &id,
- PortableServer::Servant &servant)
-{
- return this->hash_map_.find (id, servant);
-}
-
-int
-TAO_Dynamic_Hash_ObjTable::bind (const PortableServer::ObjectId &id,
- PortableServer::Servant servant)
-{
- return this->hash_map_.bind (id, servant);
-}
-
-int
-TAO_Dynamic_Hash_ObjTable::unbind (const PortableServer::ObjectId &id,
- PortableServer::Servant &servant)
-{
- return this->hash_map_.unbind (id, servant);
-}
-
-TAO_Object_Table_Iterator_Impl*
-TAO_Dynamic_Hash_ObjTable::begin (void) const
-{
- TAO_Dynamic_Hash_ObjTable *non_const =
- ACE_const_cast(TAO_Dynamic_Hash_ObjTable*, this);
- return new TAO_Dynamic_Hash_ObjTable_Iterator (Iterator (non_const->hash_map_));
-}
-
-TAO_Object_Table_Iterator_Impl*
-TAO_Dynamic_Hash_ObjTable::end (void) const
-{
- return 0;
-}
-
-TAO_Dynamic_Hash_ObjTable_Iterator::
-TAO_Dynamic_Hash_ObjTable_Iterator (const Impl& impl)
- : impl_ (impl)
-{
-}
-
-TAO_Object_Table_Iterator_Impl*
-TAO_Dynamic_Hash_ObjTable_Iterator::clone (void) const
-{
- return new TAO_Dynamic_Hash_ObjTable_Iterator (*this);
-}
-
-const TAO_Object_Table_Entry&
-TAO_Dynamic_Hash_ObjTable_Iterator::item (void) const
-{
- TAO_Object_Table_Entry& entry =
- ACE_const_cast(TAO_Object_Table_Entry&, this->entry_);
- ACE_Hash_Map_Entry<PortableServer::ObjectId,PortableServer::Servant>* tmp;
- if (ACE_const_cast(TAO_Dynamic_Hash_ObjTable_Iterator*,this)->impl_.next (tmp) == 1)
- {
- entry.int_id_ = tmp->int_id_;
- entry.ext_id_ = tmp->ext_id_;
- }
- return entry;
-}
-
-void
-TAO_Dynamic_Hash_ObjTable_Iterator::advance (void)
-{
- this->impl_.advance ();
-}
-
-int
-TAO_Dynamic_Hash_ObjTable_Iterator::done (const TAO_Object_Table_Iterator_Impl *) const
-{
- return this->impl_.done ();
-}
-
-
-
-TAO_Array_ObjTable_Iterator::
-TAO_Array_ObjTable_Iterator (TAO_Object_Table_Entry *pos)
- : pos_ (pos)
-{
-}
-
-TAO_Object_Table_Iterator_Impl *
-TAO_Array_ObjTable_Iterator::clone (void) const
-{
- return new TAO_Array_ObjTable_Iterator (*this);
-}
-
-const TAO_Object_Table_Entry&
-TAO_Array_ObjTable_Iterator::item (void) const
-{
- return *this->pos_;
-}
-
-void
-TAO_Array_ObjTable_Iterator::advance (void)
-{
- this->pos_++;
-}
-
-int
-TAO_Array_ObjTable_Iterator::done (const TAO_Object_Table_Iterator_Impl *end) const
-{
- const TAO_Array_ObjTable_Iterator *tmp =
- ACE_dynamic_cast(const TAO_Array_ObjTable_Iterator*, end);
- return (this->pos_ == tmp->pos_);
-}
-
-
-
-TAO_Linear_ObjTable::
-TAO_Linear_ObjTable (CORBA::ULong size)
- : next_ (0),
- tablesize_ (size)
-{
- ACE_NEW (table_, TAO_Object_Table_Entry[this->tablesize_]);
-}
-
-TAO_Linear_ObjTable::~TAO_Linear_ObjTable (void)
-{
- if (this->table_ != 0)
- {
- delete[] this->table_;
- this->table_ = 0;
- }
-}
-
-int
-TAO_Linear_ObjTable::find (const PortableServer::Servant servant)
-{
- return this->TAO_Object_Table_Impl::find (servant);
-}
-
-int
-TAO_Linear_ObjTable::find (const PortableServer::ObjectId &id)
-{
- return this->TAO_Object_Table_Impl::find (id);
-}
-
-int
-TAO_Linear_ObjTable::find (const PortableServer::Servant servant,
- PortableServer::ObjectId_out id)
-{
- return this->TAO_Object_Table_Impl::find (servant, id);
-}
-
-int
-TAO_Linear_ObjTable::find (const PortableServer::ObjectId &id,
- PortableServer::Servant &servant)
-{
- for (TAO_Object_Table_Entry *i = this->table_;
- i != this->table_ + this->next_;
- ++i)
- {
- if ((*i).ext_id_ == id)
- {
- servant = (*i).int_id_;
- return 0;
- }
- }
- return -1;
-}
-
-const int start_tblsiz = 128;
-const int max_exp = 65536; // Grow table exponentially up to 64K
-const int lin_chunk = 32768; // afterwards grow in chunks of 32K
-
-int
-TAO_Linear_ObjTable::bind (const PortableServer::ObjectId &id,
- PortableServer::Servant servant)
-{
- for (TAO_Object_Table_Entry *i = this->table_;
- i != this->table_ + this->next_;
- ++i)
- {
- if ((*i).ext_id_ == id || (*i).int_id_ == 0)
- {
- (*i).ext_id_ = id;
- (*i).int_id_ = servant;
- return 0;
- }
- }
- if (this->next_ == this->tablesize_)
- {
- if (this->next_ == 0)
- {
- this->tablesize_ = start_tblsiz;
- ACE_NEW_RETURN (this->table_,
- TAO_Object_Table_Entry[this->tablesize_],
- -1);
- }
- else
- {
- if (this->tablesize_ < max_exp)
- {
- this->tablesize_ *= 2;
- }
- else
- {
- this->tablesize_ += lin_chunk;
- }
- TAO_Object_Table_Entry *tmp;
- ACE_NEW_RETURN (tmp,
- TAO_Object_Table_Entry[this->tablesize_],
- -1);
- for (TAO_Object_Table_Entry *i = this->table_, *j = tmp;
- i != this->table_ + this->next_;
- ++i, ++j)
- {
- *j = *i;
- }
- delete[] this->table_;
- this->table_ = tmp;
- }
- }
- this->table_[this->next_].ext_id_ = id;
- this->table_[this->next_].int_id_ = servant;
- this->next_++;
- return 0;
-}
-
-int
-TAO_Linear_ObjTable::unbind (const PortableServer::ObjectId &id,
- PortableServer::Servant &servant)
-{
- for (TAO_Object_Table_Entry *i = this->table_;
- i != this->table_ + this->next_;
- ++i)
- {
- if ((*i).ext_id_ == id)
- {
- servant = (*i).int_id_;
- (*i).int_id_ = 0;
- return 0;
- }
- }
- return -1;
-}
-
-TAO_Object_Table_Iterator_Impl*
-TAO_Linear_ObjTable::begin () const
-{
- return new TAO_Array_ObjTable_Iterator (this->table_);
-}
-
-TAO_Object_Table_Iterator_Impl*
-TAO_Linear_ObjTable::end () const
-{
- return new TAO_Array_ObjTable_Iterator (this->table_ + this->next_);
-}
-
-
-
-// Active Demux search strategy
-// constructor
-TAO_Active_Demux_ObjTable::TAO_Active_Demux_ObjTable (CORBA::ULong size)
- : tablesize_ (size)
-{
- ACE_NEW (this->table_, TAO_Object_Table_Entry[size]);
- // @@ Maybe a proper constructor for TAO_Object_Table_Entry will
- // solve this more cleanly.
- for (TAO_Object_Table_Entry *i = this->table_;
- i != this->table_ + this->tablesize_;
- ++i)
- {
- (*i).int_id_ = 0;
- }
-}
-
-// destructor
-TAO_Active_Demux_ObjTable::~TAO_Active_Demux_ObjTable ()
-{
- delete [] this->table_;
-}
-
-int
-TAO_Active_Demux_ObjTable::index_from_id (const PortableServer::ObjectId & /*id*/) const
-{
- // @@ TODO parse id an obtain the index, maybe write a "index" to id
- // function or some method to obtain the next "free" id.
- return 0;
-}
-
-
-int
-TAO_Active_Demux_ObjTable::next_free (void) const
-{
- for (TAO_Object_Table_Entry *i = this->table_;
- i != this->table_ + this->tablesize_;
- ++i)
- {
- if ((*i).int_id_ == 0)
- {
- return (i - this->table_);
- }
- }
- return -1;
-}
-
-int
-TAO_Active_Demux_ObjTable::find (const PortableServer::Servant servant)
-{
- return this->TAO_Object_Table_Impl::find (servant);
-}
-
-int
-TAO_Active_Demux_ObjTable::find (const PortableServer::ObjectId &id)
-{
- return this->TAO_Object_Table_Impl::find (id);
-}
-
-int
-TAO_Active_Demux_ObjTable::find (const PortableServer::Servant servant,
- PortableServer::ObjectId_out id)
-{
- return this->TAO_Object_Table_Impl::find (servant, id);
-}
-
-int
-TAO_Active_Demux_ObjTable::find (const PortableServer::ObjectId &id,
- PortableServer::Servant &servant)
-{
- int index = this->index_from_id (id);
- if (index < 0 || index > this->tablesize_)
- {
- return -1;
- }
- servant = this->table_[index].int_id_;
- return 0;
-}
-
-int
-TAO_Active_Demux_ObjTable::bind (const PortableServer::ObjectId &id,
- PortableServer::Servant servant)
-{
- int index = this->index_from_id (id);
- if (index < 0 || index > this->tablesize_)
- {
- return -1;
- }
- this->table_[index].ext_id_ = id;
- this->table_[index].int_id_ = servant;
- return 0;
-}
-
-int
-TAO_Active_Demux_ObjTable::unbind (const PortableServer::ObjectId &id,
- PortableServer::Servant &servant)
-{
- int index = this->index_from_id (id);
- if (index < 0 || index > this->tablesize_)
- {
- return -1;
- }
- servant = this->table_[index].int_id_;
- this->table_[index].int_id_ = 0;
- return 0;
-}
-
-TAO_Object_Table_Iterator_Impl*
-TAO_Active_Demux_ObjTable::begin () const
-{
- return new TAO_Array_ObjTable_Iterator (this->table_);
-}
-
-TAO_Object_Table_Iterator_Impl*
-TAO_Active_Demux_ObjTable::end () const
-{
- return new TAO_Array_ObjTable_Iterator (this->table_ + this->tablesize_);
-}
-
-#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
-template class ACE_Hash_Map_Iterator_Base<PortableServer::ObjectId, PortableServer::Servant, ACE_SYNCH_NULL_MUTEX>;
-template class ACE_Hash_Map_Iterator<PortableServer::ObjectId, PortableServer::Servant, ACE_SYNCH_NULL_MUTEX>;
-template class ACE_Hash_Map_Reverse_Iterator<PortableServer::ObjectId, PortableServer::Servant, ACE_SYNCH_NULL_MUTEX>;
-template class ACE_Hash_Map_Manager<PortableServer::ObjectId, PortableServer::Servant, ACE_SYNCH_NULL_MUTEX>;
-template class ACE_Hash_Map_Entry<PortableServer::ObjectId, PortableServer::Servant>;
-#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
-#pragma instantiate ACE_Hash_Map_Iterator_Base<PortableServer::ObjectId, PortableServer::Servant, ACE_SYNCH_NULL_MUTEX>
-#pragma instantiate ACE_Hash_Map_Iterator<PortableServer::ObjectId, PortableServer::Servant, ACE_SYNCH_NULL_MUTEX>
-#pragma instantiate ACE_Hash_Map_Reverse_Iterator<PortableServer::ObjectId, PortableServer::Servant, ACE_SYNCH_NULL_MUTEX>
-#pragma instantiate ACE_Hash_Map_Manager<PortableServer::ObjectId, PortableServer::Servant, ACE_SYNCH_NULL_MUTEX>
-#pragma instantiate ACE_Hash_Map_Entry<PortableServer::ObjectId, PortableServer::Servant>
-#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */