+
+void insertAux(t_hash h, unsigned char *aWord, unsigned long len, unsigned long pos)
+{
+ unsigned long addr = 0;
+ unsigned long dummy = search(h, aWord, len, &addr);
+ h->hash[addr].word = aWord;
+ h->hash[addr].len = len;
+ h->hash[addr].posInVoc = pos;
+ h->NumElem++;
+}
+
+void resize(t_hash h){
+ unsigned long oldsize = h->SIZE_HASH;
+ unsigned long newsize = NearestPrime(h->SIZE_HASH * 2);
+ t_hashNode* oldh = h->hash;
+ unsigned long l = newsize * sizeof(t_hashNode);
+ t_hashNode* newh = (t_hashNode *) malloc(newsize * sizeof(t_hashNode));
+ unsigned long i;
+ fprintf(stderr, "Resizing hashtable from %lu to %lu (%lu bytes)\n", oldsize, newsize, l);
+ h->hash = newh;
+ h->SIZE_HASH = newsize;
+ for (i = 0; i < h->SIZE_HASH; i++) {
+ h->hash[i].word = NULL;
+ h->hash[i].len = 0;
+ h->hash[i].posInVoc = 0;
+ }
+ h->NumElem = 0;
+ for(i = 0; i < oldsize; i++)
+ if (oldh[i].word != NULL){
+ insertAux(h, oldh[i].word, oldh[i].len, oldh[i].posInVoc);
+ oldh[i].word = NULL;
+ oldh[i].len = 0;
+ oldh[i].posInVoc=0;
+ }
+ //free(oldh);
+
+}
+
+