Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > ListOfArrays
annotate ListOfArrays.c @ 14:70c43c8fbded
Renamed VMS to PR, in new branch
| author | Sean Halle <seanhalle@yahoo.com> |
|---|---|
| date | Mon, 03 Sep 2012 15:05:31 -0700 |
| parents | 5df9392eca1a |
| children | 7731a4d31baa |
| rev | line source |
|---|---|
| nengel@0 | 1 |
| nengel@0 | 2 #include "ListOfArrays.h" |
| seanhalle@14 | 3 #include "PR_impl/Services_Offered_by_PR/Memory_Handling/vmalloc.h" |
| nengel@0 | 4 |
| nengel@0 | 5 ListOfArrays* makeListOfArrays(size_t entry_size, int num_entries_per_block){ |
| seanhalle@14 | 6 ListOfArrays* newLoA = (ListOfArrays*) PR_int__malloc(sizeof(ListOfArrays)); |
| nengel@2 | 7 newLoA->dim1info = makePrivDynArrayOfSize(&(newLoA->dim1),8); |
| nengel@3 | 8 |
| nengel@0 | 9 newLoA->entry_size = entry_size; |
| nengel@0 | 10 newLoA->num_entries_per_fragment = num_entries_per_block; |
| nengel@0 | 11 newLoA->next_free_index = 0; |
| nengel@0 | 12 |
| nengel@0 | 13 return newLoA; |
| nengel@0 | 14 } |
| nengel@0 | 15 |
| nengel@0 | 16 void forAllInListOfArraysDo(ListOfArrays* list, ListOfArraysFnPtr fnPtr){ |
| nengel@2 | 17 int n; |
| nengel@1 | 18 uintptr_t p; |
| nengel@5 | 19 int num_full = list->next_free_index / list->num_entries_per_fragment; //list->dim1info->numInArray -1 |
| nengel@5 | 20 for(n=0;n<num_full; 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@3 | 34 void freeListOfArrays(ListOfArrays* list){ |
| seanhalle@14 | 35 freeDynArrayDeep(list->dim1info,&PR_int__free); |
| seanhalle@14 | 36 PR_int__free((void*)list); |
| nengel@3 | 37 } |
| nengel@3 | 38 |
| nengel@2 | 39 /* |
| nengel@2 | 40 void addToListOfArraysDependency(Dependency value, ListOfArrays* list){ |
| nengel@2 | 41 int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; |
| nengel@2 | 42 if(offset_in_fragment == 0){ |
| seanhalle@14 | 43 void* newBlock = PR_int__malloc(list->entry_size * list->num_entries_per_fragment); |
| nengel@2 | 44 addToDynArray(newBlock,list->dim1info); |
| nengel@2 | 45 } |
| nengel@2 | 46 Dependency* typedFragment = (Dependency*) ((list->dim1)[list->dim1info->numInArray -1]); |
| nengel@2 | 47 typedFragment[offset_in_fragment] = value; |
| nengel@2 | 48 list->next_free_index++; |
| nengel@2 | 49 } |
| nengel@2 | 50 |
| nengel@2 | 51 void addToListOfArraysUnit(Unit value, ListOfArrays* list){ |
| nengel@2 | 52 int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; |
| nengel@2 | 53 if(offset_in_fragment == 0){ |
| seanhalle@14 | 54 void* newBlock = PR_int__malloc(list->entry_size * list->num_entries_per_fragment); |
| nengel@2 | 55 addToDynArray(newBlock,list->dim1info); |
| nengel@2 | 56 } |
| nengel@2 | 57 Unit* typedFragment = (Unit*) ((list->dim1)[list->dim1info->numInArray -1]); |
| nengel@2 | 58 typedFragment[offset_in_fragment] = value; |
| nengel@2 | 59 list->next_free_index++; |
| nengel@2 | 60 } |
| seanhalle@7 | 61 */ |
| seanhalle@7 | 62 |
