Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > ListOfArrays
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 |
