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