Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > ListOfArrays
diff 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 |
line diff
1.1 --- a/ListOfArrays.c Mon Dec 19 13:25:30 2011 +0100 1.2 +++ b/ListOfArrays.c Mon Dec 19 17:11:22 2011 +0100 1.3 @@ -15,17 +15,19 @@ 1.4 1.5 void forAllInListOfArraysDo(ListOfArrays* list, ListOfArraysFnPtr fnPtr){ 1.6 ArrayFragment* current = list->first; 1.7 - while(current->next){ 1.8 - uintptr_t p; 1.9 - for(p = current->data; p < current->data + list->num_entries_per_fragment * list->entry_size; p += list->entry_size){ 1.10 - (*fnPtr)(p); 1.11 + int num_full_blocks = (list->next_free_index / list->num_entries_per_fragment); 1.12 + uintptr_t p; 1.13 + while(num_full_blocks > 0){ 1.14 + for(p = (uintptr_t)&(current->data); p < (uintptr_t) &(current->data) + list->num_entries_per_fragment * list->entry_size; p += list->entry_size){ 1.15 + (*fnPtr)((void*)p); 1.16 } 1.17 - current = current->next; 1.18 + current = (ArrayFragment*) current->next; 1.19 + num_full_blocks--; 1.20 } 1.21 //assert(current == list->last); 1.22 int offset_in_last = list->next_free_index % list->num_entries_per_fragment; 1.23 - uintptr_t p; 1.24 - for(p = current->data; p < current->data + offset_in_last * list->entry_size; p += list->entry_size){ 1.25 - (*fnPtr)(p); 1.26 + 1.27 + for(p = (uintptr_t)&(current->data); p < (uintptr_t)&(current->data) + offset_in_last * list->entry_size; p += list->entry_size){ 1.28 + (*fnPtr)((void*)p); 1.29 } 1.30 } 1.31 \ No newline at end of file
