comparison ListOfArrays.c @ 1:fd441e4d0908

bugfix
author Nina Engelhardt <nengel@mailbox.tu-berlin.de>
date Mon, 19 Dec 2011 17:11:22 +0100
parents bc4b3434367f
children ef1712d6d7d8
comparison
equal deleted inserted replaced
0:5598e50c8802 1:634e0ab819c3
13 return newLoA; 13 return newLoA;
14 } 14 }
15 15
16 void forAllInListOfArraysDo(ListOfArrays* list, ListOfArraysFnPtr fnPtr){ 16 void forAllInListOfArraysDo(ListOfArrays* list, ListOfArraysFnPtr fnPtr){
17 ArrayFragment* current = list->first; 17 ArrayFragment* current = list->first;
18 while(current->next){ 18 int num_full_blocks = (list->next_free_index / list->num_entries_per_fragment);
19 uintptr_t p; 19 uintptr_t p;
20 for(p = current->data; p < current->data + list->num_entries_per_fragment * list->entry_size; p += list->entry_size){ 20 while(num_full_blocks > 0){
21 (*fnPtr)(p); 21 for(p = (uintptr_t)&(current->data); p < (uintptr_t) &(current->data) + list->num_entries_per_fragment * list->entry_size; p += list->entry_size){
22 (*fnPtr)((void*)p);
22 } 23 }
23 current = current->next; 24 current = (ArrayFragment*) current->next;
25 num_full_blocks--;
24 } 26 }
25 //assert(current == list->last); 27 //assert(current == list->last);
26 int offset_in_last = list->next_free_index % list->num_entries_per_fragment; 28 int offset_in_last = list->next_free_index % list->num_entries_per_fragment;
27 uintptr_t p; 29
28 for(p = current->data; p < current->data + offset_in_last * list->entry_size; p += list->entry_size){ 30 for(p = (uintptr_t)&(current->data); p < (uintptr_t)&(current->data) + offset_in_last * list->entry_size; p += list->entry_size){
29 (*fnPtr)(p); 31 (*fnPtr)((void*)p);
30 } 32 }
31 } 33 }