Define a map abstraction that efficiently associates EXT_ID
type objects with INT_ID
type objects.
More...
#include <Hash_Map_Manager_T.h>
Public Types | |
typedef EXT_ID | KEY |
typedef INT_ID | VALUE |
typedef ACE_LOCK | lock_type |
typedef ACE_Hash_Map_Entry < EXT_ID, INT_ID > | ENTRY |
typedef ACE_Hash_Map_Iterator_Ex < EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > | ITERATOR |
typedef ACE_Hash_Map_Const_Iterator_Ex < EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > | CONST_ITERATOR |
typedef ACE_Hash_Map_Reverse_Iterator_Ex < EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > | REVERSE_ITERATOR |
typedef ACE_Hash_Map_Const_Reverse_Iterator_Ex < EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > | CONST_REVERSE_ITERATOR |
typedef ACE_Hash_Map_Iterator_Ex < EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > | iterator |
typedef ACE_Hash_Map_Const_Iterator_Ex < EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > | const_iterator |
typedef ACE_Hash_Map_Reverse_Iterator_Ex < EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > | reverse_iterator |
typedef ACE_Hash_Map_Const_Reverse_Iterator_Ex < EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > | const_reverse_iterator |
typedef EXT_ID | key_type |
typedef INT_ID | data_type |
typedef ACE_Hash_Map_Entry < EXT_ID, INT_ID > | value_type |
typedef value_type & | reference |
typedef value_type const & | const_reference |
typedef value_type * | pointer |
typedef value_type const * | const_pointer |
typedef ptrdiff_t | difference_type |
typedef size_t | size_type |
Public Member Functions | |
ACE_Hash_Map_Manager_Ex (ACE_Allocator *table_alloc=0, ACE_Allocator *entry_alloc=0) | |
ACE_Hash_Map_Manager_Ex (size_t size, ACE_Allocator *table_alloc=0, ACE_Allocator *entry_alloc=0) | |
int | open (size_t size=ACE_DEFAULT_MAP_SIZE, ACE_Allocator *table_alloc=0, ACE_Allocator *entry_alloc=0) |
int | close (void) |
int | unbind_all (void) |
Removes all the entries in the ACE_Hash_Map_Manager_Ex. | |
~ACE_Hash_Map_Manager_Ex (void) | |
Cleanup the ACE_Hash_Map_Manager_Ex. | |
int | bind (const EXT_ID &item, const INT_ID &int_id) |
int | bind (const EXT_ID &ext_id, const INT_ID &int_id, ACE_Hash_Map_Entry< EXT_ID, INT_ID > *&entry) |
int | trybind (const EXT_ID &ext_id, INT_ID &int_id) |
int | trybind (const EXT_ID &ext_id, INT_ID &int_id, ACE_Hash_Map_Entry< EXT_ID, INT_ID > *&entry) |
int | rebind (const EXT_ID &ext_id, const INT_ID &int_id) |
int | rebind (const EXT_ID &ext_id, const INT_ID &int_id, ACE_Hash_Map_Entry< EXT_ID, INT_ID > *&entry) |
int | rebind (const EXT_ID &ext_id, const INT_ID &int_id, INT_ID &old_int_id) |
int | rebind (const EXT_ID &ext_id, const INT_ID &int_id, INT_ID &old_int_id, ACE_Hash_Map_Entry< EXT_ID, INT_ID > *&entry) |
int | rebind (const EXT_ID &ext_id, const INT_ID &int_id, EXT_ID &old_ext_id, INT_ID &old_int_id) |
int | rebind (const EXT_ID &ext_id, const INT_ID &int_id, EXT_ID &old_ext_id, INT_ID &old_int_id, ACE_Hash_Map_Entry< EXT_ID, INT_ID > *&entry) |
int | find (const EXT_ID &ext_id, INT_ID &int_id) const |
int | find (const EXT_ID &ext_id) const |
Returns 0 if the ext_id is in the mapping, otherwise -1. | |
int | find (const EXT_ID &ext_id, ACE_Hash_Map_Entry< EXT_ID, INT_ID > *&entry) const |
void | find (EXT_ID const &ext_id, iterator &pos) const |
int | unbind (const EXT_ID &ext_id) |
int | unbind (const EXT_ID &ext_id, INT_ID &int_id) |
int | unbind (ACE_Hash_Map_Entry< EXT_ID, INT_ID > *entry) |
Remove entry from map. | |
int | unbind (iterator pos) |
Remove entry from map pointed to by iterator pos. | |
size_t | current_size (void) const |
size_t | total_size (void) const |
ACE_LOCK & | mutex (void) |
void | dump (void) const |
Dump the state of an object. | |
iterator | begin (void) |
Return forward iterator. | |
iterator | end (void) |
const_iterator | begin (void) const |
const_iterator | end (void) const |
reverse_iterator | rbegin (void) |
Return reverse iterator. | |
reverse_iterator | rend (void) |
const_reverse_iterator | rbegin (void) const |
const_reverse_iterator | rend (void) const |
Protected Member Functions | |
int | equal (const EXT_ID &id1, const EXT_ID &id2) |
u_long | hash (const EXT_ID &ext_id) |
int | bind_i (const EXT_ID &ext_id, const INT_ID &int_id) |
Performs bind. Must be called with locks held. | |
int | bind_i (const EXT_ID &ext_id, const INT_ID &int_id, ACE_Hash_Map_Entry< EXT_ID, INT_ID > *&entry) |
Performs bind. Must be called with locks held. | |
int | trybind_i (const EXT_ID &ext_id, INT_ID &int_id) |
Performs trybind. Must be called with locks held. | |
int | trybind_i (const EXT_ID &ext_id, INT_ID &int_id, ACE_Hash_Map_Entry< EXT_ID, INT_ID > *&entry) |
Performs trybind. Must be called with locks held. | |
int | rebind_i (const EXT_ID &ext_id, const INT_ID &int_id) |
Performs rebind. Must be called with locks held. | |
int | rebind_i (const EXT_ID &ext_id, const INT_ID &int_id, ACE_Hash_Map_Entry< EXT_ID, INT_ID > *&entry) |
Performs rebind. Must be called with locks held. | |
int | rebind_i (const EXT_ID &ext_id, const INT_ID &int_id, INT_ID &old_int_id) |
Performs rebind. Must be called with locks held. | |
int | rebind_i (const EXT_ID &ext_id, const INT_ID &int_id, INT_ID &old_int_id, ACE_Hash_Map_Entry< EXT_ID, INT_ID > *&entry) |
Performs rebind. Must be called with locks held. | |
int | rebind_i (const EXT_ID &ext_id, const INT_ID &int_id, EXT_ID &old_ext_id, INT_ID &old_int_id) |
Performs rebind. Must be called with locks held. | |
int | rebind_i (const EXT_ID &ext_id, const INT_ID &int_id, EXT_ID &old_ext_id, INT_ID &old_int_id, ACE_Hash_Map_Entry< EXT_ID, INT_ID > *&entry) |
Performs rebind. Must be called with locks held. | |
int | find_i (const EXT_ID &ext_id, INT_ID &int_id) |
int | find_i (const EXT_ID &ext_id) |
int | find_i (const EXT_ID &ext_id, ACE_Hash_Map_Entry< EXT_ID, INT_ID > *&entry) |
int | unbind_i (const EXT_ID &ext_id, INT_ID &int_id) |
Performs unbind. Must be called with locks held. | |
int | unbind_i (const EXT_ID &ext_id) |
Performs unbind. Must be called with locks held. | |
int | unbind_i (ACE_Hash_Map_Entry< EXT_ID, INT_ID > *entry) |
Performs unbind. Must be called with locks held. | |
int | create_buckets (size_t size) |
int | close_i (void) |
int | unbind_all_i (void) |
int | shared_find (const EXT_ID &ext_id, ACE_Hash_Map_Entry< EXT_ID, INT_ID > *&entry, size_t &loc) |
Returns the ACE_Hash_Map_Entry that corresponds to ext_id. | |
ACE_Hash_Map_Entry< EXT_ID, INT_ID > * | table (void) |
Accessor of the underlying table. | |
Protected Attributes | |
ACE_Allocator * | table_allocator_ |
ACE_Allocator * | entry_allocator_ |
ACE_LOCK | lock_ |
HASH_KEY | hash_key_ |
Function object used for hashing keys. | |
COMPARE_KEYS | compare_keys_ |
Function object used for comparing keys. | |
Private Member Functions | |
void | operator= (const ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > &) |
ACE_Hash_Map_Manager_Ex (const ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > &) | |
Private Attributes | |
ACE_Hash_Map_Entry< EXT_ID, INT_ID > * | table_ |
size_t | total_size_ |
Total size of the hash table. | |
size_t | cur_size_ |
Friends | |
class | ACE_Hash_Map_Iterator_Base_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > |
class | ACE_Hash_Map_Iterator_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > |
class | ACE_Hash_Map_Const_Iterator_Base_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > |
class | ACE_Hash_Map_Const_Iterator_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > |
class | ACE_Hash_Map_Reverse_Iterator_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > |
class | ACE_Hash_Map_Const_Reverse_Iterator_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > |
class | ACE_Hash_Map_Bucket_Iterator< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > |
Define a map abstraction that efficiently associates EXT_ID
type objects with INT_ID
type objects.
This implementation of a map uses a hash table. Key hashing is achieved through the HASH_KEY
object and key comparison is achieved through the COMPARE_KEYS
object. This class uses an ACE_Allocator to allocate memory. The user can make this a persistent class by providing an ACE_Allocator with a persistable memory pool.
Definition at line 129 of file Hash_Map_Manager_T.h.
typedef ACE_Hash_Map_Const_Iterator_Ex<EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK> ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::CONST_ITERATOR |
Definition at line 152 of file Hash_Map_Manager_T.h.
typedef ACE_Hash_Map_Const_Iterator_Ex<EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK> ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::const_iterator |
Definition at line 162 of file Hash_Map_Manager_T.h.
typedef value_type const* ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::const_pointer |
Definition at line 175 of file Hash_Map_Manager_T.h.
typedef value_type const& ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::const_reference |
Definition at line 173 of file Hash_Map_Manager_T.h.
typedef ACE_Hash_Map_Const_Reverse_Iterator_Ex<EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK> ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::CONST_REVERSE_ITERATOR |
Definition at line 156 of file Hash_Map_Manager_T.h.
typedef ACE_Hash_Map_Const_Reverse_Iterator_Ex<EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK> ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::const_reverse_iterator |
Definition at line 166 of file Hash_Map_Manager_T.h.
typedef INT_ID ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::data_type |
Definition at line 170 of file Hash_Map_Manager_T.h.
typedef ptrdiff_t ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::difference_type |
Definition at line 176 of file Hash_Map_Manager_T.h.
typedef ACE_Hash_Map_Entry<EXT_ID, INT_ID> ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::ENTRY |
Definition at line 146 of file Hash_Map_Manager_T.h.
typedef ACE_Hash_Map_Iterator_Ex<EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK> ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::ITERATOR |
Definition at line 150 of file Hash_Map_Manager_T.h.
typedef ACE_Hash_Map_Iterator_Ex<EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK> ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::iterator |
Definition at line 160 of file Hash_Map_Manager_T.h.
typedef EXT_ID ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::KEY |
Definition at line 141 of file Hash_Map_Manager_T.h.
typedef EXT_ID ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::key_type |
Definition at line 169 of file Hash_Map_Manager_T.h.
typedef ACE_LOCK ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::lock_type |
Definition at line 144 of file Hash_Map_Manager_T.h.
typedef value_type* ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::pointer |
Definition at line 174 of file Hash_Map_Manager_T.h.
typedef value_type& ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::reference |
Definition at line 172 of file Hash_Map_Manager_T.h.
typedef ACE_Hash_Map_Reverse_Iterator_Ex<EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK> ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::REVERSE_ITERATOR |
Definition at line 154 of file Hash_Map_Manager_T.h.
typedef ACE_Hash_Map_Reverse_Iterator_Ex<EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK> ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::reverse_iterator |
Definition at line 164 of file Hash_Map_Manager_T.h.
typedef size_t ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::size_type |
Definition at line 177 of file Hash_Map_Manager_T.h.
typedef INT_ID ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::VALUE |
Definition at line 143 of file Hash_Map_Manager_T.h.
typedef ACE_Hash_Map_Entry<EXT_ID, INT_ID> ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::value_type |
Definition at line 171 of file Hash_Map_Manager_T.h.
ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::ACE_Hash_Map_Manager_Ex | ( | ACE_Allocator * | table_alloc = 0 , |
|
ACE_Allocator * | entry_alloc = 0 | |||
) | [inline] |
Initialize an ACE_Hash_Map_Manager_Ex with a default number of elements.
table_alloc | is a pointer to a memory allocator used for table_, so it should supply size*sizeof (ACE_Hash_Map_Entry<EXT_ID, INT_ID>). If table_alloc is 0 it defaults to ACE_Allocator::instance(). | |
entry_alloc | is a pointer to an additional allocator for entries, so it should be able to allocate 'size' / chunks of sizeof(ACE_Hash_Map_Entry<EXT_ID, INT_ID>) bytes each. If entry_alloc is 0 it defaults to the same allocator as table_alloc. |
Definition at line 24 of file Hash_Map_Manager_T.inl.
: table_allocator_ (table_alloc), entry_allocator_ (entry_alloc), table_ (0), total_size_ (0), cur_size_ (0) { if (this->open (ACE_DEFAULT_MAP_SIZE, table_alloc, entry_alloc) == -1) ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("ACE_Hash_Map_Manager_Ex open"))); }
ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::ACE_Hash_Map_Manager_Ex | ( | size_t | size, | |
ACE_Allocator * | table_alloc = 0 , |
|||
ACE_Allocator * | entry_alloc = 0 | |||
) | [inline] |
Initialize an ACE_Hash_Map_Manager_Ex with size elements.
table_alloc | is a pointer to a memory allocator used for table_, so it should supply size*sizeof (ACE_Hash_Map_Entry<EXT_ID, INT_ID>). If table_alloc is 0 it defaults to ACE_Allocator::instance(). | |
entry_alloc | is a pointer to an additional allocator for entries, so it should be able to allocate 'size' / chunks of sizeof(ACE_Hash_Map_Entry<EXT_ID, INT_ID>) bytes each. If entry_alloc is 0 it defaults to the same allocator as table_alloc. |
Definition at line 10 of file Hash_Map_Manager_T.inl.
: table_allocator_ (table_alloc), entry_allocator_ (entry_alloc), table_ (0), total_size_ (0), cur_size_ (0) { if (this->open (size, table_alloc, entry_alloc) == -1) ACE_ERROR ((LM_ERROR, ACE_TEXT ("ACE_Hash_Map_Manager_Ex\n"))); }
ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::~ACE_Hash_Map_Manager_Ex | ( | void | ) | [inline] |
Cleanup the ACE_Hash_Map_Manager_Ex.
Definition at line 54 of file Hash_Map_Manager_T.inl.
{ this->close (); }
ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::ACE_Hash_Map_Manager_Ex | ( | const ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > & | ) | [private] |
ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::iterator ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::begin | ( | void | ) | [inline] |
Return forward iterator.
Definition at line 378 of file Hash_Map_Manager_T.inl.
{ return iterator (*this); }
ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::const_iterator ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::begin | ( | void | ) | const [inline] |
Definition at line 392 of file Hash_Map_Manager_T.inl.
{ return const_iterator (*this); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::bind | ( | const EXT_ID & | ext_id, | |
const INT_ID & | int_id, | |||
ACE_Hash_Map_Entry< EXT_ID, INT_ID > *& | entry | |||
) | [inline] |
Same as a normal bind, except the map entry is also passed back to the caller. The entry in this case will either be the newly created entry, or the existing one.
Definition at line 110 of file Hash_Map_Manager_T.inl.
{ ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); return this->bind_i (ext_id, int_id, entry); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::bind | ( | const EXT_ID & | item, | |
const INT_ID & | int_id | |||
) | [inline] |
Associate item with int_id. If item is already in the map then the map is not changed.
0 | if a new entry is bound successfully. | |
1 | if an attempt is made to bind an existing entry. | |
-1 | if a failure occurs; check errno for more information. |
Definition at line 101 of file Hash_Map_Manager_T.inl.
{ ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); return this->bind_i (ext_id, int_id); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::bind_i | ( | const EXT_ID & | ext_id, | |
const INT_ID & | int_id | |||
) | [inline, protected] |
Performs bind. Must be called with locks held.
Definition at line 92 of file Hash_Map_Manager_T.inl.
{ ACE_Hash_Map_Entry<EXT_ID, INT_ID> *temp; return this->bind_i (ext_id, int_id, temp); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::bind_i | ( | const EXT_ID & | ext_id, | |
const INT_ID & | int_id, | |||
ACE_Hash_Map_Entry< EXT_ID, INT_ID > *& | entry | |||
) | [protected] |
Performs bind. Must be called with locks held.
Definition at line 223 of file Hash_Map_Manager_T.cpp.
{ size_t loc = 0; if (this->shared_find (ext_id, entry, loc) == -1) { void *ptr = 0; // Not found. ACE_ALLOCATOR_RETURN (ptr, this->entry_allocator_->malloc (sizeof (ACE_Hash_Map_Entry<EXT_ID, INT_ID>)), -1); entry = new (ptr) ACE_Hash_Map_Entry<EXT_ID, INT_ID> (ext_id, int_id, this->table_[loc].next_, &this->table_[loc]); this->table_[loc].next_ = entry; entry->next_->prev_ = entry; ++this->cur_size_; return 0; } else return 1; }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::close | ( | void | ) | [inline] |
Close down the ACE_Hash_Map_Manager_Ex and release dynamically allocated resources.
Definition at line 38 of file Hash_Map_Manager_T.inl.
{ ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); return this->close_i (); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::close_i | ( | void | ) | [protected] |
Close down a <Map_Manager_Ex>. Must be called with locks held.
Definition at line 159 of file Hash_Map_Manager_T.cpp.
{ // Protect against "double-deletion" in case the destructor also // gets called. if (this->table_ != 0) { // Remove all the entries. this->unbind_all_i (); // Iterate through the buckets cleaning up the sentinels. for (size_t i = 0; i < this->total_size_; i++) { // Destroy the dummy entry. ACE_Hash_Map_Entry<EXT_ID, INT_ID> *entry = &this->table_[i]; // The second argument results in a no-op instead of // deallocation. ACE_DES_FREE_TEMPLATE2 (entry, ACE_NOOP, ACE_Hash_Map_Entry, EXT_ID, INT_ID); } // Reset size. this->total_size_ = 0; // Free table memory. this->table_allocator_->free (this->table_); // Should be done last... this->table_ = 0; } return 0; }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::create_buckets | ( | size_t | size | ) | [protected] |
Resize the map. Must be called with locks held.
Definition at line 105 of file Hash_Map_Manager_T.cpp.
{ size_t bytes = size * sizeof (ACE_Hash_Map_Entry<EXT_ID, INT_ID>); void *ptr = 0; ACE_ALLOCATOR_RETURN (ptr, this->table_allocator_->malloc (bytes), -1); this->table_ = (ACE_Hash_Map_Entry<EXT_ID, INT_ID> *) ptr; this->total_size_ = size; // Initialize each entry in the hash table to be a circular linked // list with the dummy node in the front serving as the anchor of // the list. for (size_t i = 0; i < size; i++) new (&this->table_[i]) ACE_Hash_Map_Entry<EXT_ID, INT_ID> (&this->table_[i], &this->table_[i]); return 0; }
size_t ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::current_size | ( | void | ) | const [inline] |
Returns the current number of ACE_Hash_Map_Entry objects in the hash table.
Definition at line 60 of file Hash_Map_Manager_T.inl.
{ return this->cur_size_; }
void ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::dump | ( | void | ) | const |
Dump the state of an object.
Definition at line 91 of file Hash_Map_Manager_T.cpp.
{ #if defined (ACE_HAS_DUMP) ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("total_size_ = %d\n"), this->total_size_)); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("cur_size_ = %d\n"), this->cur_size_)); this->table_allocator_->dump (); this->entry_allocator_->dump (); this->lock_.dump (); ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); #endif /* ACE_HAS_DUMP */ }
ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::iterator ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::end | ( | void | ) | [inline] |
Definition at line 385 of file Hash_Map_Manager_T.inl.
{ return iterator (*this, 1); }
ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::const_iterator ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::end | ( | void | ) | const [inline] |
Definition at line 399 of file Hash_Map_Manager_T.inl.
{ return const_iterator (*this, 1); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::equal | ( | const EXT_ID & | id1, | |
const EXT_ID & | id2 | |||
) | [inline, protected] |
Returns 1 if <id1> == <id2>, else 0. This is defined as a separate method to facilitate template specialization.
Reimplemented in ACE_Hash_Map_Manager< EXT_ID, INT_ID, ACE_LOCK >.
Definition at line 85 of file Hash_Map_Manager_T.inl.
{ return this->compare_keys_ (id1, id2); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::find | ( | const EXT_ID & | ext_id, | |
ACE_Hash_Map_Entry< EXT_ID, INT_ID > *& | entry | |||
) | const [inline] |
Locate ext_id and pass out parameter via entry. If found, return 0, returns -1 if not found.
Definition at line 262 of file Hash_Map_Manager_T.inl.
{ ACE_Hash_Map_Manager_Ex<EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK> *nc_this = const_cast <ACE_Hash_Map_Manager_Ex<EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK> *> (this); ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); return nc_this->find_i (ext_id, entry); }
void ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::find | ( | EXT_ID const & | ext_id, | |
iterator & | pos | |||
) | const |
Locate ext_id and pass out an iterator that points to its corresponding value.
pos | pos will be set to end() if not found. |
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::find | ( | const EXT_ID & | ext_id, | |
INT_ID & | int_id | |||
) | const [inline] |
Locate ext_id and pass out parameter via int_id. Return 0 if found, returns -1 if not found.
Definition at line 229 of file Hash_Map_Manager_T.inl.
{ ACE_Hash_Map_Manager_Ex<EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK> *nc_this = const_cast <ACE_Hash_Map_Manager_Ex<EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK> *> (this); ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); return nc_this->find_i (ext_id, int_id); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::find | ( | const EXT_ID & | ext_id | ) | const [inline] |
Returns 0 if the ext_id is in the mapping, otherwise -1.
Definition at line 242 of file Hash_Map_Manager_T.inl.
{ ACE_Hash_Map_Manager_Ex<EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK> *nc_this = const_cast <ACE_Hash_Map_Manager_Ex<EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK> *> (this); ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); return nc_this->find_i (ext_id); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::find_i | ( | const EXT_ID & | ext_id, | |
INT_ID & | int_id | |||
) | [inline, protected] |
Performs a find of int_id using ext_id as the key. Must be called with locks held.
Definition at line 204 of file Hash_Map_Manager_T.inl.
{ ACE_Hash_Map_Entry<EXT_ID, INT_ID> *entry; size_t dummy; if (this->shared_find (ext_id, entry, dummy) == -1) return -1; else { int_id = entry->int_id_; return 0; } }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::find_i | ( | const EXT_ID & | ext_id | ) | [inline, protected] |
Performs a find using ext_id as the key. Must be called with locks held.
Definition at line 220 of file Hash_Map_Manager_T.inl.
{ ACE_Hash_Map_Entry<EXT_ID, INT_ID> *entry; size_t dummy; return this->shared_find (ext_id, entry, dummy); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::find_i | ( | const EXT_ID & | ext_id, | |
ACE_Hash_Map_Entry< EXT_ID, INT_ID > *& | entry | |||
) | [inline, protected] |
Performs a find using ext_id as the key. Must be called with locks held.
Definition at line 254 of file Hash_Map_Manager_T.inl.
{ size_t dummy; return this->shared_find (ext_id, entry, dummy); }
u_long ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::hash | ( | const EXT_ID & | ext_id | ) | [inline, protected] |
Compute the hash value of the ext_id. This is defined as a separate method to facilitate template specialization.
Reimplemented in ACE_Hash_Map_Manager< EXT_ID, INT_ID, ACE_LOCK >.
Definition at line 79 of file Hash_Map_Manager_T.inl.
{ return this->hash_key_ (ext_id); }
ACE_LOCK & ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::mutex | ( | void | ) | [inline] |
Returns a reference to the underlying <ACE_LOCK>. This makes it possible to acquire the lock explicitly, which can be useful in some cases if you instantiate the ACE_Atomic_Op with an ACE_Recursive_Mutex or ACE_Process_Mutex, or if you need to guard the state of an iterator.
Definition at line 72 of file Hash_Map_Manager_T.inl.
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::open | ( | size_t | size = ACE_DEFAULT_MAP_SIZE , |
|
ACE_Allocator * | table_alloc = 0 , |
|||
ACE_Allocator * | entry_alloc = 0 | |||
) |
Initialize an ACE_Hash_Map_Manager_Ex with size elements.
table_alloc | is a pointer to a memory allocator used for table_, so it should supply size*sizeof (ACE_Hash_Map_Entry<EXT_ID, INT_ID>). If table_alloc is 0 it defaults to ACE_Allocator::instance(). | |
entry_alloc | is a pointer to an additional allocator for entries, so it should be able to allocate 'size' / chunks of sizeof(ACE_Hash_Map_Entry<EXT_ID, INT_ID>) bytes each. If entry_alloc is 0 then it defaults to the same allocator as table_alloc. |
Definition at line 128 of file Hash_Map_Manager_T.cpp.
{ ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); // Calling this->close_i () to ensure we release previous allocated // memory before allocating new one. this->close_i (); if (table_alloc == 0) table_alloc = ACE_Allocator::instance (); this->table_allocator_ = table_alloc; if (entry_alloc == 0) entry_alloc = table_alloc; this->entry_allocator_ = entry_alloc; // This assertion is here to help track a situation that shouldn't // happen, but did with Sun C++ 4.1 (before a change to this class // was made: it used to have an enum that was supposed to be defined // to be ACE_DEFAULT_MAP_SIZE, but instead was defined to be 0). if (size == 0) return -1; return this->create_buckets (size); }
void ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::operator= | ( | const ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > & | ) | [private] |
ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::const_reverse_iterator ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::rbegin | ( | void | ) | const [inline] |
Definition at line 420 of file Hash_Map_Manager_T.inl.
{ return const_reverse_iterator (*this); }
ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::reverse_iterator ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::rbegin | ( | void | ) | [inline] |
Return reverse iterator.
Definition at line 406 of file Hash_Map_Manager_T.inl.
{ return reverse_iterator (*this); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::rebind | ( | const EXT_ID & | ext_id, | |
const INT_ID & | int_id | |||
) | [inline] |
Reassociate ext_id with int_id. If ext_id is not in the map then behaves just like <bind>. Returns 0 if a new entry is bound successfully, returns 1 if an existing entry was rebound, and returns -1 if failures occur.
Definition at line 314 of file Hash_Map_Manager_T.inl.
{ ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); return this->rebind_i (ext_id, int_id); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::rebind | ( | const EXT_ID & | ext_id, | |
const INT_ID & | int_id, | |||
ACE_Hash_Map_Entry< EXT_ID, INT_ID > *& | entry | |||
) | [inline] |
Same as a normal rebind, except the map entry is also passed back to the caller. The entry in this case will either be the newly created entry, or the existing one.
Definition at line 323 of file Hash_Map_Manager_T.inl.
{ ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); return this->rebind_i (ext_id, int_id, entry); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::rebind | ( | const EXT_ID & | ext_id, | |
const INT_ID & | int_id, | |||
INT_ID & | old_int_id | |||
) | [inline] |
Associate ext_id with int_id. If ext_id is not in the map then behaves just like <bind>. Otherwise, store the old value of int_id into the "out" parameter and rebind the new parameters. Returns 0 if a new entry is bound successfully, returns 1 if an existing entry was rebound, and returns -1 if failures occur.
Definition at line 333 of file Hash_Map_Manager_T.inl.
{ ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); return this->rebind_i (ext_id, int_id, old_int_id); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::rebind | ( | const EXT_ID & | ext_id, | |
const INT_ID & | int_id, | |||
INT_ID & | old_int_id, | |||
ACE_Hash_Map_Entry< EXT_ID, INT_ID > *& | entry | |||
) | [inline] |
Same as a normal rebind, except the map entry is also passed back to the caller. The entry in this case will either be the newly created entry, or the existing one.
Definition at line 343 of file Hash_Map_Manager_T.inl.
{ ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); return this->rebind_i (ext_id, int_id, old_int_id, entry); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::rebind | ( | const EXT_ID & | ext_id, | |
const INT_ID & | int_id, | |||
EXT_ID & | old_ext_id, | |||
INT_ID & | old_int_id, | |||
ACE_Hash_Map_Entry< EXT_ID, INT_ID > *& | entry | |||
) | [inline] |
Same as a normal rebind, except the map entry is also passed back to the caller. The entry in this case will either be the newly created entry, or the existing one.
Definition at line 365 of file Hash_Map_Manager_T.inl.
{ ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); return this->rebind_i (ext_id, int_id, old_ext_id, old_int_id, entry); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::rebind | ( | const EXT_ID & | ext_id, | |
const INT_ID & | int_id, | |||
EXT_ID & | old_ext_id, | |||
INT_ID & | old_int_id | |||
) | [inline] |
Associate ext_id with int_id. If ext_id is not in the map then behaves just like <bind>. Otherwise, store the old values of ext_id and int_id into the "out" parameters and rebind the new parameters. This is very useful if you need to have an atomic way of updating ACE_Hash_Map_Entrys and you also need full control over memory allocation. Returns 0 if a new entry is bound successfully, returns 1 if an existing entry was rebound, and returns -1 if failures occur.
Definition at line 354 of file Hash_Map_Manager_T.inl.
{ ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); return this->rebind_i (ext_id, int_id, old_ext_id, old_int_id); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::rebind_i | ( | const EXT_ID & | ext_id, | |
const INT_ID & | int_id, | |||
EXT_ID & | old_ext_id, | |||
INT_ID & | old_int_id | |||
) | [inline, protected] |
Performs rebind. Must be called with locks held.
Definition at line 299 of file Hash_Map_Manager_T.inl.
{ ACE_Hash_Map_Entry<EXT_ID, INT_ID> *node; return this->rebind_i (ext_id, int_id, old_ext_id, old_int_id, node); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::rebind_i | ( | const EXT_ID & | ext_id, | |
const INT_ID & | int_id, | |||
EXT_ID & | old_ext_id, | |||
INT_ID & | old_int_id, | |||
ACE_Hash_Map_Entry< EXT_ID, INT_ID > *& | entry | |||
) | [protected] |
Performs rebind. Must be called with locks held.
Definition at line 373 of file Hash_Map_Manager_T.cpp.
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::rebind_i | ( | const EXT_ID & | ext_id, | |
const INT_ID & | int_id | |||
) | [inline, protected] |
Performs rebind. Must be called with locks held.
Definition at line 275 of file Hash_Map_Manager_T.inl.
{ ACE_Hash_Map_Entry<EXT_ID, INT_ID> *node; return this->rebind_i (ext_id, int_id, node); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::rebind_i | ( | const EXT_ID & | ext_id, | |
const INT_ID & | int_id, | |||
INT_ID & | old_int_id | |||
) | [inline, protected] |
Performs rebind. Must be called with locks held.
Definition at line 286 of file Hash_Map_Manager_T.inl.
{ ACE_Hash_Map_Entry<EXT_ID, INT_ID> *node; return this->rebind_i (ext_id, int_id, old_int_id, node); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::rebind_i | ( | const EXT_ID & | ext_id, | |
const INT_ID & | int_id, | |||
INT_ID & | old_int_id, | |||
ACE_Hash_Map_Entry< EXT_ID, INT_ID > *& | entry | |||
) | [protected] |
Performs rebind. Must be called with locks held.
Definition at line 355 of file Hash_Map_Manager_T.cpp.
{ size_t dummy = 0; if (this->shared_find (ext_id, entry, dummy) == -1) return this->bind_i (ext_id, int_id); else { old_int_id = entry->int_id_; entry->ext_id_ = ext_id; entry->int_id_ = int_id; return 1; } }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::rebind_i | ( | const EXT_ID & | ext_id, | |
const INT_ID & | int_id, | |||
ACE_Hash_Map_Entry< EXT_ID, INT_ID > *& | entry | |||
) | [protected] |
Performs rebind. Must be called with locks held.
Definition at line 339 of file Hash_Map_Manager_T.cpp.
{ size_t dummy = 0; if (this->shared_find (ext_id, entry, dummy) == -1) return this->bind_i (ext_id, int_id); else { entry->ext_id_ = ext_id; entry->int_id_ = int_id; return 1; } }
ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::const_reverse_iterator ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::rend | ( | void | ) | const [inline] |
Definition at line 427 of file Hash_Map_Manager_T.inl.
{ return const_reverse_iterator (*this, 1); }
ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::reverse_iterator ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::rend | ( | void | ) | [inline] |
Definition at line 413 of file Hash_Map_Manager_T.inl.
{ return reverse_iterator (*this, 1); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::shared_find | ( | const EXT_ID & | ext_id, | |
ACE_Hash_Map_Entry< EXT_ID, INT_ID > *& | entry, | |||
size_t & | loc | |||
) | [protected] |
Returns the ACE_Hash_Map_Entry that corresponds to ext_id.
Definition at line 309 of file Hash_Map_Manager_T.cpp.
{ if (this->total_size_ == 0) { errno = ENOENT; return -1; } loc = this->hash (ext_id) % this->total_size_; ACE_Hash_Map_Entry<EXT_ID, INT_ID> *temp = this->table_[loc].next_; while (temp != &this->table_[loc] && this->equal (temp->ext_id_, ext_id) == 0) temp = temp->next_; if (temp == &this->table_[loc]) { errno = ENOENT; return -1; } else { entry = temp; return 0; } }
ACE_Hash_Map_Entry< EXT_ID, INT_ID > * ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::table | ( | void | ) | [inline, protected] |
Accessor of the underlying table.
Definition at line 434 of file Hash_Map_Manager_T.inl.
{ return this->table_; }
size_t ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::total_size | ( | void | ) | const [inline] |
Return the size of the array that's used to point to the linked lists of ACE_Hash_Map_Entry objects in the hash table.
Definition at line 66 of file Hash_Map_Manager_T.inl.
{ return this->total_size_; }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::trybind | ( | const EXT_ID & | ext_id, | |
INT_ID & | int_id | |||
) | [inline] |
Associate ext_id with int_id if and only if ext_id is not in the map. If ext_id is already in the map then the int_id parameter is assigned the existing value in the map. Returns 0 if a new entry is bound successfully, returns 1 if an attempt is made to bind an existing entry, and returns -1 if failures occur.
Definition at line 132 of file Hash_Map_Manager_T.inl.
{ ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); return this->trybind_i (ext_id, int_id); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::trybind | ( | const EXT_ID & | ext_id, | |
INT_ID & | int_id, | |||
ACE_Hash_Map_Entry< EXT_ID, INT_ID > *& | entry | |||
) | [inline] |
Same as a normal trybind, except the map entry is also passed back to the caller. The entry in this case will either be the newly created entry, or the existing one.
Definition at line 141 of file Hash_Map_Manager_T.inl.
{ ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); return this->trybind_i (ext_id, int_id, entry); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::trybind_i | ( | const EXT_ID & | ext_id, | |
INT_ID & | int_id | |||
) | [inline, protected] |
Performs trybind. Must be called with locks held.
Definition at line 120 of file Hash_Map_Manager_T.inl.
{ ACE_Hash_Map_Entry<EXT_ID, INT_ID> *temp; int result = this->trybind_i (ext_id, int_id, temp); if (result == 1) int_id = temp->int_id_; return result; }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::trybind_i | ( | const EXT_ID & | ext_id, | |
INT_ID & | int_id, | |||
ACE_Hash_Map_Entry< EXT_ID, INT_ID > *& | entry | |||
) | [protected] |
Performs trybind. Must be called with locks held.
Definition at line 250 of file Hash_Map_Manager_T.cpp.
{ size_t loc = 0; if (this->shared_find (ext_id, entry, loc) == -1) { // Not found. void *ptr = 0; ACE_ALLOCATOR_RETURN (ptr, this->entry_allocator_->malloc (sizeof (ACE_Hash_Map_Entry<EXT_ID, INT_ID>)), -1); entry = new (ptr) ACE_Hash_Map_Entry<EXT_ID, INT_ID> (ext_id, int_id, this->table_[loc].next_, &this->table_[loc]); this->table_[loc].next_ = entry; entry->next_->prev_ = entry; ++this->cur_size_; return 0; } else return 1; }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::unbind | ( | iterator | pos | ) |
Remove entry from map pointed to by iterator
pos.
This unbind operation is fast relative to those that accept an external ID parameter since no map lookup is performed.
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::unbind | ( | ACE_Hash_Map_Entry< EXT_ID, INT_ID > * | entry | ) | [inline] |
Remove entry from map.
This unbind operation is fast relative to those that accept an external ID parameter since no map lookup is performed.
Definition at line 196 of file Hash_Map_Manager_T.inl.
{ ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); return this->unbind_i (entry) == -1 ? -1 : 0; }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::unbind | ( | const EXT_ID & | ext_id | ) | [inline] |
Unbind (remove) the ext_id from the map. Don't return the int_id to the caller (this is useful for collections where the int_ids are *not* dynamically allocated...)
Definition at line 188 of file Hash_Map_Manager_T.inl.
{ ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); return this->unbind_i (ext_id) == -1 ? -1 : 0; }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::unbind | ( | const EXT_ID & | ext_id, | |
INT_ID & | int_id | |||
) | [inline] |
Break any association of ext_id. Returns the value of int_id in case the caller needs to deallocate memory. Return 0 if the unbind was successful, and returns -1 if failures occur.
Definition at line 159 of file Hash_Map_Manager_T.inl.
{ ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); return this->unbind_i (ext_id, int_id); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::unbind_all | ( | void | ) | [inline] |
Removes all the entries in the ACE_Hash_Map_Manager_Ex.
Definition at line 46 of file Hash_Map_Manager_T.inl.
{ ACE_WRITE_GUARD_RETURN (ACE_LOCK, ace_mon, this->lock_, -1); return this->unbind_all_i (); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::unbind_all_i | ( | void | ) | [protected] |
Removes all the entries in <Map_Manager_Ex>. Must be called with locks held.
Definition at line 194 of file Hash_Map_Manager_T.cpp.
{ // Iterate through the entire map calling the destuctor of each // <ACE_Hash_Map_Entry>. for (size_t i = 0; i < this->total_size_; i++) { for (ACE_Hash_Map_Entry<EXT_ID, INT_ID> *temp_ptr = this->table_[i].next_; temp_ptr != &this->table_[i]; ) { ACE_Hash_Map_Entry<EXT_ID, INT_ID> *hold_ptr = temp_ptr; temp_ptr = temp_ptr->next_; // Explicitly call the destructor. ACE_DES_FREE_TEMPLATE2 (hold_ptr, this->entry_allocator_->free, ACE_Hash_Map_Entry, EXT_ID, INT_ID); } // Restore the sentinel. this->table_[i].next_ = &this->table_[i]; this->table_[i].prev_ = &this->table_[i]; } this->cur_size_ = 0; return 0; }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::unbind_i | ( | const EXT_ID & | ext_id | ) | [inline, protected] |
Performs unbind. Must be called with locks held.
Definition at line 151 of file Hash_Map_Manager_T.inl.
{ INT_ID int_id; return this->unbind_i (ext_id, int_id); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::unbind_i | ( | const EXT_ID & | ext_id, | |
INT_ID & | int_id | |||
) | [protected] |
Performs unbind. Must be called with locks held.
Definition at line 277 of file Hash_Map_Manager_T.cpp.
{ ACE_Hash_Map_Entry<EXT_ID, INT_ID> *temp; size_t loc = 0; if (this->shared_find (ext_id, temp, loc) == -1) { errno = ENOENT; return -1; } int_id = temp->int_id_; return this->unbind_i (temp); }
int ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::unbind_i | ( | ACE_Hash_Map_Entry< EXT_ID, INT_ID > * | entry | ) | [protected] |
Performs unbind. Must be called with locks held.
Definition at line 295 of file Hash_Map_Manager_T.cpp.
{ entry->next_->prev_ = entry->prev_; entry->prev_->next_ = entry->next_; // Explicitly call the destructor. ACE_DES_FREE_TEMPLATE2 (entry, this->entry_allocator_->free, ACE_Hash_Map_Entry, EXT_ID, INT_ID); --this->cur_size_; return 0; }
friend class ACE_Hash_Map_Bucket_Iterator< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > [friend] |
Definition at line 138 of file Hash_Map_Manager_T.h.
friend class ACE_Hash_Map_Const_Iterator_Base_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > [friend] |
Definition at line 134 of file Hash_Map_Manager_T.h.
friend class ACE_Hash_Map_Const_Iterator_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > [friend] |
Definition at line 135 of file Hash_Map_Manager_T.h.
friend class ACE_Hash_Map_Const_Reverse_Iterator_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > [friend] |
Definition at line 137 of file Hash_Map_Manager_T.h.
friend class ACE_Hash_Map_Iterator_Base_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > [friend] |
Definition at line 132 of file Hash_Map_Manager_T.h.
friend class ACE_Hash_Map_Iterator_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > [friend] |
Definition at line 133 of file Hash_Map_Manager_T.h.
friend class ACE_Hash_Map_Reverse_Iterator_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK > [friend] |
Definition at line 136 of file Hash_Map_Manager_T.h.
COMPARE_KEYS ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::compare_keys_ [protected] |
Function object used for comparing keys.
Definition at line 551 of file Hash_Map_Manager_T.h.
size_t ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::cur_size_ [private] |
Current number of entries in the table
Definition at line 576 of file Hash_Map_Manager_T.h.
ACE_Allocator* ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::entry_allocator_ [protected] |
Addidtional allocator for entries, so it should be able to allocate 'size' / chunks of sizeof(ACE_Hash_Map_Entry<EXT_ID, INT_ID>) bytes each.
Definition at line 541 of file Hash_Map_Manager_T.h.
HASH_KEY ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::hash_key_ [protected] |
Function object used for hashing keys.
Definition at line 548 of file Hash_Map_Manager_T.h.
ACE_LOCK ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::lock_ [mutable, protected] |
Synchronization variable for the MT_SAFE ACE_Hash_Map_Manager_Ex
.
Definition at line 545 of file Hash_Map_Manager_T.h.
ACE_Hash_Map_Entry<EXT_ID, INT_ID>* ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::table_ [private] |
Array of ACE_Hash_Map_Entry *s, each of which points to an ACE_Hash_Map_Entry that serves as the beginning of a linked list of <EXT_ID>s that hash to that bucket.
Definition at line 568 of file Hash_Map_Manager_T.h.
ACE_Allocator* ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::table_allocator_ [protected] |
Pointer to a memory allocator used for table_, so it should supply size*sizeof (ACE_Hash_Map_Entry<EXT_ID, INT_ID>),
Definition at line 536 of file Hash_Map_Manager_T.h.
size_t ACE_Hash_Map_Manager_Ex< EXT_ID, INT_ID, HASH_KEY, COMPARE_KEYS, ACE_LOCK >::total_size_ [private] |
Total size of the hash table.
Definition at line 571 of file Hash_Map_Manager_T.h.