/*>>>>>>>>>>>>>>>>>> Resize the AA <<<<<<<<<<<<<<<<<*/
BOOLEAN aa_resize (aa,newsize)
AA * aa; /* input -- AA definition */
size_t newsize; /* input -- new size for AA */
{
BOOLEAN rc=TRUE;
void **newkeys, **newdata, **oldkeys, **olddata;
int i, oldsize, index;
newsize=prime_size(newsize); /* insure prime size */
/* alloc new/enlarged key and data tables */
newkeys=(void **)calloc(newsize, sizeof(void *));
newdata=(void **)calloc(newsize, sizeof(void *));
if ((aa->current_elements < MAXFULL(newsize)) &&
(newkeys && newdata)) {
oldkeys=aa->keys; /* save old table ptrs */
olddata=aa->data;
oldsize=aa->max_elements;
aa->keys=newkeys; /* put new tables in AA def */
aa->data=newdata;
aa->max_elements=newsize;
/* now add/rehash all keys/data into new table */
for (i=0; i<oldsize; i++) /*scan for valid keys*/
if (VALID_KEY(oldkeys[i])) {
index=hashindex(aa,oldkeys[i]);
aa->keys[index]=oldkeys[i];
aa->data[index]=olddata[i];
}
free((void *)oldkeys); free((void *)olddata);
} else { /* cleanup on error */
if (newkeys) free((void *)newkeys);
if (newdata) free((void *)newdata);
rc=FALSE;
}
return(rc); /* return status, TRUE if successful */
}
/* End of File */