initially finished code change for the various changes in common routines
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: map.c 388 2008-09-26 07:26:20Z baconevi $
|
||||
* $Id: map.c 391 2008-09-27 09:51:23Z baconevi $
|
||||
*
|
||||
* {License}
|
||||
*/
|
||||
@ -24,10 +24,10 @@
|
||||
#define NEXT(p) ASE_MAP_NEXT(p)
|
||||
|
||||
#define SIZEOF(x) ASE_SIZEOF(x)
|
||||
#define size_t ase_size_t
|
||||
#define byte_t ase_byte_t
|
||||
#define uint_t ase_uint_t
|
||||
#define mmgr_t ase_mmgr_t
|
||||
#define size_t ase_size_t
|
||||
#define byte_t ase_byte_t
|
||||
#define uint_t ase_uint_t
|
||||
#define mmgr_t ase_mmgr_t
|
||||
|
||||
#define KTOB(map,len) ((len)*(map)->scale[ASE_MAP_KEY])
|
||||
#define VTOB(map,len) ((len)*(map)->scale[ASE_MAP_VAL])
|
||||
@ -108,11 +108,11 @@ static pair_t* alloc_pair (map_t* map,
|
||||
}
|
||||
else
|
||||
{
|
||||
n->vptr = vcop (map, vptr, vlen);
|
||||
if (n->vptr != ASE_NULL)
|
||||
VPTR(n) = vcop (map, vptr, vlen);
|
||||
if (VPTR(n) != ASE_NULL)
|
||||
{
|
||||
if (map->freeer[ASE_MAP_KEY] != ASE_NULL)
|
||||
map->freeer[ASE_MAP_KEY] (map, n->kptr, n->klen);
|
||||
map->freeer[ASE_MAP_KEY] (map, KPTR(n), KLEN(n));
|
||||
ASE_MMGR_FREE (map->mmgr, n);
|
||||
return ASE_NULL;
|
||||
}
|
||||
@ -274,25 +274,29 @@ void ase_map_fini (map_t* map)
|
||||
ASE_MMGR_FREE (map->mmgr, map->bucket);
|
||||
}
|
||||
|
||||
void ase_map_clear (map_t* map)
|
||||
void* ase_map_getextension (map_t* map)
|
||||
{
|
||||
size_t i;
|
||||
pair_t* pair, * next;
|
||||
return map + 1;
|
||||
}
|
||||
|
||||
for (i = 0; i < map->capa; i++)
|
||||
{
|
||||
pair = map->bucket[i];
|
||||
mmgr_t* ase_map_getmmgr (map_t* map)
|
||||
{
|
||||
return map->mmgr;
|
||||
}
|
||||
|
||||
while (pair != ASE_NULL)
|
||||
{
|
||||
next = NEXT(pair);
|
||||
free_pair (map, pair);
|
||||
map->size--;
|
||||
pair = next;
|
||||
}
|
||||
void ase_map_setmmgr (map_t* map, mmgr_t* mmgr)
|
||||
{
|
||||
map->mmgr = mmgr;
|
||||
}
|
||||
|
||||
map->bucket[i] = ASE_NULL;
|
||||
}
|
||||
size_t ase_map_getsize (map_t* map)
|
||||
{
|
||||
return map->size;
|
||||
}
|
||||
|
||||
size_t ase_map_getcapa (map_t* map)
|
||||
{
|
||||
return map->capa;
|
||||
}
|
||||
|
||||
int ase_map_getscale (map_t* map, int id)
|
||||
@ -386,31 +390,6 @@ void ase_map_setsizer (map_t* map, sizer_t sizer)
|
||||
map->sizer = sizer;
|
||||
}
|
||||
|
||||
void* ase_map_getextension (map_t* map)
|
||||
{
|
||||
return map + 1;
|
||||
}
|
||||
|
||||
mmgr_t* ase_map_getmmgr (map_t* map)
|
||||
{
|
||||
return map->mmgr;
|
||||
}
|
||||
|
||||
void ase_map_setmmgr (map_t* map, mmgr_t* mmgr)
|
||||
{
|
||||
map->mmgr = mmgr;
|
||||
}
|
||||
|
||||
size_t ase_map_getsize (map_t* map)
|
||||
{
|
||||
return map->size;
|
||||
}
|
||||
|
||||
size_t ase_map_getcapa (map_t* map)
|
||||
{
|
||||
return map->capa;
|
||||
}
|
||||
|
||||
pair_t* ase_map_search (map_t* map, const void* kptr, size_t klen)
|
||||
{
|
||||
pair_t* pair;
|
||||
@ -605,6 +584,28 @@ int ase_map_delete (map_t* map, const void* kptr, size_t klen)
|
||||
return -1;
|
||||
}
|
||||
|
||||
void ase_map_clear (map_t* map)
|
||||
{
|
||||
size_t i;
|
||||
pair_t* pair, * next;
|
||||
|
||||
for (i = 0; i < map->capa; i++)
|
||||
{
|
||||
pair = map->bucket[i];
|
||||
|
||||
while (pair != ASE_NULL)
|
||||
{
|
||||
next = NEXT(pair);
|
||||
free_pair (map, pair);
|
||||
map->size--;
|
||||
pair = next;
|
||||
}
|
||||
|
||||
map->bucket[i] = ASE_NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ase_map_walk (map_t* map, walker_t walker, void* arg)
|
||||
{
|
||||
size_t i;
|
||||
|
@ -21,6 +21,8 @@
|
||||
#define DLEN(n) ASE_SLL_DLEN(n)
|
||||
#define NEXT(n) ASE_SLL_NEXT(n)
|
||||
|
||||
#define TOB(sll,len) ((len)*(sll)->scale)
|
||||
|
||||
#define size_t ase_size_t
|
||||
#define mmgr_t ase_mmgr_t
|
||||
|
||||
@ -55,6 +57,8 @@ sll_t* ase_sll_init (sll_t* sll, mmgr_t* mmgr)
|
||||
/* do not zero out the extension */
|
||||
ASE_MEMSET (sll, 0, ASE_SIZEOF(sll_t));
|
||||
sll->mmgr = mmgr;
|
||||
sll->size = 0;
|
||||
sll->scale = 1;
|
||||
return sll;
|
||||
}
|
||||
|
||||
@ -63,12 +67,6 @@ void ase_sll_fini (sll_t* sll)
|
||||
ase_sll_clear (sll);
|
||||
}
|
||||
|
||||
void ase_sll_clear (sll_t* sll)
|
||||
{
|
||||
while (HEAD(sll) != ASE_NULL) ase_sll_delete (sll, HEAD(sll));
|
||||
ASE_ASSERT (TAIL(sll) == ASE_NULL);
|
||||
}
|
||||
|
||||
void* ase_sll_getextension (sll_t* sll)
|
||||
{
|
||||
return sll + 1;
|
||||
@ -99,6 +97,22 @@ node_t* ase_sll_gettail (sll_t* sll)
|
||||
return TAIL(sll);
|
||||
}
|
||||
|
||||
int ase_sll_getscale (sll_t* sll)
|
||||
{
|
||||
return sll->scale;
|
||||
}
|
||||
|
||||
void ase_sll_setscale (sll_t* sll, int scale)
|
||||
{
|
||||
ASE_ASSERTX (scale > 0 && scale <= ASE_TYPE_MAX(ase_byte_t),
|
||||
"The scale should be larger than 0 and less than or equal to the maximum value that the ase_byte_t type can hold");
|
||||
|
||||
if (scale <= 0) scale = 1;
|
||||
if (scale > ASE_TYPE_MAX(ase_byte_t)) scale = ASE_TYPE_MAX(ase_byte_t);
|
||||
|
||||
sll->scale = scale;
|
||||
}
|
||||
|
||||
copier_t ase_sll_getcopier (sll_t* sll)
|
||||
{
|
||||
return sll->copier;
|
||||
@ -131,10 +145,11 @@ static node_t* alloc_node (sll_t* sll, void* dptr, size_t dlen)
|
||||
}
|
||||
else if (sll->copier == ASE_SLL_COPIER_INLINE)
|
||||
{
|
||||
n = ASE_MMGR_ALLOC (sll->mmgr, ASE_SIZEOF(node_t) + dlen);
|
||||
n = ASE_MMGR_ALLOC (sll->mmgr,
|
||||
ASE_SIZEOF(node_t) + TOB(sll,dlen));
|
||||
if (n == ASE_NULL) return ASE_NULL;
|
||||
|
||||
ASE_MEMCPY (n + 1, dptr, dlen);
|
||||
ASE_MEMCPY (n + 1, dptr, TOB(sll,dlen));
|
||||
DPTR(n) = n + 1;
|
||||
}
|
||||
else
|
||||
@ -191,16 +206,6 @@ node_t* ase_sll_insert (
|
||||
return n;
|
||||
}
|
||||
|
||||
node_t* ase_sll_pushhead (sll_t* sll, void* data, size_t size)
|
||||
{
|
||||
return ase_sll_insert (sll, HEAD(sll), data, size);
|
||||
}
|
||||
|
||||
node_t* ase_sll_pushtail (sll_t* sll, void* data, size_t size)
|
||||
{
|
||||
return ase_sll_insert (sll, ASE_NULL, data, size);
|
||||
}
|
||||
|
||||
void ase_sll_delete (sll_t* sll, node_t* pos)
|
||||
{
|
||||
if (pos == ASE_NULL) return; /* not a valid node */
|
||||
@ -238,6 +243,22 @@ void ase_sll_delete (sll_t* sll, node_t* pos)
|
||||
SIZE(sll)--;
|
||||
}
|
||||
|
||||
void ase_sll_clear (sll_t* sll)
|
||||
{
|
||||
while (HEAD(sll) != ASE_NULL) ase_sll_delete (sll, HEAD(sll));
|
||||
ASE_ASSERT (TAIL(sll) == ASE_NULL);
|
||||
}
|
||||
|
||||
node_t* ase_sll_pushhead (sll_t* sll, void* data, size_t size)
|
||||
{
|
||||
return ase_sll_insert (sll, HEAD(sll), data, size);
|
||||
}
|
||||
|
||||
node_t* ase_sll_pushtail (sll_t* sll, void* data, size_t size)
|
||||
{
|
||||
return ase_sll_insert (sll, ASE_NULL, data, size);
|
||||
}
|
||||
|
||||
void ase_sll_pophead (sll_t* sll)
|
||||
{
|
||||
ase_sll_delete (sll, HEAD(sll));
|
||||
|
Reference in New Issue
Block a user