This commit is contained in:
2008-08-29 08:21:25 +00:00
parent 616ddad7d7
commit 2390cda730
10 changed files with 115 additions and 72 deletions

View File

@ -8,7 +8,8 @@
#include "mem.h"
ase_dll_t* ase_dll_open (
ase_mmgr_t* mmgr, ase_size_t ext, void (*init) (ase_dll_t*))
ase_mmgr_t* mmgr, ase_size_t ext,
void (*init) (ase_dll_t*, void*), void* init_data)
{
ase_dll_t* dll;
@ -28,7 +29,7 @@ ase_dll_t* ase_dll_open (
ASE_MEMSET (dll, 0, ASE_SIZEOF(ase_dll_t) + ext);
dll->mmgr = mmgr;
if (init) init (dll);
if (init) init (dll, init_data);
return dll;
}

View File

@ -1,5 +1,5 @@
/*
* $Id: map.c 348 2008-08-28 10:29:53Z baconevi $
* $Id: map.c 349 2008-08-28 14:21:25Z baconevi $
*
* {License}
*/
@ -197,8 +197,9 @@ static pair_t* change_pair_val (
}
map_t* ase_map_open (
mmgr_t* mmgr, size_t ext, void (*init) (map_t*),
size_t init_capa, unsigned int load_factor)
mmgr_t* mmgr, size_t ext,
void (*init) (map_t*, void*), void* init_data,
size_t capa, unsigned int load_factor)
{
map_t* map;
@ -212,7 +213,7 @@ map_t* ase_map_open (
if (mmgr == ASE_NULL) return ASE_NULL;
}
ASE_ASSERTX (init_capa >= 0,
ASE_ASSERTX (capa >= 0,
"The initial capacity should be greater than 0");
ASE_ASSERTX (load_factor >= 0 && load_factor <= 100,
@ -221,7 +222,7 @@ map_t* ase_map_open (
map = ASE_MMGR_ALLOC (mmgr, SIZEOF(map_t)+SIZEOF(priv_t)+ext);
if (map == ASE_NULL) return ASE_NULL;
PRIV(map)->bucket = ASE_MMGR_ALLOC (mmgr, init_capa*SIZEOF(pair_t*));
PRIV(map)->bucket = ASE_MMGR_ALLOC (mmgr, capa*SIZEOF(pair_t*));
if (PRIV(map)->bucket == ASE_NULL)
{
ASE_MMGR_FREE (mmgr, map);
@ -232,13 +233,13 @@ map_t* ase_map_open (
map->mmgr = mmgr;
map->size = 0;
map->capa = init_capa;
map->capa = capa;
PRIV(map)->load_factor = load_factor;
map->hasher = hash_key;
map->comper = comp_key;
if (init) init (map);
if (init) init (map, init_data);
return map;
}

View File

@ -24,7 +24,9 @@
#define size_t ase_size_t
#define mmgr_t ase_mmgr_t
sll_t* ase_sll_open (mmgr_t* mmgr, size_t ext, void (*init) (sll_t*))
sll_t* ase_sll_open (
mmgr_t* mmgr, size_t ext,
void (*init) (sll_t*, void*), void* init_data)
{
sll_t* sll;
@ -44,7 +46,7 @@ sll_t* ase_sll_open (mmgr_t* mmgr, size_t ext, void (*init) (sll_t*))
ASE_MEMSET (sll, 0, ASE_SIZEOF(sll_t) + ext);
sll->mmgr = mmgr;
if (init) init (sll);
if (init) init (sll, init_data);
return sll;
}