nengel@0: nengel@0: #include "ListOfArrays.h" nengel@0: #include "../vmalloc.h" nengel@0: nengel@0: ListOfArrays* makeListOfArrays(size_t entry_size, int num_entries_per_block){ nengel@0: ListOfArrays* newLoA = (ListOfArrays*) VMS__malloc(sizeof(ListOfArrays)); nengel@0: newLoA->first = NULL; nengel@0: newLoA->last = NULL; nengel@0: newLoA->entry_size = entry_size; nengel@0: newLoA->num_entries_per_fragment = num_entries_per_block; nengel@0: newLoA->next_free_index = 0; nengel@0: nengel@0: return newLoA; nengel@0: } nengel@0: nengel@0: void forAllInListOfArraysDo(ListOfArrays* list, ListOfArraysFnPtr fnPtr){ nengel@0: ArrayFragment* current = list->first; nengel@0: while(current->next){ nengel@0: uintptr_t p; nengel@0: for(p = current->data; p < current->data + list->num_entries_per_fragment * list->entry_size; p += list->entry_size){ nengel@0: (*fnPtr)(p); nengel@0: } nengel@0: current = current->next; nengel@0: } nengel@0: //assert(current == list->last); nengel@0: int offset_in_last = list->next_free_index % list->num_entries_per_fragment; nengel@0: uintptr_t p; nengel@0: for(p = current->data; p < current->data + offset_in_last * list->entry_size; p += list->entry_size){ nengel@0: (*fnPtr)(p); nengel@0: } nengel@0: }