nengel@0: /* nengel@0: * File: ListOfArrays.h nengel@0: * Author: Nina Engelhardt nengel@0: * nengel@0: * Created on December 16, 2011, 2:06 PM nengel@0: */ nengel@0: nengel@0: #ifndef LISTOFARRAYS_H nengel@0: #define LISTOFARRAYS_H nengel@0: nengel@0: typedef struct { nengel@0: ArrayFragment* next; nengel@0: void* data; nengel@0: } ArrayFragment; nengel@0: nengel@0: typedef struct { nengel@0: ArrayFragment* first; nengel@0: ArrayFragment* last; nengel@0: size_t entry_size; nengel@0: int num_entries_per_fragment; nengel@0: int next_free_index; nengel@0: } ListOfArrays; nengel@0: nengel@0: #define addToListOfArrays(type,value,list) do { \ nengel@0: int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; \ nengel@0: if(offset_in_fragment == 0){ \ nengel@0: ArrayFragment* newBlock = (ArrayFragment*) VMS__malloc(sizeof(ArrayFragment*) + list->entry_size * list->num_entries_per_fragment); \ nengel@0: newBlock->next == NULL; \ nengel@0: if(list->first == NULL) {\ nengel@0: list->first = newBlock; \ nengel@0: } \ nengel@0: if(list->last != NULL) { \ nengel@0: list->last->next = newBlock; \ nengel@0: } \ nengel@0: list->last = newBlock; \ nengel@0: } \ nengel@0: (type*) typedFragment = (type*) list->last->data; \ nengel@0: typedFragment[offset_in_fragment] = value; \ nengel@0: } while (0) nengel@0: nengel@0: typedef void (*ListOfArraysFnPtr) ( void * ); //fn has to cast void * nengel@0: nengel@0: #endif /* LISTOFARRAYS_H */ nengel@0: