Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > ListOfArrays
view ListOfArrays.h @ 3:9c577efe70cd
added random access and free
| author | Nina Engelhardt <nengel@mailbox.tu-berlin.de> |
|---|---|
| date | Wed, 21 Dec 2011 14:28:51 +0100 |
| parents | ef1712d6d7d8 |
| children | 53df05eb8d43 |
line source
1 /*
2 * File: ListOfArrays.h
3 * Author: Nina Engelhardt
4 *
5 * Created on December 16, 2011, 2:06 PM
6 */
8 #ifndef LISTOFARRAYS_H
9 #define LISTOFARRAYS_H
11 #include<stddef.h>
12 #include "../DynArray/DynArray.h"
13 #include "../../dependency.h"
16 typedef struct {
17 void* next;
18 void* data;
19 } ArrayFragment;
21 typedef struct {
22 void** dim1;
23 PrivDynArrayInfo* dim1info;
24 //ArrayFragment* last;
25 size_t entry_size;
26 int num_entries_per_fragment;
27 int next_free_index;
28 } ListOfArrays;
30 ListOfArrays* makeListOfArrays(size_t entry_size, int num_entries_per_block);
32 #define addToListOfArrays(type,value,list) do { \
33 int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; \
34 if(offset_in_fragment == 0){ \
35 void* newBlock = VMS__malloc(list->entry_size * list->num_entries_per_fragment); \
36 addToDynArray(newBlock,list->dim1info); \
37 } \
38 type* typedFragment = (type*) ((list->dim1)[list->dim1info->numInArray -1]); \
39 typedFragment[offset_in_fragment] = value; \
40 list->next_free_index++; \
41 } while (0)
43 //void addToListOfArraysDependency(Dependency value, ListOfArrays* list);
44 //void addToListOfArraysUnit(Unit value, ListOfArrays* list);
46 typedef void (*ListOfArraysFnPtr) ( void * ); //fn has to cast void *
48 void forAllInListOfArraysDo(ListOfArrays* list, ListOfArraysFnPtr fnPtr);
50 #define valueInListOfArrays(type,index,list) ((type*)((list->dim1)[index / list->num_entries_per_fragment]))[index % list->num_entries_per_fragment]
52 #define setValueInListOfArrays(type,index,value,list) ((type*)((list->dim1)[index / list->num_entries_per_fragment]))[index % list->num_entries_per_fragment] = value
54 #endif /* LISTOFARRAYS_H */
