NAME

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

SYNOPSIS

#include <ace/Map_Manager.h>

template<class EXT_ID, class INT_ID, class ACE_LOCK> class ACE_Map_Manager { public: friend class ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>; friend class ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>; friend class ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>; typedef EXT_ID KEY; typedef INT_ID VALUE; typedef ACE_Map_Entry<EXT_ID, INT_ID> ENTRY; typedef ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> ITERATOR; typedef ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> REVERSE_ITERATOR; typedef ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> iterator; typedef ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> reverse_iterator; ACE_Map_Manager (ACE_Allocator *alloc = 0); ACE_Map_Manager (size_t size, ACE_Allocator *alloc = 0); int open ( size_t length = ACE_DEFAULT_MAP_SIZE, ACE_Allocator *alloc = 0 ); int close (void); ~ACE_Map_Manager (void); int trybind (const EXT_ID &ext_id, INT_ID &int_id); int bind (const EXT_ID &ext_id, const INT_ID &int_id); int rebind ( const EXT_ID &ext_id, const INT_ID &int_id, EXT_ID &old_ext_id, INT_ID &old_int_id ); int find (const EXT_ID &ext_id, INT_ID &int_id); int find (const EXT_ID &ext_id); int unbind (const EXT_ID &ext_id); int unbind (const EXT_ID &ext_id, INT_ID &int_id); size_t current_size (void); size_t total_size (void); void dump (void) const; ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> begin (void); ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> end (void); ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> rbegin (void); ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> rend (void); ACE_ALLOC_HOOK_DECLARE; protected: void free_search_structure (void); ACE_Map_Entry<EXT_ID, INT_ID> *search_structure_; int bind_i (const EXT_ID &ext_id, const INT_ID &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 ); int find_i (const EXT_ID &ext_id, INT_ID &int_id); int find_i (const EXT_ID &ext_id); int unbind_i (const EXT_ID &ext_id, INT_ID &int_id); int unbind_i (const EXT_ID &ext_id); int trybind_i (const EXT_ID &ext_id, INT_ID &int_id); int resize_i (size_t size); int close_i (void); ACE_Allocator *allocator_; ACE_LOCK lock_; int equal (const EXT_ID &id1, const EXT_ID &id2); private: int shared_find (const EXT_ID &ext_id, int &first_free); int shared_find (const EXT_ID &ext_id); int shared_bind ( const EXT_ID &ext_id, const INT_ID &int_id, int first_free ); int shared_unbind (const EXT_ID &ext_id); size_t total_size_; size_t cur_size_; inline ACE_UNIMPLEMENTED_FUNC ( void operator= (const ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &) ); };

DESCRIPTION

The EXT_ID must support operator== (this constraint can be alleviated via template specialization). The ACE_Map_Manager 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.

This implementation of a map uses an array, which is searched linearly. For more efficient searching you should use the ACE_Hash_Map_Manager.

Traits.

typedef EXT_ID KEY;

typedef INT_ID VALUE;

typedef ACE_Map_Entry<EXT_ID, INT_ID> ENTRY;

typedef ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> ITERATOR;

    typedef ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> REVERSE_ITERATOR;
    

typedef ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> iterator;

    typedef ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> reverse_iterator;
    

Initialization and termination methods.

ACE_Map_Manager (ACE_Allocator *alloc = 0);

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

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

int close (void);

~ACE_Map_Manager (void);

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

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

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

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

int find (const EXT_ID &ext_id);

int unbind (const EXT_ID &ext_id);

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

size_t current_size (void);

size_t total_size (void);

void dump (void) const;

STL styled iterator factory functions.

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

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

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

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

ACE_ALLOC_HOOK_DECLARE;

The following methods do the actual work.

These methods assume that the locks are held by the private methods.
int bind_i (const EXT_ID &ext_id, const INT_ID &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
    );

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

int find_i (const EXT_ID &ext_id);

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

int unbind_i (const EXT_ID &ext_id);

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

int resize_i (size_t size);

int close_i (void);

ACE_Allocator *allocator_;

ACE_LOCK lock_;

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

Disallow these operations.

inline ACE_UNIMPLEMENTED_FUNC (
    void operator= (const ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &)
    );

AUTHOR

Doug Schmidt

LIBRARY

ace