annotate ListOfArrays.h @ 1:fd441e4d0908
bugfix
| author |
Nina Engelhardt <nengel@mailbox.tu-berlin.de> |
| date |
Mon, 19 Dec 2011 17:11:22 +0100 |
| parents |
bc4b3434367f |
| children |
ef1712d6d7d8 |
| rev |
line source |
|
nengel@0
|
1 /*
|
|
nengel@0
|
2 * File: ListOfArrays.h
|
|
nengel@0
|
3 * Author: Nina Engelhardt
|
|
nengel@0
|
4 *
|
|
nengel@0
|
5 * Created on December 16, 2011, 2:06 PM
|
|
nengel@0
|
6 */
|
|
nengel@0
|
7
|
|
nengel@0
|
8 #ifndef LISTOFARRAYS_H
|
|
nengel@0
|
9 #define LISTOFARRAYS_H
|
|
nengel@0
|
10
|
|
nengel@1
|
11 #include<stddef.h>
|
|
nengel@1
|
12
|
|
nengel@0
|
13 typedef struct {
|
|
nengel@1
|
14 void* next;
|
|
nengel@0
|
15 void* data;
|
|
nengel@0
|
16 } ArrayFragment;
|
|
nengel@0
|
17
|
|
nengel@0
|
18 typedef struct {
|
|
nengel@0
|
19 ArrayFragment* first;
|
|
nengel@0
|
20 ArrayFragment* last;
|
|
nengel@0
|
21 size_t entry_size;
|
|
nengel@0
|
22 int num_entries_per_fragment;
|
|
nengel@0
|
23 int next_free_index;
|
|
nengel@0
|
24 } ListOfArrays;
|
|
nengel@0
|
25
|
|
nengel@1
|
26 ListOfArrays* makeListOfArrays(size_t entry_size, int num_entries_per_block);
|
|
nengel@1
|
27
|
|
nengel@0
|
28 #define addToListOfArrays(type,value,list) do { \
|
|
nengel@0
|
29 int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; \
|
|
nengel@0
|
30 if(offset_in_fragment == 0){ \
|
|
nengel@0
|
31 ArrayFragment* newBlock = (ArrayFragment*) VMS__malloc(sizeof(ArrayFragment*) + list->entry_size * list->num_entries_per_fragment); \
|
|
nengel@0
|
32 newBlock->next == NULL; \
|
|
nengel@0
|
33 if(list->first == NULL) {\
|
|
nengel@0
|
34 list->first = newBlock; \
|
|
nengel@0
|
35 } \
|
|
nengel@0
|
36 if(list->last != NULL) { \
|
|
nengel@0
|
37 list->last->next = newBlock; \
|
|
nengel@0
|
38 } \
|
|
nengel@0
|
39 list->last = newBlock; \
|
|
nengel@0
|
40 } \
|
|
nengel@1
|
41 type* typedFragment = (type*) &(list->last->data); \
|
|
nengel@0
|
42 typedFragment[offset_in_fragment] = value; \
|
|
nengel@1
|
43 list->next_free_index++; \
|
|
nengel@0
|
44 } while (0)
|
|
nengel@0
|
45
|
|
nengel@0
|
46 typedef void (*ListOfArraysFnPtr) ( void * ); //fn has to cast void *
|
|
nengel@0
|
47
|
|
nengel@1
|
48 void forAllInListOfArraysDo(ListOfArrays* list, ListOfArraysFnPtr fnPtr);
|
|
nengel@1
|
49
|
|
nengel@1
|
50 #define getValuefromListOfArrays(type,index,list)
|
|
nengel@1
|
51
|
|
nengel@1
|
52 #define setValueInListOfArrays(type,index,value,list)
|
|
nengel@1
|
53
|
|
nengel@0
|
54 #endif /* LISTOFARRAYS_H */
|
|
nengel@0
|
55
|