nengel@0: nengel@0: #include "ListOfArrays.h" seanhalle@14: #include "PR_impl/Services_Offered_by_PR/Memory_Handling/vmalloc.h" nengel@0: nengel@0: ListOfArrays* makeListOfArrays(size_t entry_size, int num_entries_per_block){ seanhalle@14: ListOfArrays* newLoA = (ListOfArrays*) PR_int__malloc(sizeof(ListOfArrays)); nengel@2: newLoA->dim1info = makePrivDynArrayOfSize(&(newLoA->dim1),8); nengel@3: 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@2: int n; nengel@1: uintptr_t p; nengel@5: int num_full = list->next_free_index / list->num_entries_per_fragment; //list->dim1info->numInArray -1 nengel@5: for(n=0;ndim1)[n]; p < (uintptr_t) (list->dim1)[n] + list->num_entries_per_fragment * list->entry_size; p += list->entry_size){ nengel@1: (*fnPtr)((void*)p); nengel@0: } nengel@0: } nengel@0: int offset_in_last = list->next_free_index % list->num_entries_per_fragment; nengel@2: n = list->dim1info->numInArray - 1; nengel@2: if (n >= 0){ nengel@2: 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: (*fnPtr)((void*)p); nengel@2: } nengel@2: } nengel@2: } nengel@1: nengel@3: void freeListOfArrays(ListOfArrays* list){ seanhalle@14: freeDynArrayDeep(list->dim1info,&PR_int__free); seanhalle@14: PR_int__free((void*)list); nengel@3: } nengel@3: nengel@2: /* nengel@2: void addToListOfArraysDependency(Dependency value, ListOfArrays* list){ nengel@2: int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; nengel@2: if(offset_in_fragment == 0){ seanhalle@14: void* newBlock = PR_int__malloc(list->entry_size * list->num_entries_per_fragment); nengel@2: addToDynArray(newBlock,list->dim1info); nengel@2: } nengel@2: Dependency* typedFragment = (Dependency*) ((list->dim1)[list->dim1info->numInArray -1]); nengel@2: typedFragment[offset_in_fragment] = value; nengel@2: list->next_free_index++; nengel@2: } nengel@2: nengel@2: void addToListOfArraysUnit(Unit value, ListOfArrays* list){ nengel@2: int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; nengel@2: if(offset_in_fragment == 0){ seanhalle@14: void* newBlock = PR_int__malloc(list->entry_size * list->num_entries_per_fragment); nengel@2: addToDynArray(newBlock,list->dim1info); nengel@2: } nengel@2: Unit* typedFragment = (Unit*) ((list->dim1)[list->dim1info->numInArray -1]); nengel@2: typedFragment[offset_in_fragment] = value; nengel@2: list->next_free_index++; nengel@2: } seanhalle@7: */ seanhalle@7: