annotate ListOfArrays.h @ 0:bc4b3434367f

bare bones - create, add, iter
author Nina Engelhardt <nengel@mailbox.tu-berlin.de>
date Mon, 19 Dec 2011 13:25:30 +0100
parents
children fd441e4d0908
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@0 11 typedef struct {
nengel@0 12 ArrayFragment* next;
nengel@0 13 void* data;
nengel@0 14 } ArrayFragment;
nengel@0 15
nengel@0 16 typedef struct {
nengel@0 17 ArrayFragment* first;
nengel@0 18 ArrayFragment* last;
nengel@0 19 size_t entry_size;
nengel@0 20 int num_entries_per_fragment;
nengel@0 21 int next_free_index;
nengel@0 22 } ListOfArrays;
nengel@0 23
nengel@0 24 #define addToListOfArrays(type,value,list) do { \
nengel@0 25 int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; \
nengel@0 26 if(offset_in_fragment == 0){ \
nengel@0 27 ArrayFragment* newBlock = (ArrayFragment*) VMS__malloc(sizeof(ArrayFragment*) + list->entry_size * list->num_entries_per_fragment); \
nengel@0 28 newBlock->next == NULL; \
nengel@0 29 if(list->first == NULL) {\
nengel@0 30 list->first = newBlock; \
nengel@0 31 } \
nengel@0 32 if(list->last != NULL) { \
nengel@0 33 list->last->next = newBlock; \
nengel@0 34 } \
nengel@0 35 list->last = newBlock; \
nengel@0 36 } \
nengel@0 37 (type*) typedFragment = (type*) list->last->data; \
nengel@0 38 typedFragment[offset_in_fragment] = value; \
nengel@0 39 } while (0)
nengel@0 40
nengel@0 41 typedef void (*ListOfArraysFnPtr) ( void * ); //fn has to cast void *
nengel@0 42
nengel@0 43 #endif /* LISTOFARRAYS_H */
nengel@0 44