This commit is contained in:
@ -92,8 +92,8 @@ extern "C" {
|
||||
|
||||
ase_dll_t* ase_dll_open (
|
||||
ase_mmgr_t* mmgr /* memory manager */ ,
|
||||
ase_size_t extension /* size of extension area in bytes */,
|
||||
void (*initializer) (ase_dll_t*) /* extension initializer */
|
||||
ase_size_t ext /* size of extension area in bytes */,
|
||||
void (*init) (ase_dll_t*) /* extension initializer */
|
||||
);
|
||||
|
||||
/*
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: map.h 344 2008-08-22 15:23:09Z baconevi $
|
||||
* $Id: map.h 345 2008-08-26 08:50:12Z baconevi $
|
||||
*
|
||||
* {License}
|
||||
*/
|
||||
@ -43,11 +43,11 @@ typedef int (*ase_map_comper_t) (
|
||||
ase_size_t klen2 /* the length of a key in bytes */
|
||||
);
|
||||
|
||||
/* pair visitor */
|
||||
/* pair visitor - should return ASE_MAP_WALK_STOP or ASE_MAP_WALK_FORWARD */
|
||||
typedef int (*ase_map_walker_t) (
|
||||
ase_map_t* map,
|
||||
ase_map_pair_t* pair,
|
||||
void* arg
|
||||
ase_map_t* map /* a map */,
|
||||
ase_map_pair_t* pair /* the pointer to a key/value pair */,
|
||||
void* arg /* the pointer to user-defined data */
|
||||
);
|
||||
|
||||
struct ase_map_pair_t
|
||||
@ -62,7 +62,7 @@ struct ase_map_pair_t
|
||||
ase_map_pair_t* next;
|
||||
};
|
||||
|
||||
enum ase_map_id_t
|
||||
enum ase_map_id_t
|
||||
{
|
||||
ASE_MAP_KEY = 0,
|
||||
ASE_MAP_VAL = 1
|
||||
@ -85,12 +85,16 @@ struct ase_map_t
|
||||
|
||||
ase_map_pair_t** buck;
|
||||
|
||||
/*
|
||||
void (*freeval) (void* owner,void* val);
|
||||
*/
|
||||
void (*sameval) (void* owner, void* vptr, ase_size_t vlen);
|
||||
};
|
||||
|
||||
/* values that can be returned by ase_map_walker_t */
|
||||
enum ase_map_walk_t
|
||||
{
|
||||
ASE_MAP_WALK_STOP = 0,
|
||||
ASE_MAP_WALK_FORWARD = 1
|
||||
};
|
||||
|
||||
#define ASE_MAP_COPIER_INLINE ase_map_copyinline
|
||||
|
||||
#define ASE_MAP_KPTR(p) ((p)->kptr)
|
||||
@ -104,14 +108,12 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Creates a hashed map with a dynamic array bucket and a list of values linked
|
||||
* NAME: create a map
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* The ase_map_open() function creates a hashed map with a dynamic array
|
||||
* bucket and a list of values linked.
|
||||
*/
|
||||
/*
|
||||
ase_map_t* ase_map_open (
|
||||
void* owner, ase_size_t capa, unsigned int factor,
|
||||
void(*freeval)(void*,void*), void(*sameval)(void*,void*),
|
||||
ase_mmgr_t* mmgr);
|
||||
*/
|
||||
ase_map_t* ase_map_open (
|
||||
ase_mmgr_t* mmgr,
|
||||
ase_size_t ext,
|
||||
@ -119,30 +121,109 @@ ase_map_t* ase_map_open (
|
||||
);
|
||||
|
||||
/* destroy a map */
|
||||
void ase_map_close (ase_map_t* map);
|
||||
void ase_map_close (
|
||||
ase_map_t* map /* a map */
|
||||
);
|
||||
|
||||
/* clear a map */
|
||||
void ase_map_clear (ase_map_t* map);
|
||||
void ase_map_clear (
|
||||
ase_map_t* map /* a map */
|
||||
);
|
||||
|
||||
/* get the number of key/value pairs in a map
|
||||
ase_size_t ase_map_getsize (ase_map_t* map);
|
||||
/*
|
||||
* NAME: specifies how to clone an element
|
||||
*
|
||||
* DESCRIPTION:
|
||||
* A special copier ASE_MAP_COPIER_INLINE is provided. This copier enables
|
||||
* you to copy the data inline to the internal node. No freeer is invoked
|
||||
* when the node is freeed.
|
||||
*
|
||||
* You may set the copier to ASE_NULL to perform no special operation
|
||||
* when the data pointer is rememebered.
|
||||
*/
|
||||
void ase_map_setcopier (
|
||||
ase_map_t* map /* a map */,
|
||||
int id /* ASE_MAP_KEY or ASE_MAP_VAL */,
|
||||
ase_map_copier_t copier /* a element copier */
|
||||
);
|
||||
|
||||
ase_map_pair_t* ase_map_get (
|
||||
ase_map_copier_t ase_map_getcopier (
|
||||
ase_map_t* map /* a map */,
|
||||
int id /* ASE_MAP_KEY or ASE_MAP_VAL */
|
||||
);
|
||||
|
||||
/*
|
||||
* NAME: specifies how to destroy an element
|
||||
*
|
||||
* DESCRIPTION
|
||||
* The freeer is called when a node containing the element is destroyed.
|
||||
*/
|
||||
void ase_map_setfreeer (
|
||||
ase_map_t* map /* a map */,
|
||||
int id /* ASE_MAP_KEY or ASE_MAP_VAL */,
|
||||
ase_map_freeer_t freeer /* a element freeer */
|
||||
);
|
||||
|
||||
ase_map_freeer_t ase_map_getfreeer (
|
||||
ase_map_t* map /* a map */,
|
||||
int id /* ASE_MAP_KEY or ASE_MAP_VAL */
|
||||
);
|
||||
|
||||
ase_map_hasher_t ase_map_gethasher (
|
||||
ase_map_t* map
|
||||
);
|
||||
|
||||
void ase_map_sethasher (
|
||||
ase_map_t* map,
|
||||
ase_map_hasher_t hasher
|
||||
);
|
||||
|
||||
ase_map_comper_t ase_map_getcomper (
|
||||
ase_map_t* map
|
||||
);
|
||||
|
||||
void ase_map_setcomper (
|
||||
ase_map_t* map,
|
||||
ase_map_comper_t comper
|
||||
);
|
||||
|
||||
void* ase_map_getextension (
|
||||
ase_map_t* map
|
||||
);
|
||||
|
||||
ase_mmgr_t* ase_map_getmmgr (
|
||||
ase_map_t* map
|
||||
);
|
||||
|
||||
void ase_map_setmmgr (
|
||||
ase_map_t* map,
|
||||
ase_mmgr_t* mmgr
|
||||
);
|
||||
|
||||
/* get the number of key/value pairs in a map */
|
||||
ase_size_t ase_map_getsize (
|
||||
ase_map_t* map /* a map */
|
||||
);
|
||||
|
||||
/* get the pointer to the pair with a matching key */
|
||||
ase_map_pair_t* ase_map_get (
|
||||
ase_map_t* map /* a map */,
|
||||
const void* kptr,
|
||||
ase_size_t klen
|
||||
);
|
||||
|
||||
|
||||
/* insert or update a pair with a matching key */
|
||||
ase_map_pair_t* ase_map_put (
|
||||
ase_map_t* map,
|
||||
const void* kptr,
|
||||
ase_size_t klen,
|
||||
void* vptr,
|
||||
ase_size_t vlen
|
||||
ase_map_t* map /* a map */,
|
||||
void* kptr /* the pointer to the beginning of a key */,
|
||||
ase_size_t klen /* the length of the key in bytes */,
|
||||
void* vptr /* the pointer to the beginning of a value */,
|
||||
ase_size_t vlen /* the length of the value in bytes */
|
||||
);
|
||||
|
||||
int ase_map_putx (
|
||||
ase_map_t* map,
|
||||
ase_map_t* map /* a map */,
|
||||
void* kptr,
|
||||
ase_size_t klen,
|
||||
void* vptr,
|
||||
@ -151,25 +232,39 @@ int ase_map_putx (
|
||||
);
|
||||
|
||||
ase_map_pair_t* ase_map_set (
|
||||
ase_map_t* map,
|
||||
ase_map_t* map /* a map */,
|
||||
void* kptr,
|
||||
ase_size_t klen,
|
||||
void* vptr,
|
||||
ase_size_t vlen
|
||||
);
|
||||
|
||||
/* remove a pair with a matching key */
|
||||
int ase_map_remove (
|
||||
ase_map_t* map, const void* kptr, ase_size_t klen);
|
||||
ase_map_t* map /* a map */,
|
||||
const void* kptr,
|
||||
ase_size_t klen
|
||||
);
|
||||
|
||||
/* traverse a map */
|
||||
int ase_map_walk (ase_map_t* map, ase_map_walker_t walker, void* arg);
|
||||
void ase_map_walk (
|
||||
ase_map_t* map /* a map */,
|
||||
ase_map_walker_t walker /* the pointer to the function for each pair */,
|
||||
void* arg /* a pointer to user-specific data */
|
||||
);
|
||||
|
||||
/* get the pointer to the first pair in the map. */
|
||||
ase_map_pair_t* ase_map_getfirstpair (ase_map_t* map, ase_size_t* buckno);
|
||||
ase_map_pair_t* ase_map_getfirstpair (
|
||||
ase_map_t* map /* a map */,
|
||||
ase_size_t* buckno
|
||||
);
|
||||
|
||||
/* get the pointer to the next pair in the map. */
|
||||
ase_map_pair_t* ase_map_getnextpair (
|
||||
ase_map_t* map, ase_map_pair_t* pair, ase_size_t* buckno);
|
||||
ase_map_t* map /* a map */,
|
||||
ase_map_pair_t* pair,
|
||||
ase_size_t* buckno
|
||||
);
|
||||
|
||||
void* ase_map_copyinline (ase_map_t* map, void* dptr, ase_size_t dlen);
|
||||
|
||||
|
@ -91,8 +91,8 @@ extern "C" {
|
||||
|
||||
ase_sll_t* ase_sll_open (
|
||||
ase_mmgr_t* mmgr /* memory manager */ ,
|
||||
ase_size_t extension /* size of extension area in bytes */,
|
||||
void (*initializer) (ase_sll_t*) /* extension initializer */
|
||||
ase_size_t ext /* size of extension area in bytes */,
|
||||
void (*init) (ase_sll_t*) /* extension initializer */
|
||||
);
|
||||
|
||||
/*
|
||||
@ -112,7 +112,7 @@ void ase_sll_clear (
|
||||
/*
|
||||
* NAME: specifies how to clone an element
|
||||
*
|
||||
* DESCRIPTION
|
||||
* DESCRIPTION:
|
||||
* A special copier ASE_SLL_COPIER_INLINE is provided. This copier enables
|
||||
* you to copy the data inline to the internal node. No freeer is invoked
|
||||
* when the node is freeed.
|
||||
|
Reference in New Issue
Block a user