diff ListOfArrays.h @ 12:abf2117d7535

make lists clearable
author Nina Engelhardt <nengel@mailbox.tu-berlin.de>
date Fri, 31 Aug 2012 18:27:26 +0200
parents f75ec4738afc
children 7128ffdcc797
line diff
     1.1 --- a/ListOfArrays.h	Tue Mar 13 18:31:06 2012 -0700
     1.2 +++ b/ListOfArrays.h	Fri Aug 31 18:27:26 2012 +0200
     1.3 @@ -12,15 +12,10 @@
     1.4  #include "DynArray/DynArray.h"
     1.5  
     1.6  
     1.7 -typedef struct {
     1.8 -    void* next;
     1.9 -    void* data;
    1.10 -} ArrayFragment;
    1.11  
    1.12  typedef struct {
    1.13      void** dim1;
    1.14      PrivDynArrayInfo* dim1info;
    1.15 -    //ArrayFragment* last;
    1.16      size_t entry_size;
    1.17      int num_entries_per_fragment;
    1.18      int next_free_index;
    1.19 @@ -30,7 +25,7 @@
    1.20  
    1.21  #define addToListOfArrays(type,value,list) do { \
    1.22      int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; \
    1.23 -    if(offset_in_fragment == 0){ \
    1.24 +    if(offset_in_fragment == 0 && (list->next_free_index / list->num_entries_per_fragment) >= list->dim1info->numInArray){ \
    1.25          void* newBlock = VMS_int__malloc(list->entry_size * list->num_entries_per_fragment); \
    1.26          addToDynArray(newBlock,list->dim1info); \
    1.27      } \
    1.28 @@ -41,7 +36,7 @@
    1.29  
    1.30  #define addToListOfArrays_ext(type,value,list) do { \
    1.31      int offset_in_fragment = list->next_free_index % list->num_entries_per_fragment; \
    1.32 -    if(offset_in_fragment == 0){ \
    1.33 +    if(offset_in_fragment == 0 && (list->next_free_index / list->num_entries_per_fragment) >= list->dim1info->numInArray){ \
    1.34          void* newBlock = malloc(list->entry_size * list->num_entries_per_fragment); \
    1.35          addToDynArray(newBlock,list->dim1info); \
    1.36      } \
    1.37 @@ -54,6 +49,8 @@
    1.38  
    1.39  void forAllInListOfArraysDo(ListOfArrays* list, ListOfArraysFnPtr fnPtr);
    1.40  
    1.41 +void clearListOfArrays(ListOfArrays* list);
    1.42 +
    1.43  #define valueInListOfArrays(type,index,list) ((type*)((list->dim1)[index / list->num_entries_per_fragment]))[index % list->num_entries_per_fragment]
    1.44  
    1.45  #define setValueInListOfArrays(type,index,value,list) ((type*)((list->dim1)[index / list->num_entries_per_fragment]))[index % list->num_entries_per_fragment] = value