view 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
line source
2 #include "ListOfArrays.h"
3 #include "../vmalloc.h"
5 ListOfArrays* makeListOfArrays(size_t entry_size, int num_entries_per_block){
6 ListOfArrays* newLoA = (ListOfArrays*) VMS__malloc(sizeof(ListOfArrays));
7 newLoA->dim1info = makePrivDynArrayOfSize(&(newLoA->dim1),8);
10 newLoA->entry_size = entry_size;
11 newLoA->num_entries_per_fragment = num_entries_per_block;
12 newLoA->next_free_index = 0;
14 return newLoA;
15 }
17 void forAllInListOfArraysDo(ListOfArrays* list, ListOfArraysFnPtr fnPtr){
18 int n;
19 uintptr_t p;
20 for(n=0;n<list->dim1info->numInArray -1; n++){
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){
22 (*fnPtr)((void*)p);
23 }
24 }
25 int offset_in_last = list->next_free_index % list->num_entries_per_fragment;
26 n = list->dim1info->numInArray - 1;
27 if (n >= 0){
28 for(p = (uintptr_t)(list->dim1)[n]; p < (uintptr_t)(list->dim1)[n] + offset_in_last * list->entry_size; p += list->entry_size){
29 (*fnPtr)((void*)p);
30 }
31 }
32 }
34 /*
35 void addToListOfArraysDependency(Dependency value, ListOfArrays* list){
36 int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment;
37 if(offset_in_fragment == 0){
38 void* newBlock = VMS__malloc(list->entry_size * list->num_entries_per_fragment);
39 addToDynArray(newBlock,list->dim1info);
40 }
41 Dependency* typedFragment = (Dependency*) ((list->dim1)[list->dim1info->numInArray -1]);
42 typedFragment[offset_in_fragment] = value;
43 list->next_free_index++;
44 }
46 void addToListOfArraysUnit(Unit value, ListOfArrays* list){
47 int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment;
48 if(offset_in_fragment == 0){
49 void* newBlock = VMS__malloc(list->entry_size * list->num_entries_per_fragment);
50 addToDynArray(newBlock,list->dim1info);
51 }
52 Unit* typedFragment = (Unit*) ((list->dim1)[list->dim1info->numInArray -1]);
53 typedFragment[offset_in_fragment] = value;
54 list->next_free_index++;
55 }
56 */