Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > ListOfArrays
view ListOfArrays.h @ 13:7128ffdcc797
have allocation in coreloop use VMS_WL__malloc
| author | Nina Engelhardt <nengel@mailbox.tu-berlin.de> |
|---|---|
| date | Mon, 29 Oct 2012 16:53:01 +0100 |
| parents | abf2117d7535 |
| children |
line source
1 /*
2 * File: ListOfArrays.h
3 * Author: Nina Engelhardt
4 *
5 * Created on December 16, 2011, 2:06 PM
6 */
8 #ifndef _LISTOFARRAYS_H
9 #define _LISTOFARRAYS_H
11 #include<stddef.h>
12 #include "DynArray/DynArray.h"
16 typedef struct {
17 void** dim1;
18 PrivDynArrayInfo* dim1info;
19 size_t entry_size;
20 int num_entries_per_fragment;
21 int next_free_index;
22 } ListOfArrays;
24 ListOfArrays* makeListOfArrays(size_t entry_size, int num_entries_per_block);
26 #define addToListOfArrays(type,value,list) do { \
27 int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; \
28 if(offset_in_fragment == 0 && (list->next_free_index / list->num_entries_per_fragment) >= list->dim1info->numInArray){ \
29 void* newBlock = VMS_int__malloc(list->entry_size * list->num_entries_per_fragment); \
30 addToDynArray(newBlock,list->dim1info); \
31 } \
32 type* typedFragment = (type*) ((list->dim1)[list->dim1info->numInArray -1]); \
33 typedFragment[offset_in_fragment] = value; \
34 list->next_free_index++; \
35 } while (0)
37 #define addToListOfArrays_ext(type,value,list) do { \
38 int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; \
39 if(offset_in_fragment == 0 && (list->next_free_index / list->num_entries_per_fragment) >= list->dim1info->numInArray){ \
40 void* newBlock = VMS_WL__malloc(list->entry_size * list->num_entries_per_fragment); \
41 addToDynArray(newBlock,list->dim1info); \
42 } \
43 type* typedFragment = (type*) ((list->dim1)[list->dim1info->numInArray -1]); \
44 typedFragment[offset_in_fragment] = value; \
45 list->next_free_index++; \
46 } while (0)
48 typedef void (*ListOfArraysFnPtr) ( void * ); //fn has to cast void *
50 void forAllInListOfArraysDo(ListOfArrays* list, ListOfArraysFnPtr fnPtr);
52 void clearListOfArrays(ListOfArrays* list);
54 #define valueInListOfArrays(type,index,list) ((type*)((list->dim1)[index / list->num_entries_per_fragment]))[index % list->num_entries_per_fragment]
56 #define setValueInListOfArrays(type,index,value,list) ((type*)((list->dim1)[index / list->num_entries_per_fragment]))[index % list->num_entries_per_fragment] = value
58 void freeListOfArrays(ListOfArrays* list);
60 #endif /* LISTOFARRAYS_H */
