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