#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_;
};
ACE_Map_Manager (ACE_Allocator *allocator = 0);
Map_Manager
with the DEFAULT_SIZE
.
ACE_Map_Manager (size_t size, ACE_Allocator *allocator = 0);
Map_Manager
with size
entries.
int open (size_t length = DEFAULT_SIZE, ACE_Allocator *allocator = 0);
Map_Manager
with size length
.
int close (void);
Map_Manager
and release dynamically allocated
resources.
~ACE_Map_Manager (void);
Map_Manager
and release dynamically allocated
resources.
int trybind (const EXT_ID &ext_id, INT_ID &int_id);
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 overwritten with 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.
int bind (const EXT_ID &ext_id, const INT_ID &int_id);
ext_id
with int_id
. If ext_id
is already in the
map then the Map_Entry
is not changed. 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.
int rebind (
const EXT_ID &ext_id,
const INT_ID &int_id,
EXT_ID &old_ext_id,
INT_ID &old_int_id
);
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 Map_Entries
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.
int find (const EXT_ID &ext_id, INT_ID &int_id);
ext_id
and pass out parameter via int_id
. If found,
return 0, returns -1 if failure occurs.
int find (const EXT_ID &ext_id);
ext_id
is in the mapping, otherwise -1.
int unbind (const EXT_ID &ext_id, INT_ID &int_id);
ext_id
. Returns the value of int_id
in
case the caller needs to deallocate memory.
int unbind (const EXT_ID &ext_id);
ext_id
from the map. Don't return the int_id
to the caller (this is useful for collections where the int_id
s
are *not* dynamically allocated...)
int current_size (void);
int total_size (void);
void dump (void) const;
ACE_ALLOC_HOOK_DECLARE;
int bind_i (const EXT_ID &ext_id, const INT_ID &int_id);
ext_id
to int_id
. 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
);
ext_it
to int_id
. Must be called
with locks held.
int find_i (const EXT_ID &ext_id, INT_ID &int_id);
int_id
using ext_id
as the key. Must be
called with locks held.
int find_i (const EXT_ID &ext_id);
ext_id
as the key. Must be called with
locks held.
int unbind_i (const EXT_ID &ext_id, INT_ID &int_id);
int_id
using ext_id
as the key. Must
be called with locks held.
int unbind_i (const EXT_ID &ext_id);
ext_id
as the key. Must be called
with locks held.
int trybind_i (const EXT_ID &ext_id, INT_ID &int_id);
int_id
using ext_id
as the
key. Must be called with locks held.
int resize_i (size_t size);
int close_i (void);
Map_Manager
. Must be called with
locks held.
ACE_Allocator *allocator_;
LOCK lock_;