- table->mask = (newsize << 2)-1;
- table->numelements = 0;
-
- for(i = 0; i < oldsize; i++) { //Outer loop for each bin in hash table
- curr = &ptr[i];
- isfirst = 1;
- while (curr != NULL) { //Inner loop to go through linked lists
- if (curr->key == 0) { //Exit inner loop if there the first element for a given bin/index is NULL
- break; //key = val =0 for element if not present within the hash table
- }
- next = curr->next;
-
- index =(curr->key & table->mask)>>2;
- // Insert into the new table
- if(table->table[index].next == NULL && table->table[index].key == 0) {
- table->table[index].key = curr->key;
- table->table[index].val = curr->val;
- table->numelements++;
- table->table[index].lnext=last;
- last=&table->table[index];
- } else {
- if((newnode = calloc(1, sizeof(cnode_t))) == NULL) {
- printf("Calloc error %s, %d\n", __FILE__, __LINE__);
- return 1;
- }
- newnode->key = curr->key;
- newnode->val = curr->val;
- newnode->next = table->table[index].next;
- table->table[index].next = newnode;
- table->numelements++;
+ table->mask = mask;
+ table->resize=newsize*table->loadfactor;
+
+ for(i = 0; i < oldsize; i++) {
+ int isfirst=1;
+ cnode_t * curr=&ptr[i];
+ if (curr->key==0)
+ continue;
+ while(curr!=NULL) {
+ cnode_t * next = curr->next;
+ int index =(curr->key & mask)>>2;
+ cnode_t * newnode=&ntable[index];
+
+ if(newnode->key==0) {
+ newnode->key=curr->key;
+ newnode->val=curr->val;