annotate ListOfArrays.h @ 4:53df05eb8d43

clean up debugging fns
author Nina Engelhardt <nengel@mailbox.tu-berlin.de>
date Wed, 21 Dec 2011 16:55:02 +0100
parents 9c577efe70cd
children 79982974d355
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@2 12 #include "../DynArray/DynArray.h"
nengel@2 13
nengel@1 14
nengel@0 15 typedef struct {
nengel@1 16 void* next;
nengel@0 17 void* data;
nengel@0 18 } ArrayFragment;
nengel@0 19
nengel@0 20 typedef struct {
nengel@2 21 void** dim1;
nengel@2 22 PrivDynArrayInfo* dim1info;
nengel@2 23 //ArrayFragment* last;
nengel@0 24 size_t entry_size;
nengel@0 25 int num_entries_per_fragment;
nengel@0 26 int next_free_index;
nengel@0 27 } ListOfArrays;
nengel@0 28
nengel@1 29 ListOfArrays* makeListOfArrays(size_t entry_size, int num_entries_per_block);
nengel@1 30
nengel@0 31 #define addToListOfArrays(type,value,list) do { \
nengel@0 32 int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; \
nengel@0 33 if(offset_in_fragment == 0){ \
nengel@2 34 void* newBlock = VMS__malloc(list->entry_size * list->num_entries_per_fragment); \
nengel@2 35 addToDynArray(newBlock,list->dim1info); \
nengel@0 36 } \
nengel@2 37 type* typedFragment = (type*) ((list->dim1)[list->dim1info->numInArray -1]); \
nengel@0 38 typedFragment[offset_in_fragment] = value; \
nengel@1 39 list->next_free_index++; \
nengel@0 40 } while (0)
nengel@0 41
nengel@0 42 typedef void (*ListOfArraysFnPtr) ( void * ); //fn has to cast void *
nengel@0 43
nengel@1 44 void forAllInListOfArraysDo(ListOfArrays* list, ListOfArraysFnPtr fnPtr);
nengel@1 45
nengel@3 46 #define valueInListOfArrays(type,index,list) ((type*)((list->dim1)[index / list->num_entries_per_fragment]))[index % list->num_entries_per_fragment]
nengel@1 47
nengel@3 48 #define setValueInListOfArrays(type,index,value,list) ((type*)((list->dim1)[index / list->num_entries_per_fragment]))[index % list->num_entries_per_fragment] = value
nengel@1 49
nengel@4 50 void freeListOfArrays(ListOfArrays* list);
nengel@4 51
nengel@0 52 #endif /* LISTOFARRAYS_H */
nengel@0 53