NAME

ACE_Hash_Map_Manager - Define a map abstraction that associates EXT_IDs with INT_IDs.

SYNOPSIS

#include <ace/Hash_Map_Manager.h>

template<class EXT_ID, class INT_ID, class ACE_LOCK> class ACE_Hash_Map_Manager { public: friend class ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>; friend class ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>; friend class ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>; typedef EXT_ID KEY; typedef INT_ID VALUE; typedef ACE_Hash_Map_Entry<EXT_ID, INT_ID> ENTRY; typedef ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> ITERATOR; typedef ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> REVERSE_ITERATOR; typedef ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> iterator; typedef ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> reverse_iterator; ACE_Hash_Map_Manager (size_t size, ACE_Allocator *alloc = 0); ACE_Hash_Map_Manager (ACE_Allocator *alloc = 0); int open ( size_t length = ACE_DEFAULT_MAP_SIZE, ACE_Allocator *alloc = 0 ); int close (void); ~ACE_Hash_Map_Manager (void); 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, 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); int find (const EXT_ID &ext_id); int find ( const EXT_ID &ext_id, ACE_Hash_Map_Entry<EXT_ID, INT_ID> *&entry ); 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); size_t current_size (void); size_t total_size (void); void dump (void) const; ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> begin (void); ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> end (void); ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> rbegin ( void ); ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> rend ( void ); protected: 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); int bind_i ( const EXT_ID &ext_id, const INT_ID &int_id, ACE_Hash_Map_Entry<EXT_ID, INT_ID> *&entry ); int trybind_i (const EXT_ID &ext_id, INT_ID &int_id); int trybind_i ( const EXT_ID &ext_id, INT_ID &int_id, ACE_Hash_Map_Entry<EXT_ID, INT_ID> *&entry ); int rebind_i ( const EXT_ID &ext_id, const INT_ID &int_id, EXT_ID &old_ext_id, INT_ID &old_int_id ); 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 ); 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); int unbind_i (const EXT_ID &ext_id); int unbind_i (ACE_Hash_Map_Entry<EXT_ID, INT_ID> *entry); int create_buckets (size_t size); int close_i (void); ACE_Allocator *allocator_; ACE_LOCK lock_; private: int shared_find ( const EXT_ID &ext_id, ACE_Hash_Map_Entry<EXT_ID, INT_ID> *&entry, u_long &loc ); ACE_Hash_Map_Entry<EXT_ID, INT_ID> *table_; size_t total_size_; size_t cur_size_; };

DESCRIPTION

This implementation of a map uses a hash table. Therefore, this class expects that the EXT_ID contains a method called hash. In addition, the EXT_ID must support operator== (both of these constraints can be alleviated via template specialization). This class uses an ACE_Allocator to allocate memory The user can make this a persistant class by providing an ACE_Allocator with a persistable memory pool

Initialization and termination methods.

ACE_Hash_Map_Manager (size_t size, ACE_Allocator *alloc = 0);

ACE_Hash_Map_Manager (ACE_Allocator *alloc = 0);

int open (
    size_t length = ACE_DEFAULT_MAP_SIZE,
    ACE_Allocator *alloc = 0
    );

int close (void);

~ACE_Hash_Map_Manager (void);

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,
    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);

int find (const EXT_ID &ext_id);

int find (
    const EXT_ID &ext_id,
    ACE_Hash_Map_Entry<EXT_ID, INT_ID> *&entry
    );

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);

size_t current_size (void);

size_t total_size (void);

void dump (void) const;

STL styled iterator factory functions.

ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> begin (void);

ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> end (void);

ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> rbegin (void);

ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> rend (void);

The following methods do the actual work.

int equal (const EXT_ID &id1, const EXT_ID &id2);

u_long hash (const EXT_ID &ext_id);

These methods assume locks are held by private methods.

int bind_i (const EXT_ID &ext_id, const INT_ID &int_id);

int bind_i (
    const EXT_ID &ext_id,
    const INT_ID &int_id,
    ACE_Hash_Map_Entry<EXT_ID, INT_ID> *&entry
    );

int trybind_i (const EXT_ID &ext_id, INT_ID &int_id);

int trybind_i (
    const EXT_ID &ext_id,
    INT_ID &int_id,
    ACE_Hash_Map_Entry<EXT_ID, INT_ID> *&entry
    );

int rebind_i (
    const EXT_ID &ext_id,
    const INT_ID &int_id,
    EXT_ID &old_ext_id,
    INT_ID &old_int_id
    );

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
    );

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);

int unbind_i (const EXT_ID &ext_id);

int unbind_i (ACE_Hash_Map_Entry<EXT_ID, INT_ID> *entry);

int create_buckets (size_t size);

int close_i (void);

ACE_Allocator *allocator_;

ACE_LOCK lock_;

AUTHOR

Doug Schmidt

LIBRARY

ace