Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > ListOfArrays
diff ListOfArrays.c @ 0:bc4b3434367f
bare bones - create, add, iter
| author | Nina Engelhardt <nengel@mailbox.tu-berlin.de> |
|---|---|
| date | Mon, 19 Dec 2011 13:25:30 +0100 |
| parents | |
| children | fd441e4d0908 |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/ListOfArrays.c Mon Dec 19 13:25:30 2011 +0100 1.3 @@ -0,0 +1,31 @@ 1.4 + 1.5 +#include "ListOfArrays.h" 1.6 +#include "../vmalloc.h" 1.7 + 1.8 +ListOfArrays* makeListOfArrays(size_t entry_size, int num_entries_per_block){ 1.9 + ListOfArrays* newLoA = (ListOfArrays*) VMS__malloc(sizeof(ListOfArrays)); 1.10 + newLoA->first = NULL; 1.11 + newLoA->last = NULL; 1.12 + newLoA->entry_size = entry_size; 1.13 + newLoA->num_entries_per_fragment = num_entries_per_block; 1.14 + newLoA->next_free_index = 0; 1.15 + 1.16 + return newLoA; 1.17 +} 1.18 + 1.19 +void forAllInListOfArraysDo(ListOfArrays* list, ListOfArraysFnPtr fnPtr){ 1.20 + ArrayFragment* current = list->first; 1.21 + while(current->next){ 1.22 + uintptr_t p; 1.23 + for(p = current->data; p < current->data + list->num_entries_per_fragment * list->entry_size; p += list->entry_size){ 1.24 + (*fnPtr)(p); 1.25 + } 1.26 + current = current->next; 1.27 + } 1.28 + //assert(current == list->last); 1.29 + int offset_in_last = list->next_free_index % list->num_entries_per_fragment; 1.30 + uintptr_t p; 1.31 + for(p = current->data; p < current->data + offset_in_last * list->entry_size; p += list->entry_size){ 1.32 + (*fnPtr)(p); 1.33 + } 1.34 +} 1.35 \ No newline at end of file
