Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > ListOfArrays
annotate ListOfArrays.c @ 2:ef1712d6d7d8
change internal structure from list to dynarray
| author | Nina Engelhardt <nengel@mailbox.tu-berlin.de> |
|---|---|
| date | Tue, 20 Dec 2011 18:52:57 +0100 |
| parents | fd441e4d0908 |
| children | 9c577efe70cd |
| rev | line source |
|---|---|
| nengel@0 | 1 |
| nengel@0 | 2 #include "ListOfArrays.h" |
| nengel@0 | 3 #include "../vmalloc.h" |
| nengel@0 | 4 |
| nengel@0 | 5 ListOfArrays* makeListOfArrays(size_t entry_size, int num_entries_per_block){ |
| nengel@0 | 6 ListOfArrays* newLoA = (ListOfArrays*) VMS__malloc(sizeof(ListOfArrays)); |
| nengel@2 | 7 newLoA->dim1info = makePrivDynArrayOfSize(&(newLoA->dim1),8); |
| nengel@2 | 8 |
| nengel@2 | 9 |
| nengel@0 | 10 newLoA->entry_size = entry_size; |
| nengel@0 | 11 newLoA->num_entries_per_fragment = num_entries_per_block; |
| nengel@0 | 12 newLoA->next_free_index = 0; |
| nengel@0 | 13 |
| nengel@0 | 14 return newLoA; |
| nengel@0 | 15 } |
| nengel@0 | 16 |
| nengel@0 | 17 void forAllInListOfArraysDo(ListOfArrays* list, ListOfArraysFnPtr fnPtr){ |
| nengel@2 | 18 int n; |
| nengel@1 | 19 uintptr_t p; |
| nengel@2 | 20 for(n=0;n<list->dim1info->numInArray -1; n++){ |
| nengel@2 | 21 for(p = (uintptr_t) (list->dim1)[n]; p < (uintptr_t) (list->dim1)[n] + list->num_entries_per_fragment * list->entry_size; p += list->entry_size){ |
| nengel@1 | 22 (*fnPtr)((void*)p); |
| nengel@0 | 23 } |
| nengel@0 | 24 } |
| nengel@0 | 25 int offset_in_last = list->next_free_index % list->num_entries_per_fragment; |
| nengel@2 | 26 n = list->dim1info->numInArray - 1; |
| nengel@2 | 27 if (n >= 0){ |
| nengel@2 | 28 for(p = (uintptr_t)(list->dim1)[n]; p < (uintptr_t)(list->dim1)[n] + offset_in_last * list->entry_size; p += list->entry_size){ |
| nengel@2 | 29 (*fnPtr)((void*)p); |
| nengel@2 | 30 } |
| nengel@2 | 31 } |
| nengel@2 | 32 } |
| nengel@1 | 33 |
| nengel@2 | 34 /* |
| nengel@2 | 35 void addToListOfArraysDependency(Dependency value, ListOfArrays* list){ |
| nengel@2 | 36 int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; |
| nengel@2 | 37 if(offset_in_fragment == 0){ |
| nengel@2 | 38 void* newBlock = VMS__malloc(list->entry_size * list->num_entries_per_fragment); |
| nengel@2 | 39 addToDynArray(newBlock,list->dim1info); |
| nengel@2 | 40 } |
| nengel@2 | 41 Dependency* typedFragment = (Dependency*) ((list->dim1)[list->dim1info->numInArray -1]); |
| nengel@2 | 42 typedFragment[offset_in_fragment] = value; |
| nengel@2 | 43 list->next_free_index++; |
| nengel@2 | 44 } |
| nengel@2 | 45 |
| nengel@2 | 46 void addToListOfArraysUnit(Unit value, ListOfArrays* list){ |
| nengel@2 | 47 int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; |
| nengel@2 | 48 if(offset_in_fragment == 0){ |
| nengel@2 | 49 void* newBlock = VMS__malloc(list->entry_size * list->num_entries_per_fragment); |
| nengel@2 | 50 addToDynArray(newBlock,list->dim1info); |
| nengel@2 | 51 } |
| nengel@2 | 52 Unit* typedFragment = (Unit*) ((list->dim1)[list->dim1info->numInArray -1]); |
| nengel@2 | 53 typedFragment[offset_in_fragment] = value; |
| nengel@2 | 54 list->next_free_index++; |
| nengel@2 | 55 } |
| nengel@2 | 56 */ |
