added hawk-map.h which uses either htb or rbt depending on HAWK_MAP_IS_HTB or HAWK_MAP_IS_RBT

the hawk's map value is now dependent on the above change. at compile time, you can choose HTB or RBT.
fixed a bug of not resetting FNR in the standard console read handlers
This commit is contained in:
2020-03-15 17:39:15 +00:00
parent 4121ef9b3f
commit 6cd9cafd33
15 changed files with 491 additions and 266 deletions

View File

@ -663,7 +663,14 @@ void hawk_htb_walk (hawk_htb_t* htb, walker_t walker, void* ctx)
}
}
pair_t* hawk_htb_getfirstpair (hawk_htb_t* htb, hawk_oow_t* buckno)
void hawk_init_htb_itr (hawk_htb_itr_t* itr)
{
itr->pair = HAWK_NULL;
itr->buckno = 0;
}
pair_t* hawk_htb_getfirstpair (hawk_htb_t* htb, hawk_htb_itr_t* itr)
{
hawk_oow_t i;
pair_t* pair;
@ -671,9 +678,10 @@ pair_t* hawk_htb_getfirstpair (hawk_htb_t* htb, hawk_oow_t* buckno)
for (i = 0; i < htb->capa; i++)
{
pair = htb->bucket[i];
if (pair != HAWK_NULL)
if (pair)
{
*buckno = i;
itr->buckno = i;
itr->pair = pair;
return pair;
}
}
@ -681,24 +689,26 @@ pair_t* hawk_htb_getfirstpair (hawk_htb_t* htb, hawk_oow_t* buckno)
return HAWK_NULL;
}
pair_t* hawk_htb_getnextpair (hawk_htb_t* htb, pair_t* pair, hawk_oow_t* buckno)
pair_t* hawk_htb_getnextpair (hawk_htb_t* htb, hawk_htb_itr_t* itr)
{
hawk_oow_t i;
pair_t* next;
pair_t* pair;
next = NEXT(pair);
if (next != HAWK_NULL)
pair = NEXT(itr->pair);
if (pair)
{
/* no change in bucket number */
return next;
itr->pair = pair;
return pair;
}
for (i = (*buckno)+1; i < htb->capa; i++)
for (i = itr->buckno + 1; i < htb->capa; i++)
{
pair = htb->bucket[i];
if (pair != HAWK_NULL)
if (pair)
{
*buckno = i;
itr->buckno = i;
itr->pair = pair;
return pair;
}
}