Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > ListOfArrays
view ListOfArrays.h @ 14:70c43c8fbded
Renamed VMS to PR, in new branch
| author | Sean Halle <seanhalle@yahoo.com> |
|---|---|
| date | Mon, 03 Sep 2012 15:05:31 -0700 |
| parents | f75ec4738afc |
| children | 7731a4d31baa |
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"
15 typedef struct {
16 void* next;
17 void* data;
18 } ArrayFragment;
20 typedef struct {
21 void** dim1;
22 PrivDynArrayInfo* dim1info;
23 //ArrayFragment* last;
24 size_t entry_size;
25 int num_entries_per_fragment;
26 int next_free_index;
27 } ListOfArrays;
29 ListOfArrays* makeListOfArrays(size_t entry_size, int num_entries_per_block);
31 #define addToListOfArrays(type,value,list) do { \
32 int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; \
33 if(offset_in_fragment == 0){ \
34 void* newBlock = PR_int__malloc(list->entry_size * list->num_entries_per_fragment); \
35 addToDynArray(newBlock,list->dim1info); \
36 } \
37 type* typedFragment = (type*) ((list->dim1)[list->dim1info->numInArray -1]); \
38 typedFragment[offset_in_fragment] = value; \
39 list->next_free_index++; \
40 } while (0)
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)
53 typedef void (*ListOfArraysFnPtr) ( void * ); //fn has to cast void *
55 void forAllInListOfArraysDo(ListOfArrays* list, ListOfArraysFnPtr fnPtr);
57 #define valueInListOfArrays(type,index,list) ((type*)((list->dim1)[index / list->num_entries_per_fragment]))[index % list->num_entries_per_fragment]
59 #define setValueInListOfArrays(type,index,value,list) ((type*)((list->dim1)[index / list->num_entries_per_fragment]))[index % list->num_entries_per_fragment] = value
61 void freeListOfArrays(ListOfArrays* list);
63 #endif /* LISTOFARRAYS_H */
