1 /* 2 * Part of Scheme 48 1.9. See file COPYING for notices and license. 3 * 4 * Authors: David Frese 5 */ 6 7 #ifndef __S48_REMEMBERED_SET 8 #define __S48_REMEMBERED_SET 9 10 #include "utils.h" 11 #include "memory.h" 12 #include "gc_config.h" 13 14 #if (S48_USE_REMEMBERED_SETS) 15 16 #if S48_REMEMBERED_SET_TYPE==S48_DYNAMIC_REMEMBERED_SETS 17 /* Remembered Intergenerational Pointer Structure */ 18 typedef struct Rem_ip{ 19 s48_address ip; 20 struct Rem_ip* next_ip; 21 } Rem_ip; 22 #endif 23 24 typedef struct RemSet { 25 #if S48_REMEMBERED_SET_TYPE==S48_DYNAMIC_REMEMBERED_SETS 26 Rem_ip* first_el; 27 Rem_ip* last_el; 28 #elif S48_REMEMBERED_SET_TYPE==S48_STATIC_REMEMBERED_SETS 29 s48_address elements[S48_REMEMBERED_SET_SIZE]; 30 int free_index; 31 #elif S48_REMEMBERED_SET_TYPE==S48_EXTENSIBLE_REMEMBERED_SETS 32 s48_address elements[S48_REMEMBERED_SET_SIZE]; 33 int free_index; 34 struct RemSet* next_remset; 35 #endif 36 }RemSet; 37 38 /* RemSet Structure Construction */ 39 RemSet* s48_make_remset(); 40 void s48_free_remset(RemSet* remset); 41 42 /* Operations on RemSet */ 43 int s48_remset_add(s48_address ip, RemSet* remset); 44 int s48_remset_size(RemSet* remset); 45 void s48_trace_remset(RemSet* remset); 46 47 /* checks if all locations are inside the heap */ 48 void s48_check_remset(RemSet* remset); 49 #endif /* #if (S48_USE_REMEMBERED_SETS) */ 50 51 #endif 52