Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > ListOfArrays
comparison ListOfArrays.h @ 5:79982974d355
fix bug when last fragment exactly full
| author | Nina Engelhardt <nengel@mailbox.tu-berlin.de> |
|---|---|
| date | Thu, 08 Mar 2012 19:05:26 +0100 |
| parents | 53df05eb8d43 |
| children | 0e6cc9d9ec67 |
comparison
equal
deleted
inserted
replaced
| 4:f31d50e6a045 | 5:0b9b647e647a |
|---|---|
| 37 type* typedFragment = (type*) ((list->dim1)[list->dim1info->numInArray -1]); \ | 37 type* typedFragment = (type*) ((list->dim1)[list->dim1info->numInArray -1]); \ |
| 38 typedFragment[offset_in_fragment] = value; \ | 38 typedFragment[offset_in_fragment] = value; \ |
| 39 list->next_free_index++; \ | 39 list->next_free_index++; \ |
| 40 } while (0) | 40 } while (0) |
| 41 | 41 |
| 42 #define addToListOfArrays_ext(type,value,list) do { \ | |
| 43 int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; \ | |
| 44 if(offset_in_fragment == 0){ \ | |
| 45 void* newBlock = malloc(list->entry_size * list->num_entries_per_fragment); \ | |
| 46 addToDynArray(newBlock,list->dim1info); \ | |
| 47 } \ | |
| 48 type* typedFragment = (type*) ((list->dim1)[list->dim1info->numInArray -1]); \ | |
| 49 typedFragment[offset_in_fragment] = value; \ | |
| 50 list->next_free_index++; \ | |
| 51 } while (0) | |
| 52 | |
| 42 typedef void (*ListOfArraysFnPtr) ( void * ); //fn has to cast void * | 53 typedef void (*ListOfArraysFnPtr) ( void * ); //fn has to cast void * |
| 43 | 54 |
| 44 void forAllInListOfArraysDo(ListOfArrays* list, ListOfArraysFnPtr fnPtr); | 55 void forAllInListOfArraysDo(ListOfArrays* list, ListOfArraysFnPtr fnPtr); |
| 45 | 56 |
| 46 #define valueInListOfArrays(type,index,list) ((type*)((list->dim1)[index / list->num_entries_per_fragment]))[index % list->num_entries_per_fragment] | 57 #define valueInListOfArrays(type,index,list) ((type*)((list->dim1)[index / list->num_entries_per_fragment]))[index % list->num_entries_per_fragment] |
