NAME

ACE_Map_Manager - Define a map abstraction (useful for managing connections and sessions).

SYNOPSIS


#include <ace/Map_Manager.h>


template<class EXT_ID, class INT_ID, class LOCK>
class ACE_Map_Manager
{
  public:
    friend class ACE_Map_Iterator<EXT_ID, INT_ID, LOCK>;
    enum {DEFAULT_SIZE = ACE_DEFAULT_MAP_SIZE};
    ACE_Map_Manager (ACE_Allocator *allocator = 0);
    ACE_Map_Manager (size_t size, ACE_Allocator *allocator = 0);
    int open (
        size_t length = DEFAULT_SIZE,
        ACE_Allocator *allocator = 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_ID &int_id);
    int unbind (const EXT_ID &ext_id);
    int current_size (void);
    int total_size (void);
    void dump (void) const;
    ACE_ALLOC_HOOK_DECLARE;
  protected:
    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_;
    LOCK lock_;
  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 max_size_;
    size_t cur_size_;
};

DESCRIPTION

This implementation of a map uses an array. It should be enhanced to use a hash table... 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_Map_Manager (ACE_Allocator *allocator = 0);
ACE_Map_Manager (size_t size, ACE_Allocator *allocator = 0);
int open (size_t length = DEFAULT_SIZE, ACE_Allocator *allocator = 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_ID &int_id);
int unbind (const EXT_ID &ext_id);
int current_size (void);
int total_size (void);
void dump (void) const;
ACE_ALLOC_HOOK_DECLARE;

The following methods do the actual work and 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_;
LOCK lock_;

AUTHOR

Doug Schmidt

LIBRARY

ace